Итак, что же это за штуковина Докер?
Докер позволяет запускать приложения, которые вы создаете, внутри контейнеров. Запуск приложения внутри контейнера производится командой: docker run
.
Примечание: В зависимости от конфигурации системы на которой установлен Docker, вам может потребоваться дописывать перед каждым вызовом команды
docker
командуsudo
. Чтобы избежать этого, системный администратор может создать группу Unix под названиемdocker
и добавить в нее нужных пользователей.
Давайте запустим контейнер 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 контейнер останавливается.
Давайте создадим контейнер который будет работать как демон.
$ 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.
Комментарии:
Пожалуйста, авторизуйтесь что бы оставлять комментарии.