Найти в Дзене
КУЗИНОБИТ

Урок 3: Работа с контейнерами в Docker.

Теперь, когда вы знакомы с архитектурой Docker и работой с образами, пришло время перейти к контейнерам. Контейнеры — это запущенные экземпляры образов, которые изолированы друг от друга и от основной системы. Это позволяет запускать приложения в чистой и предсказуемой среде. Прежде чем мы начнём, напомню, что я ранее подготовил статью со всеми основными командами Docker: В ней вы найдёте шпаргалку с описанием каждой команды, что поможет вам быстро ориентироваться при работе с Docker. Чтобы запустить контейнер из образа, используйте команду docker run: Эта команда делает следующее: Чтобы запустить контейнер в фоновом режиме (то есть в режиме демона), добавьте флаг -d: docker run -d nginx Теперь контейнер будет работать в фоновом режиме, и вы сможете продолжать использовать терминал для других команд. Чтобы увидеть список всех запущенных контейнеров, используйте команду docker ps: docker ps Для просмотра всех контейнеров, включая остановленные, выполните docker ps -a: docker ps -a Чтобы
Оглавление

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

Основные команды Docker:

Прежде чем мы начнём, напомню, что я ранее подготовил статью со всеми основными командами Docker:

Основные команды Docker (шпаргалка)
КУЗИНОБИТ25 сентября 2024

В ней вы найдёте шпаргалку с описанием каждой команды, что поможет вам быстро ориентироваться при работе с Docker.

Работа с контейнерами.

Запуск контейнеров:

Чтобы запустить контейнер из образа, используйте команду docker run:

Пример запуска контейнера на основе образа nginx.
Пример запуска контейнера на основе образа nginx.

Эта команда делает следующее:

  1. Проверяет наличие образа nginx на вашем компьютере. Если его нет, Docker автоматически загрузит его из Docker Hub.
  2. Создаёт новый контейнер на основе образа.
  3. Запускает контейнер.

Чтобы запустить контейнер в фоновом режиме (то есть в режиме демона), добавьте флаг -d:

Пример запуска контейнера на основе образа nginx с флагом -d.
Пример запуска контейнера на основе образа nginx с флагом -d.
docker run -d nginx

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

Просмотр запущенных контейнеров:

Чтобы увидеть список всех запущенных контейнеров, используйте команду docker ps:

Просмотр только запущенных контейнеров.
Просмотр только запущенных контейнеров.
docker ps

Для просмотра всех контейнеров, включая остановленные, выполните docker ps -a:

Просмотр всех контейнеров (запущенных и остановленных).
Просмотр всех контейнеров (запущенных и остановленных).
docker ps -a

Остановка и удаление контейнеров:

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

docker stop <container_id>

Замените <container_id> на идентификатор контейнера, который можно получить из команды docker ps.

Для удаления остановленного контейнера выполните docker rm:

docker rm <container_id>

Совет: Вы можете объединить две команды в одну для остановки и удаления контейнера:

docker rm -f <container_id>

Переадресация портов.

Часто необходимо получить доступ к приложению внутри контейнера через веб-браузер или другое приложение на вашем компьютере. Для этого используется переадресация портов с помощью флага -p.

docker run -d -p 8080:80 nginx

Это означает, что локальный порт 8080 будет переадресован на порт 80 внутри контейнера, где обычно работает Nginx. Теперь, открыв http://localhost:8080 в браузере, вы увидите страницу приветствия Nginx.

Именование контейнеров.

По умолчанию Docker присваивает контейнерам случайные имена. Вы можете задать своё имя с помощью флага --name:

docker run -d -p 8080:80 --name mynginx nginx

Теперь ваш контейнер будет называться mynginx, и вы можете обращаться к нему по этому имени в командах:

docker stop mynginx
docker rm mynginx

Просмотр логов контейнера.

Для просмотра вывода (логов) контейнера используйте команду docker logs:

docker logs <container_id_or_name>

Если вы хотите следить за логами в реальном времени, подобно команде tail -f, выполните docker logs -f:

docker logs -f <container_id_or_name>

Подключение к работающему контейнеру.

Иногда нужно выполнить команду внутри работающего контейнера. Для этого используется команда docker exec.

Запуск интерактивного терминала внутри контейнера:

docker exec -it <container_id_or_name> /bin/bash

Теперь вы находитесь внутри контейнера и можете выполнять команды как в обычном терминале Linux.

Выполнение одной команды внутри контейнера:

docker exec <container_id_or_name> ls /usr/local/apache2/htdocs

Эта команда выполнит ls /usr/local/apache2/htdocs внутри контейнера Apache и выведет результат в ваш терминал.

Автозапуск контейнеров.

Чтобы контейнер автоматически перезапускался при сбое или перезагрузке системы, используйте политику перезапуска с флагом --restart:

docker run -d --restart unless-stopped nginx

Варианты политики перезапуска:

no (по умолчанию): не перезапускать контейнер автоматически.

on-failure: перезапустить при аварийном завершении.

unless-stopped: перезапускать всегда, кроме случаев ручной остановки.

always: всегда перезапускать контейнер.

Заключение третьего урока.

Сегодня мы изучили:

  1. Изучили команды для запуска, остановки, удаления контейнеров, а также для их именования и переадресации портов.
  2. Узнали, как просматривать список запущенных контейнеров, подключаться к работающему контейнеру и работать с логами контейнера.
  3. Познакомились с настройками политики перезапуска контейнеров, что позволяет автоматизировать их запуск при сбоях или перезагрузке системы.

Домашнее задание:

Задание 1: Запуск Apache с переадресацией порта.

1. Запустите контейнер Apache HTTP Server, переадресовав порт 8000 на порт 80 контейнера.

2. Откройте в браузере http://localhost:8000 и убедитесь, что Apache работает.

3. Остановите и удалите контейнер.

Задание 2: Работа с Redis.

1. Запустите контейнер Redis в фоновом режиме.

2. Подключитесь к контейнеру с помощью docker exec и запустите Redis CLI.

3. Попробуйте установить и получить значение ключа в Redis.

Задание 3*: MySQL в Docker.

1. Запустите контейнер MySQL, установив пароль для пользователя root.

2. Подключитесь к базе данных из контейнера с помощью docker exec и убедитесь, что всё работает.

3. Введите пароль my-secret-pw при запросе.

Задание 4 (необязательное, но крайне желательное): Изучение основных команд.

1. Ознакомьтесь со шпаргалкой основных команд Docker.

2. Попробуйте выполнить команды из статьи и убедитесь, что понимаете их назначение.

Вопросы для самопроверки:

  1. Как запустить контейнер в фоновом режиме?
  2. Какая команда используется для просмотра списка всех контейнеров, включая остановленные?
  3. Как остановить и удалить контейнер по его имени или идентификатору?
  4. Зачем нужна переадресация портов при запуске контейнера, и как её настроить?
  5. Как можно задать собственное имя контейнеру, и почему это может быть полезно?
  6. Какая команда позволяет просматривать логи контейнера? Как следить за логами в реальном времени?
  7. Как подключиться к работающему контейнеру и выполнить внутри него команды?

Поздравляю с успешным освоением третьего урока! В следующем уроке мы перейдём к работе с томами (Volumes) в Docker. Вы узнаете, как сохранять данные контейнеров, чтобы они не терялись при перезапуске или удалении. Мы также рассмотрим, как организовать совместное использование файлов между контейнерами и хост-системой, что позволит вам эффективно управлять данными и обеспечивать их сохранность. Готовьтесь к углублению в практические аспекты Docker!

Друзья, ставьте свои лайки и подписывайтесь на канал. Дальше будет только интереснее! До новых встреч!