Учебное пособие по командам Docker | Начало работы с Докером
Основные команды Docker для начинающих
В этом подробном руководстве по Docker описаны основные команды Docker, например, как создать новый контейнер, запустить контейнер, удалить контейнер и т. д. Кроме того, в этом руководстве также объясняется, как создать собственный образ Docker из существующего контейнера и как удалить контейнеры и образы. Без лишних слов, давайте начнем с основ Docker!
Шаги установки Docker
Docker можно установить в большинство современных операционных систем Linux. Если вы еще не установили Docker, обратитесь к следующим руководствам:
- Установить Docker Engine и Docker Compose в AlmaLinux, CentOS, Rocky Linux
- Как установить Docker и Docker Compose в Ubuntu
Что такое образ Docker и контейнер Docker?
Прежде чем начать работу с Docker, позвольте мне уточнить, что такое образ Docker и контейнер Docker.
Образ Docker — это файл, который определяет, как должен вести себя контейнер, а контейнер Docker — это запущенный или остановленный этап образа Docker.
Контейнеры изолированы от остальных файлов хоста.
Когда мы запускаем контейнер Docker, он использует изолированную файловую систему, предоставляемую образом Docker. Образ Docker состоит из всего необходимого для запуска приложения — всех зависимостей, конфигурации, скриптов, двоичных файлов и т. д.
Образ также содержит другую конфигурацию контейнера, например переменные среды, команду для запуска по умолчанию и другие метаданные.
Начало работы с Docker в Linux
Все шаги, приведенные ниже, протестированы в серверной версии Ubuntu 22.04, 20.04 и 18.04 LTS. Однако шаги, представленные в последующих разделах, являются общими для всех платформ Linux. Например, вы можете запускать те же команды и в системе на основе RHEL (например, AlmaLinux).
1. Поиск изображений Docker
Мы можем получить изображения либо из официальной библиотеки докеров под названием Docker Hub, либо создать свою собственную.
Для тех, кому интересно, Docker Hub — это центральный онлайн-репозиторий, где все пользователи Docker создают, тестируют и сохраняют свои образы Docker. Docker Hub содержит десятки тысяч образов Docker, и их количество растет с каждым днем.
Вы можете найти любые образы Docker с помощью команды "docker search"
из командной строки.
Например, для поиска образов Docker на базе Alpine Linux выполните:
sudo docker search alpine
Пример вывода:
Поиск изображений Docker
Для поиска изображений на основе Ubuntu выполните:
sudo docker search ubuntu
Вы даже можете искать изображения для любого приложения, например Nginx, как показано ниже:
sudo docker search nginx
Docker Hub имеет широкий спектр образов. Будь то операционная система, приложение или комбинация нескольких приложений (например, стек LAMP), в Docker Hub вы найдете готовые образы Docker для всего.
Если что-то, что вы ищете, недоступно, вы можете создать его и сделать общедоступным через Docker Hub или оставить его конфиденциальным для собственного использования.
2. Загрузите образы Docker
Чтобы загрузить образ Docker для ОС Ubuntu, выполните следующую команду из терминала:
sudo docker pull ubuntu
Приведенная выше команда загрузит последний образ Ubuntu из Docker Hub.
Пример вывода:
Using default tag: latest
latest: Pulling from library/ubuntu
405f018f9d1d: Pull complete
Digest: sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7ac
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
Вы также можете загрузить определенную версию образа Ubuntu с помощью команды:
sudo docker pull ubuntu:20.04
Docker позволяет нам загружать любые изображения и запускать контейнер на основе этого образа независимо от операционной системы хоста.
Например, чтобы загрузить образ ОС Alpine, выполните:
sudo docker pull alpine
Загрузить образы Docker
3. Список образов Docker
Все загруженные образы Docker будут сохранены в каталоге /var/lib/docker/
.
Чтобы просмотреть список загруженных образов Docker, запустите:
sudo docker images
Пример вывода:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 27941809078c 3 weeks ago 77.8MB
ubuntu 20.04 20fffa419e3a 3 weeks ago 72.8MB
alpine latest e66264b98777 5 weeks ago 5.52MB
Получение списка образов Docker
Как вы видите выше, я загрузил три образа Docker — Ubuntu последнюю версию, Ubuntu 20.04 и Alpine Linux.
Теперь давайте продолжим и посмотрим, как запустить контейнеры на основе загруженных изображений.
4. Запустите Docker-контейнеры
Мы можем запустить контейнер двумя способами — либо с помощью его Docker Image TAG, либо Image ID.
TAG относится к конкретному снимку изображения, а IMAGE ID – соответствующий уникальный идентификатор этого изображения.
Взгляните на следующий скриншот:
Тег и идентификатор изображения Docker
Как видно из приведенных выше результатов, это теги "latest" и "20.04".
27941809078c
— это идентификатор ИЗОБРАЖЕНИЯ последнего образа Ubuntu Docker,20fffa419e3a
— это идентификатор изображения Ubuntu 20.04 Docker.- и
e66264b98777
— это идентификатор изображения Alpine последнего образа Docker.
4.1. Запуск контейнеров с использованием тега
Загрузив выбранные образы Docker, выполните следующую команду, чтобы запустить контейнер Docker и подключиться к нему, используя его TAG.
sudo docker run -t -i ubuntu:latest /bin/bash
Или,
sudo docker run -it ubuntu:latest /bin/bash
Здесь,
-t
: назначает новый псевдотерминал внутри контейнера Ubuntu.-i
: позволяет нам установить интерактивное соединение, захватив стандартный вход (STDIN) контейнера.ubuntu:latest
: образ докера Ubuntu с тегом «последний»./bin/bash
: оболочка BASH для нового контейнера. Это необязательно. Если вы не укажете оболочку, контейнеру будет назначена оболочка по умолчанию.
После запуска контейнера вы автоматически попадете в оболочку контейнера (командная строка):
Запуск контейнеров с использованием тега
Новый контейнер, основанный на последнем образе Ubuntu, уже запущен. Всем новым контейнерам будет присвоен уникальный идентификатор и имя. Как видно из приведенного выше вывода, идентификатор контейнера Ubuntu — 2f2a5b826762. Через минуту мы увидим, где найти имя контейнера.
Теперь вы можете начать работать в контейнере. Как только вы закончите работу с контейнером, вы можете вернуться обратно к терминалу хост-системы (в моем случае это Ubuntu 22.04 LTS), не завершая работу контейнера (гостевой ОС).
4.2. Отсоединиться от запущенных контейнеров
Чтобы отсоединиться от работающего контейнера (не завершая его), нажмите CTRL+P
, а затем CTRL+Q
.
Теперь вы вернулись в окно терминала исходного хост-компьютера. Обратите внимание, что контейнер все еще работает в фоновом режиме, и мы еще не завершили его работу.
4.3. Запуск контейнеров с использованием идентификатора IMAGE
Другой способ запустить контейнер и подключиться к нему — использовать идентификатор IMAGE, как показано ниже:
sudo docker run -it 20fffa419e3a /bin/bash
Здесь,
20fffa419e3a
– идентификатор изображения
Чтобы отсоединиться от контейнера и вернуться обратно в терминал хост-системы, нажмите CTRL+P и CTRL+Q. Опять же, мы лишь оторвались от контейнера, но не остановили его. Контейнер все еще работает в фоновом режиме.
4.4. Запускайте контейнеры в отдельном режиме
В предыдущих разделах мы запускали контейнер и сразу же привязывались к нему. А затем мы отключились от контейнера, как только наша работа с этим контейнером будет завершена.
Вы также можете запустить контейнер в отключенном режиме (без его автоматического подключения).
Чтобы запустить контейнер в фоновом режиме, выполните:
sudo docker run -it -d alpine:latest
Пример вывода:
d74f2ceb5f3ad2dbddb0b26e372adb14efff91e75e7763418dbd12d1d227129d
Первые 12 букв в приведенном выше выводе обозначают идентификатор контейнера.
Вы можете проверить, запущен ли контейнер, с помощью команды docker ps
:
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d74f2ceb5f3a alpine:latest "/bin/sh" 3 seconds ago Up 2 seconds zen_pascal
Запуск контейнеров в фоновом режиме
Как вы можете видеть в приведенном выше выводе, мы создали контейнер Alpine, но не подключились к нему.
Если вы хотите прикрепить его к контейнеру, просто запустите:
sudo docker attach d74f2ceb5f3a
5. Просмотр запущенных контейнеров
Чтобы просмотреть список запущенных контейнеров, выполните следующую команду:
sudo docker ps
Пример вывода:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7e04eed577e 20fffa419e3a "/bin/bash" 6 minutes ago Up 6 minutes brave_mclean
2f2a5b826762 ubuntu:latest "/bin/bash" 18 minutes ago Up 18 minutes hungry_leavitt
Просмотр запущенных контейнеров
Здесь,
- f7e04eed577e — это идентификатор контейнера Ubuntu, созданного с образом «2f2a5b826762». И "brave_mclean" — это имя этого контейнера.
- 2f2a5b826762 — это идентификатор контейнера Ubuntu, созданного с помощью образа «ubuntu:latest». И "hungry_leavitt" — это имя этого контейнера.
Всякий раз, когда создается новый контейнер, ему присваивается уникальный идентификатор и имя, поэтому мы можем получить доступ к контейнеру, используя его идентификатор или имя.
Внимание! Обратите внимание, что Идентификатор контейнера и идентификатор образа Docker отличаются.
Чтобы просмотреть все доступные (работающие или остановленные) контейнеры, запустите:
sudo docker ps -a
6. Прикрепите к работающим контейнерам или отсоедините от них
Сначала найдите имя или идентификатор контейнера с помощью команды docker ps
.
sudo docker ps
Затем присоединитесь к работающему контейнеру с помощью команды docker Attach
.
sudo docker attach <container-id>
Например, я собираюсь подключиться к контейнеру с идентификатором «f7e04eed577e», как показано ниже:
sudo docker attach f7e04eed577e
Вы также можете прикрепиться к контейнеру, используя его имя.
sudo docker attach brave_mclean
Теперь вы вошли в контейнер.
Чтобы отсоединиться от контейнера, просто нажмите CTRL+P, а затем CTRL+Q.
7. Запуск, перезапуск, пауза и остановка контейнеров.
Вы можете запустить, перезапустить, приостановить или остановить контейнер Docker, используя его имя или идентификатор контейнера.
Сначала найдите имя или идентификатор контейнера с помощью команды docker ps -a
.
Найти идентификатор и имя контейнера
Теперь вы можете запустить контейнер с помощью команды docker start
с именем или идентификатором, как показано ниже.
sudo docker start modest_cray
sudo docker start 10615254bb45
Вы можете запустить несколько контейнеров, разделив их пробелами, как показано ниже.
sudo docker start 24b5ee8c3d3a 56faac6d20ad d74f2ceb5f3a
Чтобы корректно перезапустить работающий контейнер, выполните:
sudo docker start 10615254bb45
Чтобы приостановить процессы в работающем контейнере:
sudo docker pause 10615254bb45
Чтобы возобновить процессы в работающем контейнере:
sudo docker unpause 10615254bb45
Чтобы заблокировать контейнер, пока другие не остановятся:
sudo docker wait 10615254bb45
Аналогичным образом мы можем остановить докер-контейнер, используя его имя или идентификатор. Если вы уже находитесь внутри оболочки контейнера, вы можете остановить его, просто выполнив следующую команду:
exit
Вы также можете остановить (выключить контейнер) из хост-системы Docker, используя следующую команду:
sudo docker stop 10615254bb45
Вы можете выйти из нескольких контейнеров, разделенных пробелами, как показано ниже.
sudo docker stop 35b5ee8c3d3a 10615254bb45
После выхода из контейнера проверьте, действительно ли он остановлен, перечислив запущенные контейнеры с помощью команды:
sudo docker ps
8. Уничтожьте Docker-контейнеры
Команда docker stop корректно отключит работающий контейнер. Иногда вы можете застрять с контейнером, который не отвечает, или вам нужно принудительно завершить работу контейнера.
Чтобы уничтожить контейнер, отправив SIGKILL
работающему контейнеру, выполните:
sudo docker kill 10615254bb45
9. Автоматически удалять контейнеры после их закрытия
Возможно, вы захотите протестировать Контейнер, а затем удалить его, как только закончите работу с Контейнером. Если это так, вы можете автоматически удалить контейнер после его закрытия, используя флаг --rm
:
sudo docker run -it --rm debian:latest
Как только вы выйдете из Контейнера, он будет автоматически удален.
Автоматически удалять контейнеры
Как вы видите в приведенном выше выводе, я создал новый контейнер Debian. Как только я выхожу из контейнера, он автоматически удаляется. Вывод docker ps -a
показывает, что контейнер Debian не существует.
10. Назначьте имя контейнерам
Если вы внимательно посмотрите на вывод предыдущих команд, то увидите, что каждому контейнеру при запуске контейнера присваивается случайное имя. Если вы не дадите имена своим контейнерам, Docker назовет их автоматически.
Посмотрите на следующий пример.
sudo docker run -it -d alpine:latest
2af79e97a825c91bf374b4862b9e7c22fc22acd1598005e8bea3439805ec335d
sudo docker run -it -d alpine:latest
80b53b7e661d33696b65c78267fc3f067b6100799c925910db4721963e3fae0a
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80b53b7e661d alpine:latest "/bin/sh" 3 seconds ago Up 2 seconds bold_margulis
2af79e97a825 alpine:latest "/bin/sh" 6 seconds ago Up 5 seconds recursing_taussig
Как вы видите в приведенном выше выводе, хотя я создал два контейнера, используя один и тот же образ Docker, они оба получили разные идентификаторы и имена.
Если вы хотите присвоить контейнеру статическое имя, используйте флаг --name
, как показано ниже:
sudo docker run -it -d --name ostechnix_alpine alpine:latest
Приведенная выше команда создаст новый контейнер под названием ostechnix_alpine в автономном режиме.
давайте посмотрим список запущенных Контейнеров:
sudo docker ps
Пример вывода:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
397111fac537 alpine:latest "/bin/sh" 2 seconds ago Up 2 seconds ostechnix_alpine
80b53b7e661d alpine:latest "/bin/sh" 7 minutes ago Up 7 minutes bold_margulis
2af79e97a825 alpine:latest "/bin/sh" 7 minutes ago Up 7 minutes recursing_taussig
Присвоить имя контейнерам
Вы заметили имя первого контейнера в приведенном выше выводе? Да, мы присвоили контейнеру собственное имя (например, ostechnix_alpine
).
Присвоение контейнерам собственных имен дает нам преимущество. Мы можем легко определить, что установлено в этом контейнере, посмотрев на имя контейнера.
11. Создайте собственные образы Docker
Docker предназначен не только для загрузки и использования существующих контейнеров. Вы также можете создать свой собственный образ Docker.
Давайте запустим контейнер Ubuntu:
sudo docker run -it ubuntu:latest
Теперь вы окажетесь в оболочке контейнера.
Затем установите любое программное обеспечение или делайте в контейнере все, что захотите.
Например, давайте установим в контейнер Веб-сервер Apache.
apt update
apt install apache2
Аналогичным образом установите и протестируйте любое программное обеспечение по вашему выбору в Контейнере.
Как только вы закончите, отсоединитесь от контейнера (не выходите из него) и вернитесь обратно в оболочку хост-системы. Пожалуйста, не останавливайте и не выключайте Контейнер. Чтобы отсоединиться от контейнера, не останавливая его, нажмите CTRL+P
, а затем CTRL+Q
.
На хост-терминале Docker выполните следующую команду, чтобы найти идентификатор контейнера:
sudo docker ps
Наконец, создайте Docker-образ работающего контейнера с помощью команды:
sudo docker commit 377e6d77ebb5 ostechnix/ubuntu_apache
Пример вывода:
sha256:bc5e5f95ca592a3585fda2c5a40ec30c98e292046ef70390a2c3b7863cc6f7c1
Здесь,
377e6d77ebb5
– идентификатор контейнера Ubuntu.ostechnix
– имя пользователя, создавшего контейнер.ubuntu_apache
– имя образа Docker, созданного пользователем ostechnix.
Давайте проверим, создан ли новый образ Docker с помощью команды:
sudo docker images
Пример вывода:
REPOSITORY TAG IMAGE ID CREATED SIZE
ostechnix/ubuntu_apache
latest bc5e5f95ca59 55 seconds ago 229MB
debian latest d2780094a226 11 days ago 124MB
ubuntu latest 27941809078c 3 weeks ago 77.8MB
ubuntu 20.04 20fffa419e3a 3 weeks ago 72.8MB
alpine latest e66264b98777 5 weeks ago 5.52MB
Создание пользовательских образов Docker
Как вы видите в приведенном выше выводе, новый образ Docker был создан в нашей хост-системе Docker из работающего контейнера.
Теперь вы можете создать новый контейнер из только что созданного образа Docker, как обычно, с помощью команды:
sudo docker run -it ostechnix/ubuntu_apache
12. Удаление контейнеров
После завершения всех исследований и разработок с контейнерами Docker вы можете удалить их, если они вам больше не нужны.
Для этого сначала нам нужно остановить (выключить) работающие контейнеры.
Давайте узнаем запущенные контейнеры с помощью команды:
sudo docker ps
Пример вывода:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
377e6d77ebb5 ubuntu:latest "bash" 7 minutes ago Up 7 minutes elegant_beaver
Остановите работающий контейнер, используя его идентификатор:
sudo docker stop 377e6d77ebb5
Теперь удалите контейнер с помощью команды:
sudo docker rm 377e6d77ebb5
Аналогичным образом остановите все контейнеры и удалите их, если они больше не нужны.
Удаление нескольких контейнеров по одному может оказаться утомительной задачей. Итак, мы можем удалить все остановленные контейнеры за один раз, просто запустим:
sudo docker container prune
Введите "Y"
и нажмите клавишу ENTER
, чтобы удалить контейнеры.
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
397111fac5374921b974721ee646b2d5fbae61ca9c6e8b90fbf47952f382a46b
80b53b7e661d33696b65c78267fc3f067b6100799c925910db4721963e3fae0a
[...]
Total reclaimed space: 176B
Удалить контейнеры
Эта команда будет работать только с последними версиями Docker.
Убедитесь, что все контейнеры удалены с помощью команды:
sudo docker ps -a
Если вы не видите никаких результатов, все контейнеры будут удалены.
13. Удаление образов Docker
Помните: сначала вам следует удалить все контейнеры, а затем удалять все изображения, из которых были созданы эти контейнеры.
После удаления контейнеров вы можете удалить образы Docker, которые вам больше не нужны.
Чтобы найти список загруженных образов Docker:
sudo docker images
Пример вывода:
REPOSITORY TAG IMAGE ID CREATED SIZE
ostechnix/ubuntu_apache latest bc5e5f95ca59 14 minutes ago 229MB
debian latest d2780094a226 11 days ago 124MB
ubuntu latest 27941809078c 3 weeks ago 77.8MB
ubuntu 20.04 20fffa419e3a 3 weeks ago 72.8MB
alpine latest e66264b98777 5 weeks ago 5.52MB
Как вы видите выше, в нашей хост-системе есть 5 образов Docker.
Давайте удалим их, используя их идентификатор IMAGE:
sudo docker rmi ce5aa74a48f1
Пример вывода:
Untagged: ostechnix/ubuntu_apache:latest
Deleted: sha256:bc5e5f95ca592a3585fda2c5a40ec30c98e292046ef70390a2c3b7863cc6f7c1
Deleted: sha256:a8e4797160a2b2d33d8bd1bd67e008260c022b3a53fbcc198b2b74d9eae5961d
Аналогично удалите все остальные образы Docker.
Чтобы удалить все остановленные контейнеры, все изображения, кэш сборки и все сети, выполните:
sudo docker system prune -a
Будьте осторожны при использовании этой команды. Он удалит все неиспользуемые контейнеры, сети, изображения (как висящие, так и не имеющие ссылок).
Удалить все в Docker
По умолчанию тома не удаляются, чтобы предотвратить удаление важных данных, даже если в данный момент нет контейнера, использующего этот том.
Если вы хотите удалить все, включая тома, используйте флаг --volumes
.
sudo docker system prune -a --volumes
Устранение неполадок Docker
Docker не позволит вам удалить образы Docker, если они используются любыми запущенными или остановленными контейнерами.
Например, когда я пытаюсь удалить образ Docker с идентификатором b72889fa879c
с одного из моих старых серверов Ubuntu. Я получил следующую ошибку:
Error response from daemon: conflict: unable to delete b72889fa879c (must be forced) - image is being used by stopped container dde4dd285377
Это связано с тем, что образ Docker, который вы хотите удалить, в настоящее время используется другим контейнером.
Итак, давайте проверим работающий Контейнер с помощью команды:
sudo docker ps
Пример вывода:
Показать работающие Docker-контейнеры
Упс! Нет работающего контейнера.
Давайте еще раз проверим наличие всех контейнеров (работающих и остановленных) с помощью команды:
sudo docker ps -a
Пример вывода:
Показать запущенные и остановленные докер-контейнеры
Как видите, некоторые остановленные контейнеры все еще используют один из образов Docker. Итак, давайте удалим все контейнеры.
Пример:
sudo docker rm 12e892156219
Аналогичным образом удалите все контейнеры, как показано выше, используя соответствующий идентификатор контейнера.
После того, как вы удалили все контейнеры, наконец, удалите образы Docker.
Пример:
sudo docker rmi b72889fa879c
Вот и все. Теперь проверьте, есть ли на хосте другие образы Docker с помощью команды:
sudo docker images
Теперь у вас, вероятно, не будет никаких образов докеров.
Читать далее:
- Объяснение концепций сети Docker
- Объяснение томов Docker на примерах
- Краткое введение в Dockerfile
- Начало работы с Docker Compose в Linux
- Как запустить Docker от имени пользователя без полномочий root в Linux
- Руководство по Podman. Начало работы с Podman
Заключение
В этом подробном руководстве по началу работы с Docker мы объяснили основы Docker, такие как создание, запуск, поиск, удаление контейнеров, а также создание собственного образа Docker из контейнера. Мы также объяснили, как удалять контейнеры и образы Docker, когда они больше не нужны.
Надеюсь, вы получили общее представление об использовании Docker.
Для получения более подробной информации перейдите по ссылкам на официальные ресурсы, приведенным в конце этого руководства, или оставьте комментарий в разделе комментариев ниже.
Рекомендуется прочитать:
- Как автоматически обновлять работающие контейнеры Docker
- ctop — инструмент мониторинга командной строки для контейнеров Linux
- Portainer – самый простой способ управления Docker
- PiCluster — простое веб-приложение для управления Docker
- Dockly — управление контейнерами Docker из терминала
- Преобразовать команды запуска Docker в файлы Docker-Compose
Ресурсы:
- Веб-сайт Docker
- Документация Docker
Бесплатная электронная книга Docker:
- Бесплатная электронная книга: «Пособия по контейнеризации Docker»