Одним из преимуществ использования Docker является простота его установки и развертывания. При запросе нового образа автоматически будут установлены все программы и зависимости, которые необходимы для запуска контейнера.
Для установки потребуется VPS с установленной операционной системой Ubuntu.
Установка Docker
Скачиваем скрипт установки Docker
curl -fsSL https://get.docker.com -o install-docker.shПроверяем работу скачанного скрипта
sh install-docker.sh --dry-runЗапускаем установку Docker от root пользователя
sudo sh install-docker.shПроверяем версию установленного клиента и сервера Docker
docker versionДля просмотра информации о запущеных контейнерах, количестве образов, объеме доступной памяти и т.д. выполняем команду:
docker infoТерминология
- Image - образ контейнера, который является исходным кодом программы.
- Container - запущенный image. Может быть несколько контейнеров, которые запускают один и тот же образ.
Запуск контейнера
Для запуска контейнера используется команда container run. Для примера запускаем контейнер nginx сервера.
# docker container run --publish 80:80 --detach nginx
66c3a1547713516fdc82063b6948573df0ad873f08671deadc9495ca93d45870Команда docker container run выполняет следующие действия:
- Если запрошенного образа нет на на локальной машине (в нашем случае на VPS), то он автоматически будет скачан с репозитория Docker Hub.
- Запускает новый контейнер на основании образа nginx.
- Параметр --publish 80:80 открывает 80 порт на VPS и весь трафик с этого порта перенаправляет на 80 порт контейнера. Если 80 порт уже используется, то можно указать другой порт для перенаправления в контейнер, например --publish 8080:80. В таком случае для проверки работы нужно будет указать в браузере IP_VPS:8888
- Параметр --detach запускает контейнер в фоновом режиме, чтобы вы могли пользоваться дальше консолью, в которой вы его запустили.
Команда возвращает уникальный код контейнера, который будет использоваться для управление контейнером.
Проверяем работу установленного контейнера указав в браузере IP адрес сервера.
Посмотрим список запущенных контейнеров:
# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
66c3a1547713 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, [::]:80->80/tcp vigorous_jenningsили же можно использовать старый синтаксис
docker psПервым параметром являются первые цифры с номером контейнера. Для управления контейнером достаточно указывать только первые несколько цифр идентификатора контейнера. Для примера остановим контейнер указав только первую цифру:
docker container stop 66Проверяем, что контейнер остановлен:
# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESПросмотрим все контейнеры, которые были запущены ранее, не зависимо от того, работают ли они сейчас:
# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
66c3a1547713 nginx "/docker-entrypoint.…" 8 minutes ago Exited (0) 9 seconds ago vigorous_jennings
ac7493be39e8 nginx "/docker-entrypoint.…" 22 minutes ago Exited (0) 9 minutes ago zealous_pike
0d447342ed45 nginx "/docker-entrypoint.…" 23 minutes ago Exited (0) 22 minutes ago admiring_shawКак видим, каждый раз при выполнении docker container run мы запускаем новый контейнер, которому присваивается случайное имя, которое состоит из имени ученого или хакера и прилагательного.
Чтобы задать свое имя контейнеру используется параметр --name:
docker container run --publish 80:80 --detach --name ukraine nginxПросмотреть логи контейнера ukraine можно выполнив команду
docker container logs ukraineВ случае с nginx будут выводиться логи запросов на веб сервер.
Увидеть процессы, которые запущены в контейнере ukraine:
# docker container top ukraine
UID PID PPID C STIME TTY TIME CMD
root 4174 4151 0 13:04 ? 00:00:00 nginx: master process nginx -g daemon off;
message+ 4238 4174 0 13:04 ? 00:00:00 nginx: worker process
message+ 4239 4174 0 13:04 ? 00:00:00 nginx: worker processУдалить несколько контейнеров можно командой rm, при этом перечислив через пробел первые цифры идентификатора контейнера:
docker container rm 66 ac 0dКоманда удаляет только остановленные контейнеры чтобы избежать случайного удаления контейнера, который работает.
Просмотр конфигурации контейнера docker:
# docker container inspect <ContainerID>Информация об использовании ресурсов запущенными контейнерами
# docker container stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
1821fb0a6ee6 inspiring_gagarin 0.00% 3.168MiB / 5.787GiB 0.05% 99.2kB / 183kB 0B / 12.3kB 3Как зайти в консоль контейнера Docker
Для подключения по SSH к контейнеру нет необходимости устанавливать внутрь контейнера SSH сервер. Достаточно запустить его с командой --it (интерактивный режим) и в качестве аргумента после названия образа указать bash:
docker container run --it --name proxy nginx bash Если в bash выполнить команду exit, то мы не только выйдем с контейнера, но и полностью его остановим. Это связано с тем, что контейнер работает до тех пор, пока выполняется первая запущенная контейнером команда, а в данном случае это bash. При этом все изменения, которые мы внесли через консоль в контейнер остаются. Например мы можем запустить контейнер ubuntu и установить через консоль mc (Midnight Commander). После того, как мы выйдем с контейнера он остановится, но при повторном запуске контейнера mc будет установлен.
Для запуска консоли в контейнере используйте:
docker container start -ai ukraineДля внесения изменений в работающий контейнер можно запустить дополнительный процесс консоли в работающем контейнере. При таком подходе при выходе из консоли контейнер продолжит работать.
docker container exec -it ukraine bashРабота с сетью Docker
Просмотр настройки проброса портов между сервером и контейнером:
# docker container port ukraine
80/tcp -> 0.0.0.0:80
443/tcp -> 0.0.0.0:443Узнать IP адрес контейнера можно выполнив команду:
docker container inspect --format '{{ .NetworkSettings.IPAddress }}' ukraine