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.