Docker – uruchamiaj aplikacje w wirtualnym kontenerze

Narzędzie Docker udostępnione publicznie w 2013 roku umożliwia szybkie budowanie, wdrażanie i uruchamianie aplikacji w wirtualnym kontenerze wykorzystującym jądro systemu Linux. W kilku prostych krokach można pobrać obraz i uruchomić kontener np. z serwerem MongoDB, Redis, Elasticsearch czy RabbitMQ. W Docker Hub dostępnych jest wiele różnorodnych obrazów, a ich liczba ciągle się powiększa.

W celu rozpoczęcia przygody z Docker należy pobrać i zainstalować Docker Toolbox, a następnie należy uruchomić Docker Quickstart Terminal:

bash --login '/Applications/Docker/Docker Quickstart Terminal.app/Contents/Resources/Scripts/start.sh'
Last login: Wed May 11 17:34:38 on ttys000
MacBook-Pro-Sebastian:~ seba$ bash --login '/Applications/Docker/Docker Quickstart Terminal.app/Contents/Resources/Scripts/start.sh'


Creating CA: /Users/seba/.docker/machine/certs/ca.pem
Creating client certificate: /Users/seba/.docker/machine/certs/cert.pem
Running pre-create checks...
Creating machine...
(default) Copying /Users/seba/.docker/machine/cache/boot2docker.iso to /Users/seba/.docker/machine/machines/default/boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Found a new host-only adapter: "vboxnet0"
(default) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: /usr/local/bin/docker-machine env default

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/


docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

Po uruchomienia Docker’a można uruchomić pierwszy obraz Hello world:

MacBook-Pro-Sebastian:~ seba$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

4276590986f6: Pull complete 
a3ed95caeb02: Pull complete 
Digest: sha256:4f32210e234b4ad5cac92efacc0a3d602b02476c754f13d517e1ada048e5a8ba
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

Docker Toolbox dostarcz również Kinematic, który ułatwia wyszukiwanie dostępnych w Docker Hub obrazów, a także ich uruchamianie czy zatrzymywanie.

Po pobraniu jednego z dostępnych obrazów np. mongo i jego uruchomieniu z poziomu Kinematic w CLI Docker’a można sprawdzić listę obrazów:

bash-3.2$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mongo               latest              a55d8a328b43        8 days ago          313.1 MB

a także listę uruchomionych kontenerów:

bash-3.2$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
b22af5c6b273        mongo:latest        "/entrypoint.sh mongo"   6 seconds ago       Up 5 seconds        0.0.0.0:32773->27017/tcp   mongo

W uruchomionym kontenerze można uruchomić MongoDB shell za pomocą polecenia docker exec jako argumenty podając w pierwszej kolejności nazwę kontenera oraz polecenie do wykonania:

bash-3.2$ docker exec -it mongo mongo
MongoDB shell version: 3.2.6
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
	http://docs.mongodb.org/
Questions? Try the support group
	http://groups.google.com/group/mongodb-user
Server has startup warnings: 
2016-05-12T19:22:14.995+0000 I CONTROL  [initandlisten] 
2016-05-12T19:22:14.995+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-05-12T19:22:14.997+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-05-12T19:22:14.999+0000 I CONTROL  [initandlisten] 
2016-05-12T19:22:14.999+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-05-12T19:22:15.000+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-05-12T19:22:15.000+0000 I CONTROL  [initandlisten] 
> show dbs
local  0.000GB
> use test
switched to db test
> db.test.find()
> db.test.insert({a:1, b:2})
WriteResult({ "nInserted" : 1 })
> db.test.find()
{ "_id" : ObjectId("5734d823f45526dec15dc694"), "a" : 1, "b" : 2 }
> exit
bye

By sprawdzić czy wprowadzone do MongoDB dane zostały poprawnie zapisane, można zatrzymać kontener, uruchomić go ponownie i po zalogowaniu się do MongoDB shell zweryfikować czy wprowadzone dane dalej znajdują się w bazie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Time limit is exhausted. Please reload CAPTCHA.