Как пользоваться Docker (пособие новичка)
Введение
Docker — это платформа для контейнеризации, которая упрощает упаковку приложений в изолированные среды, называемые контейнерами. Основное преимущество Docker в том, что контейнеры работают одинаково на разных компьютерах и серверах, что значительно упрощает развертывание и поддержку приложений.
Основные компоненты Docker
Docker состоит из нескольких ключевых компонентов, каждый из которых выполняет свою роль:
- Образ (Image): это шаблон, содержащий всё, что нужно для работы приложения: операционную систему, зависимости, библиотеки, настройки. Образ можно представить как «чертёж», из которого запускаются контейнеры.
- Контейнер (Container): это запущенный экземпляр образа. Он представляет собой изолированную среду, где работают приложения. Контейнеры легковесные и занимают меньше ресурсов, чем виртуальные машины.
- Dockerfile: это текстовый файл, содержащий инструкции по созданию образа. С Dockerfile можно автоматизировать процесс настройки и сборки образов.
- Volume: Это место для хранения данных, независимое от контейнера. Данные в Volume сохраняются, даже если контейнер перезапускается.
Установка Docker
Чтобы установить Docker, выполните следующие команды на системе с Ubuntu.
sudo apt-get update
sudo apt-get install -y docker.io
docker --version
Основные команды Docker
После установки Docker используйте следующие команды для работы с ним.
docker pull nginx
docker run -d -p 8080:80 nginx
d
запускает контейнер в фоновом режимеp 8080:80
перенаправляет порт 8080 на хосте на порт 80 в контейнере- Политики перезапуска контейнера
docker run -d --restart always nginx
no
: не перезапускать.on-failure
: перезапускать при ошибке.always
: всегда перезапускать.unless-stopped
: перезапускать, если не остановлено вручную.- Просмотр запущенных контейнеров
docker ps
docker ps -a
docker stop <ID контейнера>
docker start <ID контейнера>
docker restart <ID контейнера>
docker rm <ID контейнера>
docker images
docker rmi <ID образа>
docker logs <ID контейнера>
docker logs -f <ID контейнера>
docker logs --tail 100 <ID контейнера>
docker exec -it <ID контейнера> /bin/bash
docker build -t my-custom-image .
Dockerfile: что это и для чего он нужен?
Dockerfile — текстовый файл, в котором описаны инструкции для создания Docker-образа. Он автоматизирует процесс создания образов, указывая, какие шаги и команды нужны для настройки среды, в которой будет работать приложение.
FROM ubuntu:20.04
COPY . /app
RUN apt-get update && apt-get install -y nginx
CMD ["nginx", "-g", "daemon off;"]
EXPOSE 80
# Указание базового образа FROM nginx:alpine # Копирование файлов в контейнер COPY . /usr/share/nginx/html # Открытие порта 80 для доступа EXPOSE 80 # Запуск Nginx при старте контейнера CMD ["nginx", "-g", "daemon off;"]
Управление контейнерами
Для работы с контейнерами можно использовать как Docker CLI, так и более сложные инструменты оркестрации, такие как Docker Compose или Kubernetes.
Docker Compose: используется для управления многоконтейнерными приложениями с помощью YAML-файла.
version: '3' services: web: image: nginx ports: - "8080:80" restart: always db: image: mysql environment: MYSQL_ROOT_PASSWORD: example restart: on-failure
Основные команды Docker Compose:
docker-compose up -d
: Запускает все сервисы из файлаdocker-compose down
: Останавливает и удаляет все контейнеры
Команды docker-compose
работают только в той директории, где находится файл docker-compose.yml
Kubernetes: система для автоматизации развертывания и управления контейнерными приложениями в больших инфраструктурах.
Статусы контейнеров в Docker
Контейнеры в Docker могут находиться в различных состояниях:
- Created: контейнер создан, но не запущен
- Running: контейнер запущен и работает
- Exited: контейнер завершен (если завершился с ошибкой, это указывается)
- Paused: контейнер приостановлен
- Restarting: контейнер перезапускается после сбоя
- Dead: контейнер не завершился корректно
docker ps
Для просмотра всех контейнеров
docker ps -a
Хранение данных в Docker
Контейнеры Docker являются эфемерными, поэтому их данные удаляются после остановки. Чтобы сохранить данные, используются:
docker run -v /data:/var/lib/mysql mysql
docker run -v /path/on/host:/path/in/container nginx
Работа с файлами .env
Файл .env
хранит переменные окружения и позволяет передавать их в контейнеры, например, пароли, порты и конфигурации.
MYSQL_ROOT_PASSWORD=supersecretpassword MYSQL_DATABASE=mydatabase
version: '3' services: db: image: mysql environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE}
docker run -d -e MYSQL_ROOT_PASSWORD=supersecretpassword -e MYSQL_DATABASE=mydatabase mysql
В этом примере -e
указывает Docker, что нужно задать переменные окружения MYSQL_ROOT_PASSWORD
и MYSQL_DATABASE
в контейнере.
Заключение
Docker — удобный инструмент для создания и развертывания приложений. Он изолирует приложения в контейнеры, делая их независимыми от системы. Начав с базовых команд, вы сможете эффективно управлять контейнерами, переходя к оркестрации и масштабированию.