Теперь, когда вы знакомы с архитектурой Docker и работой с образами, пришло время перейти к контейнерам. Контейнеры — это запущенные экземпляры образов, которые изолированы друг от друга и от основной системы. Это позволяет запускать приложения в чистой и предсказуемой среде.
Основные команды Docker:
Прежде чем мы начнём, напомню, что я ранее подготовил статью со всеми основными командами Docker:
В ней вы найдёте шпаргалку с описанием каждой команды, что поможет вам быстро ориентироваться при работе с Docker.
Работа с контейнерами.
Запуск контейнеров:
Чтобы запустить контейнер из образа, используйте команду docker run:
Эта команда делает следующее:
- Проверяет наличие образа nginx на вашем компьютере. Если его нет, Docker автоматически загрузит его из Docker Hub.
- Создаёт новый контейнер на основе образа.
- Запускает контейнер.
Чтобы запустить контейнер в фоновом режиме (то есть в режиме демона), добавьте флаг -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: Запуск 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. Попробуйте выполнить команды из статьи и убедитесь, что понимаете их назначение.
Вопросы для самопроверки:
- Как запустить контейнер в фоновом режиме?
- Какая команда используется для просмотра списка всех контейнеров, включая остановленные?
- Как остановить и удалить контейнер по его имени или идентификатору?
- Зачем нужна переадресация портов при запуске контейнера, и как её настроить?
- Как можно задать собственное имя контейнеру, и почему это может быть полезно?
- Какая команда позволяет просматривать логи контейнера? Как следить за логами в реальном времени?
- Как подключиться к работающему контейнеру и выполнить внутри него команды?
Поздравляю с успешным освоением третьего урока! В следующем уроке мы перейдём к работе с томами (Volumes) в Docker. Вы узнаете, как сохранять данные контейнеров, чтобы они не терялись при перезапуске или удалении. Мы также рассмотрим, как организовать совместное использование файлов между контейнерами и хост-системой, что позволит вам эффективно управлять данными и обеспечивать их сохранность. Готовьтесь к углублению в практические аспекты Docker!
Друзья, ставьте свои лайки и подписывайтесь на канал. Дальше будет только интереснее! До новых встреч!