Hello world в контейнере

Итак, что же это за штуковина Докер?

Докер позволяет запускать приложения, которые вы создаете, внутри контейнеров. Запуск приложения внутри контейнера производится командой: docker run.

Примечание: В зависимости от конфигурации системы на которой установлен Docker, вам может потребоваться дописывать перед каждым вызовом команды docker команду sudo. Чтобы избежать этого, системный администратор может создать группу Unix под названием docker и добавить в нее нужных пользователей.

Запуск Hello world

Давайте запустим контейнер hello world.

$ docker run ubuntu /bin/echo 'Hello world'

Hello world

вы только что запустили свой первый контейнер!

В этом примере:

  • docker run запускает контейнер.

  • ubuntu если образ который вы запускаете, к примеру образ ОС Ubuntu. При задании образа, Docker сначала ищет его на хосте Докер. Если образ не существует локально, то образ извлекается из реестра Docker Hub.

  • /bin/echo команда выполняемая внутри контейнера.

Контейнер запущен. Docker создает новое окружение Ubuntu и выполняет команду /bin/echo выводящую:

Hello world

Что же происходит с контейнером после этого? Итак, Docker контейнеры выполняются только пока активна команда. Таким образом, в приведенном выше примере, контейнер останавливается после того, как команда будет выполнена.

Интерактивное выполнение контейнера

Давайте опробуем новую команду для запуска контейнера.

$ docker run -t -i ubuntu /bin/bash

root@af8bae53bdd3:/#

В этом примере:

  • docker run запускает контейнер.
  • ubuntu название запускаемого образа.
  • -t флаг активирует псевдо-терминал для нового контейнера
  • -i флаг позволяет сделать интерактивное соединение захватывая поток ввода STDIN.
  • /bin/bash запускает Bash shell внутри контейнера.

Контейнер запущен и мы видим командную строку "внутри" контейнера:

root@af8bae53bdd3:/#

Давайте попробуем выполнить несколько команд внутри контейнера:

root@af8bae53bdd3:/# pwd

/

root@af8bae53bdd3:/# ls

bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

В этом примере:

  • pwd отображает текущую директорию, / корневая директория.
  • ls выводит содержимое текущей директории в Linux.

Теперь вы можете поиграть с командной строкой контейнера. После чего выполните команду exit или нажмите Ctrl-D чтобы выйти из командной строки контейнера.

root@af8bae53bdd3:/# exit

Примечание:Как и наш предыдущий контейнер, после завершения процесса Bash shell контейнер останавливается.

Запуск Hello world как демона

Давайте создадим контейнер который будет работать как демон.

$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147

В этом примере:

  • docker run запускает контейнер.
  • -d флаг запускающий контейнер в фоновом режиме (демонизирует его, уж простите за каламбур).
  • ubuntu образ который вы запускаете.

Наконец, мы задаем команду для запуска:

/bin/sh -c "while true; do echo hello world; sleep 1; done"

В выводе мы не видим hello world, вместо нее есть длинная строка:

1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147

Эта длинная строка является ID контейнера. С этим уникальным идентификатором контейнера мы можем работать.

Примечание: ID контейнера длинный и громоздкий. Позже мы рассмотрим короткие ID и способы именовать контейнеры для упрощения работы с ними.

Мы можем использовать ID контейнера что бы посмотреть что же происходит внутри нашего hello world демона.

Для начала давайте убедимся что наш контейнер запущен. Выполните команду docker ps. Команда docker ps запрашивает у сервера Docker обо всех известных ему контейнерах.

$ docker ps

CONTAINER ID  IMAGE         COMMAND               CREATED        STATUS       PORTS NAMES
1e5535038e28  ubuntu  /bin/sh -c 'while tr  2 minutes ago  Up 1 minute        insane_babbage

В этом примере, мы можем видеть наш демонизированный контейнер. Команда docker ps возвращает полезную информацию:

  • 1e5535038e28 укороченный вариант ID контейнера.
  • ubuntu название используемого образа.
  • команда, время, статус и назначенное контейнеру имя insane_babbage.

Примечание: Docker автоматически генерирует имя для всех запускаемых контейнеров. Мы рассмотрим как давать свои собственные имена немного позже.

Теперь мы удостоверились что контейнер запущен. Но выполняет ли он то что нам нужно? Что бы увидеть это нам нужно заглянуть в контейнер с помощью команды docker logs.

Давайте используем имя контейнера insane_babbage.

$ docker logs insane_babbage

hello world
hello world
hello world
. . .

В этом примере:

  • docker logs заглядывает внутрь контейнера и возвращает hello world.

Потрясающе! Демон работает и вы создали свое первое фоновое приложение в Докер!

Теперь используйте команду docker stop что бы остановить наш контейнер.

$ docker stop insane_babbage

insane_babbage

Команда docker stop говорит Docker остановить контейнер и вернуть его имя.

Давайте проверим это с помощью команды docker ps.

$ docker ps

CONTAINER ID  IMAGE         COMMAND               CREATED        STATUS       PORTS NAMES

Отлично. Наш контейнер остановлен.

Следующие шаги

итак вы запустили свои первые контейнеры с помощью команды docker run. Вы запустили интерактивный контейнер консоли. Также вы запустили фоновый контейнер работающий как демон. В процессе вы узнали несколько Docker команд:

  • docker ps - Список запущенных контейнеров.
  • docker logs - Показывает стандартный вывод контейнера.
  • docker stop - Останавливает запущенные контейнеры.

Теперь, вы узнали основы Docker и выполнили парочку дополнительных задач. Посетите раздел Запуск простого приложения что бы научиться строить веб приложения с помощью Docker.


Комментарии:

Комментариев нет, желаете стать первым?

Пожалуйста, авторизуйтесь что бы оставлять комментарии.