четверг, 11 декабря 2014 г.

Docker Hello world

Напишем простенький hello world:
# docker run ubuntu:14.10 /bin/echo 'Hello world'
Unable to find image 'ubuntu:14.10' locally
Pulling repository ubuntu
d6028e3b0b34: Download complete 
511136ea3c5a: Download complete 
df50890ba698: Download complete 
b526f11c9576: Download complete 
dde78202d417: Download complete 
Hello world

# docker run ubuntu:14.10 /bin/echo 'Hello world'
Hello world

Что тут произошло? Docker не нашел образ ubuntu:14.10 на локальном компьютере, поэтому скачал его с Docker Hub (https://hub.docker.com)



После указания образа системы, мы указали, какую команду выполнить внутри контейнера: /bin/echo 'Hello world'
Собственно это сообщение мы и увидели.

После выполнения данной программы, Docker контейнер сразу убивается.

Можно перейти в баш контейнера:
# docker run -t -i ubuntu:14.10 /bin/bash
root@c04fd681d2b3:/#
Флаг -t создает псевдо tty-терминал в новом контейнере.
А флаг -i как раз и указывает на интерактивный режим.

И выполним пару команд в нашем контейнере:
root@c04fd681d2b3:/# pwd
/
root@c04fd681d2b3:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

Выйдем из контейнера командой exit (или Ctrl+D)

А теперь сделаем так, что бы контейнер не умирал сразу, а выводил постоянно "hello world"

# docker run -d ubuntu:14.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
7a561149f7066e28a92ade78ef3842a2c86f177eca00f2a72acef7a5b614ae7b

Флаг -d указывает Docker'у запустить контейнер в бекграунде.
Однако почему мы не увидели постоянный вывод hello world, а какую-то странную строку?

Это ID запущенного контейнера.
Мы будем использовать этот ID , что бы узнать, чем там занимается наш контейнер.

Поглядим, жив ли контейнер?
# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
7a561149f706        ubuntu:14.10        "/bin/sh -c 'while t   3 minutes ago       Up 3 minutes                            mad_elion

Однако тут ID контейнера не такой длинный, а потому что docker выводит первые 13 символов из ID контейнера, для более простой работы с ним.

Мы увидели, что контейнер запущен, однако выполняет ли он переданную ему команду?
# docker logs 7a561149f706
hello world
hello world
...

параметр logs выводит весь STDOUT с указанного контейнера.

Остановим этот бесполезный контейнер:
# docker stop 7a561149f706
7a561149f706

И снова проверим, запущен ли контейнер?
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
#

Видим, что контейнер не запущен.

2 комментария: