Как использовать контейнеры Docker

Фотография человека, программирующего на ноутбуке.

Контейнеры являются жизненной силой каждой установки Docker. Они служат основой платформы Docker и позволяют вам запускать службы на вашем компьютере, не беспокоясь о зависимостях и конфликтах версий. Здесь мы покажем вам основы создания, управления и настройки контейнеров Docker с помощью инструмента командной строки Docker.

Содержание

  • Как найти и загрузить образ Docker
  • Как запустить и остановить контейнер Docker
  • Как просмотреть контейнер Docker
  • Как настроить контейнер Docker
  • Как удалить контейнеры и образы Docker

Примечание: Начните с установки Docker на вашу систему Linux.

Как найти и загрузить образ Docker

Контейнеры Docker — это особый тип программной среды, который позволяет вам запускать программы отдельно от остальной части вашей оригинальной системы. Для этого Docker использует “программные образы”. Это статические копии программ, которые служат базой, с которой начинается контейнер.

Это различие между образом и контейнером позволяет вам воссоздавать и адаптировать ваше программное обеспечение любым необходимым образом. Например, вы можете иметь образ, такой как “httpd”, но создать из него два отдельных контейнера: “website1” и “website2”.

Самый простой способ найти новый образ Docker — использовать подкоманду search:

docker search httpd

Терминал, выделяющий образ httpd Docker из инструмента CLI.

Вы также можете искать пакеты на сайте Docker Hub, если предпочитаете использовать веб-браузер.

Скриншот, показывающий образ httpd Docker с сайта Docker Hub.

Чтобы загрузить образ на вашу систему, выполните следующую команду:

docker image pull httpd

Подтвердите, что вы правильно добавили новый образ в вашу систему, используя подкоманду images:

docker images

Терминал, выделяющий установленный образ httpd Docker на системе.

Создание нового образа с помощью Dockerfiles

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

Для этого сначала создайте папку в вашем домашнем каталоге для ваших файлов сборки:

mkdir ~/my-docker-image && cd ~/my-docker-image

Создайте новый Dockerfile с помощью вашего любимого текстового редактора:

nano ./Dockerfile

Вставьте следующие строки кода в ваш новый Dockerfile:

FROM nginx  
COPY sample-site /usr/share/nginx/html

Создайте папку “sample-site” и либо скопируйте в нее, либо создайте базовый HTML-сайт:

mkdir ./sample-site  
cp ~/index.html ./sample-site/

Сохраните ваш новый Dockerfile, затем выполните следующую команду, чтобы собрать его на вашей системе:

docker build -t custom-nginx .

Проверьте, присутствует ли ваш новый образ Docker в вашем списке образов Docker:

docker images

Терминал, выделяющий созданный образ из подкоманды сборки.

Создание нового образа из существующих контейнеров

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

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

docker stop my-http-server

Запустите подкоманду commit, за которой следует имя вашего контейнера, затем укажите имя вашего нового образа Docker:

docker commit my-http-server my-new-server-image

Подтвердите, что ваш новый образ Docker находится в вашей системе, запустив docker images.

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

Как запустить и остановить контейнер Docker

С вашим образом Docker готовым, вы теперь можете начать использовать его для создания вашего первого контейнера. Для этого используйте подкоманду run, за которой следует имя образа, который вы хотите запустить:

docker run httpd

Хотя это сработает для запуска вашего первого контейнера Docker, делать это таким образом займет вашу текущую сессию оболочки. Чтобы запустить ваш контейнер в фоновом режиме, добавьте флаг -d после подкоманды run:

docker run -d httpd

Подкоманда run также может принимать ряд дополнительных флагов, которые могут изменить поведение вашего нового контейнера Docker. Например, флаг --name позволяет вам добавить настраиваемое имя к вашему контейнеру:

docker run -d --name=my-http-server httpd

С другой стороны, вы можете использовать флаг --publish, чтобы перенаправить сетевой порт, по которому вы можете получить доступ к вашему контейнеру Docker. Это в первую очередь полезно, если вы не хотите, чтобы ваш контейнер занимал привилегированный порт:

docker run -d --name=my-http-server --publish 8080:80 httpd

Скриншот, показывающий веб-браузер, открывающий сайт, размещаемый пользовательским контейнером Docker.

Вы можете проверить все текущие запущенные контейнеры Docker в вашей системе, выполнив следующую команду:

docker ps

Подобно подкоманде run, ps также может принимать несколько флагов, которые изменят его поведение. Например, чтобы просмотреть контейнеры, которые в данный момент отключены, используйте флаг -a:

docker ps -a

Чтобы отключить запущенный контейнер, используйте подкоманду stop, за которой следует либо ID контейнера, либо имя вашего контейнера Docker:

docker stop my-http-server

Вы можете перезапустить любой контейнер, который вы остановили, повторно запустив подкоманду start:

docker start my-http-server

Кстати: изучите основы веб-хостинга с помощью Docker, запустив простой веб-сайт с использованием darkhttpd.

Приостановка и завершение работы контейнера Docker

Инструмент командной строки Docker также позволяет вам временно приостанавливать и завершать работу процесса контейнера. Это может быть полезно, если вы устраняете проблему с вашей настройкой Docker и хотите либо изолировать, либо остановить неправильно работающий контейнер.

Начните с выполнения docker ps, чтобы перечислить все запущенные контейнеры в системе.

Найдите либо ID, либо имя контейнера, который вы хотите управлять.

Терминал, выделяющий пользовательский контейнер Docker, который в данный момент работает в системе.

Запустите подкоманду pause, за которой следует имя контейнера, который вы хотите временно приостановить:

docker pause my-http-server

Вы можете возобновить приостановленный процесс, запустив подкоманду unpause:

docker unpause my-http-server

Чтобы остановить неправильно работающий процесс, выполните подкоманду kill, за которой следует имя вашего контейнера:

docker kill my-http-server

Как просмотреть контейнер Docker

Знание тонкостей вашего контейнера является важной частью поддержания здоровья вашего стека Docker. Это позволяет вам быстро взглянуть на любые потенциальные проблемы, и это может быть разницей между исправлением и переделкой всей вашей развертки.

Чтобы посмотреть обзор вашего контейнера Docker, выполните подкоманду inspect:

docker inspect my-http-server

Выполнение этого выведет длинную строку JSON, которая описывает текущее состояние вашего контейнера. Вы можете сузить это, либо перенаправив вывод в jq, либо используя встроенный флаг -f, за которым следует JSON-объект, который вы хотите напечатать:

docker inspect -f {{.Name}} my-http-server

Печать логов контейнера в терминал

Кроме того, вы также можете отслеживать и печатать логи любого текущего работающего контейнера Docker. Это может быть полезно, если вы хотите проверить, как ваша служба в настоящее время ведет себя, и посмотреть на вывод, который она возвращает в STDOUT.

Для этого выполните подкоманду logs, за которой следует имя вашего контейнера:

docker logs my-http-server

Вы также можете запустить подкоманду logs с флагом --follow, чтобы создать непрерывный лог вашей службы Docker. Это похоже на выполнение tail -f в конце UNIX-конвейера:

docker logs --follow my-http-server

Терминал, показывающий непрерывные логи для контейнера Docker.

Подобно другим подкомандам, вы также можете добавить различные флаги, чтобы настроить вывод логов вашего контейнера Docker. Например, флаг --timestamps добавляет детализированную метку времени для каждого сообщения, которое ваш контейнер отправляет в свой STDOUT:

docker logs --timestamps my-http-server

Флаг --details выведет даже переменные окружения, которые вы установили для вашего текущего контейнера Docker. Тем временем флаг --since позволяет вам показывать только логи, которые произошли после определенного момента времени:

docker logs --details --since 8m my-http-server

Терминал, показывающий более детализированный вывод логов из текущего работающего контейнера Docker.

Как настроить контейнер Docker

В своей основе контейнер Docker — это небольшая, упрощенная версия Linux, работающая поверх вашей текущей системы. Это означает, что, подобно виртуальной машине, вы можете получить доступ и извлечь данные внутри вашего контейнера.

Чтобы скопировать локальный файл с вашего хост-машины в контейнер, выполните подкоманду cp:

docker cp ~/my-file my-http-server:/tmp

Иногда вам также нужно будет “войти” в контейнеры, открыв оболочку внутри них. Таким образом, вы можете редактировать файлы, устанавливать бинарные файлы и настраивать их в соответствии с вашими потребностями:

docker exec -it my-http-server /bin/bash

Теперь вы можете, например, отредактировать “index.html” и создать домашнюю страницу для сайта внутри.

Терминал, показывающий HTML-файл, скопированный в корневую оболочку контейнера Docker.

Чтобы выйти из оболочки контейнера, нажмите Ctrl + D или выполните exit в терминале.

Терминал, выделяющий команду выхода из корневой оболочки контейнера Docker.

Полезно знать: узнайте, как переместить существующий контейнер Docker на новую систему.

Как удалить контейнеры и образы Docker

Удаление неиспользуемых контейнеров и образов Docker является важной частью общего обслуживания вашей развертки. Это позволяет вам удалить ненужные файлы с вашего сервера, экономя место для хранения в долгосрочной перспективе.

Перед тем как удалить контейнер, убедитесь, что вы сначала остановили его:

docker stop my-http-server

Теперь удалите контейнер, используя подкоманду rm:

docker rm my-http-server

Подтвердите, что вы правильно удалили ваш старый контейнер Docker, выполнив docker ps -a.

Терминал, показывающий все доступные контейнеры Docker, включая текущие отключенные.

Удалите ваш оригинальный образ Docker из вашей развертки Docker:

docker rmi my-new-server-image

Терминал, выделяющий вывод удаления образа Docker из системы.

Проверьте, правильно ли вы удалили ваш оригинальный образ Docker, выполнив docker images.

Терминал, показывающий обновленный список образов Docker.

Изучение того, как создавать, управлять и удалять контейнеры Docker, — это лишь некоторые из того, что вы можете сделать с вашим сервером Linux. Исследуйте глубокий мир администрирования систем Linux, размещая сервер и хранилище контейнеров Docker с XPipe.

Кредит изображения: Shamin Haky через Unsplash. Все изменения и скриншоты сделаны Ramces Red.