Введение в Docker
- Что это такое и как с ним работать?
- Что такое контейнеры?
- Основные компоненты Docker
- Dockerfile: Что это такое и для чего нужно?
- Для чего нужен Dockerfile?
- Основные команды Dockerfile
- Установка Docker
- Основные команды Docker
- Управление контейнерами
- Статусы контейнеров
- Хранение данных в Docker
- Работа с .env файлами и передача переменных окружения в Docker
- Как использовать .env файл с Docker?
- Полезные команды и опции Docker
- Заключение
Что это такое и как с ним работать?
Docker — это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнеры позволяют упаковать приложение вместе с его зависимостями и окружением, обеспечивая единообразие выполнения на любом компьютере.
Что такое контейнеры?
Контейнеры — это легковесные, изолированные среды, которые можно запустить на любой машине, где установлен Docker. В отличие от виртуальных машин, контейнеры используют ядро операционной системы хост-машины, что делает их более эффективными с точки зрения ресурсов.
Мы не зарабатываем на Вас. Просто подпишитесь на наш канал ТГ и получайте эксклюзивную информацию о нодах и технологиях web3 и не только, раньше всех! Вокруг Крипты и Youtube👍
Основные компоненты Docker
- Docker Engine: Основной компонент Docker, который позволяет создавать, запускать и управлять контейнерами.
- Образы (Images): Шаблоны для создания контейнеров. Образ включает все необходимое для работы приложения — код, библиотеки, переменные окружения, файлы конфигурации и т.д.
- Контейнеры: Запущенные экземпляры образов. Каждый контейнер работает изолированно от других контейнеров и от хоста.
- Docker Hub: Облачное хранилище образов. Здесь можно найти и загрузить готовые образы для различных приложений.
Dockerfile: Что это такое и для чего нужно?
Dockerfile — это текстовый файл, в котором описаны инструкции для создания Docker-образа. С его помощью вы можете автоматизировать процесс создания образов, указывая, какие шаги и команды необходимо выполнить для настройки среды, в которой будет работать ваше приложение.
Для чего нужен Dockerfile?
Dockerfile используется для создания собственных образов, которые содержат все необходимое для запуска вашего приложения: операционную систему, библиотеки, зависимости, конфигурационные файлы и сам код приложения. С его помощью можно создать стандартизированные и воспроизводимые образы, которые можно развернуть на любой машине с установленным Docker.
Основные команды Dockerfile
- FROM: Задает базовый образ, на основе которого будет создаваться новый образ.
FROM ubuntu:20.04
- COPY: Копирует файлы с хост-машины в контейнер.
COPY . /app
- RUN: Выполняет команды на этапе сборки образа (например, установка пакетов).
RUN apt-get update && apt-get install -y nginx
- CMD: Задает команду, которая будет выполнена при запуске контейнера.
CMD ["nginx", "-g", "daemon off;"]
- EXPOSE: Указывает, какие порты должны быть доступны из контейнера.
EXPOSE 80
Вот небольшой пример Dockerfile, который создает образ для простого веб-сервера на базе Nginx:
# Указываем базовый образ FROM nginx:alpine # Копируем содержимое текущей директории на хосте в директорию /usr/share/nginx/html в контейнере COPY . /usr/share/nginx/html # Открываем порт 80 для доступа к веб-серверу EXPOSE 80 # Устанавливаем команду для запуска Nginx при старте контейнера CMD ["nginx", "-g", "daemon off;"]
Установка Docker
Docker поддерживается на большинстве популярных операционных систем: Windows, macOS и различных дистрибутивах Linux. Процесс установки отличается в зависимости от ОС, но в большинстве случаев достаточно следовать официальной документации на сайте Docker.
Основные команды Docker
После установки Docker, вы можете использовать следующие команды для работы с ним:
- docker pull [имя образа]: Загружает образ из Docker Hub на вашу машину.
docker pull nginx
- docker run [опции] [имя образа]: Создает и запускает контейнер из образа.
docker run -d -p 8080:80 nginx
-d
запускает контейнер в фоновом режиме.-p 8080:80
перенаправляет порт 8080 на хосте на порт 80 в контейнере.- --restart [политика]: Опция, которая определяет, будет ли Docker автоматически перезапускать контейнер в случае его сбоя или остановки. Примеры политики:
docker run -d --restart always nginx
no
— (по умолчанию) не перезапускать контейнер.on-failure
— перезапускать контейнер, если он завершился с ошибкой (не с кодом 0).always
— всегда перезапускать контейнер, даже если он был остановлен вручную.unless-stopped
— перезапускать контейнер всегда, за исключением случаев, когда он был остановлен вручную.- docker ps: Показывает список запущенных контейнеров.
docker ps
- docker stop [ID контейнера]: Останавливает запущенный контейнер.
docker stop c3f279d17e0a
- docker start [ID контейнера]: Запускает остановленный контейнер.
- docker restart [ID контейнера]: Перезапускает контейнер
- docker rm [ID контейнера]: Удаляет остановленный контейнер.
docker rm c3f279d17e0a
- docker images: Показывает список всех загруженных образов.
docker images
- docker rmi [ID образа]: Удаляет образ с вашей машины.
docker rmi 7d9495d03763
- docker logs [ID контейнера]: Выводит логи контейнера.
- docker logs -f [ID контейнера]: Включает «живой» просмотр логов контейнера в реальном времени.
docker logs -f c3f279d17e0a
- docker logs --tail [число строк] [ID контейнера]: Выводит последние N строк логов контейнера.
docker logs --tail 100 c3f279d17e0a
- docker exec -it [ID контейнера] [команда]: Позволяет выполнить команду внутри запущенного контейнера. Часто используется для доступа к командной строке контейнера.
docker exec -it c3f279d17e0a /bin/bash
- docker build [опции] [путь к Dockerfile]: Создает Docker-образ на основе Dockerfile, находящегося в указанной директории.
docker build -t my-custom-image .
-t my-custom-image
задает имя создаваемому образу..
указывает на текущую директорию, где находится Dockerfile.
Управление контейнерами
Для управления контейнерами можно использовать команды Docker CLI или специальные оркестрационные инструменты, такие как Docker Compose или Kubernetes.
- Docker Compose: Инструмент для управления многоконтейнерными приложениями. Он позволяет описывать многоконтейнерное приложение с помощью YAML-файла.
- Пример
docker-compose.yml
:version: '3' services: web: image: nginx ports: - "8080:80" restart: always db: image: mysql environment: MYSQL_ROOT_PASSWORD: example restart: on-failure
- Команды:
- Kubernetes: Система для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Подходит для управления большими и сложными инфраструктурами.
Статусы контейнеров
Контейнеры в Docker могут находиться в различных состояниях, которые отражают их текущий статус:
- Created: Контейнер был создан, но еще не запущен.
- Running: Контейнер запущен и выполняется.
- Exited: Контейнер завершил свою работу. Если контейнер завершился с ошибкой, это также будет указано в статусе.
- Paused: Контейнер был приостановлен и временно не выполняет никаких операций.
- Restarting: Контейнер перезапускается после сбоя или по заданной политике перезапуска.
- Dead: Контейнер в состоянии "мертвый", что означает, что произошла ошибка при завершении контейнера или его удалении.
Для проверки статусов контейнеров используйте команду docker ps
или docker ps -a
для просмотра всех контейнеров.
Хранение данных в Docker
Контейнеры Docker по своей природе эфемерны, то есть их состояние не сохраняется после остановки и удаления. Чтобы сохранить данные, используются тома (volumes) или bind mounts.
- Тома (Volumes): Специальные директории, управляемые Docker, которые могут быть смонтированы в контейнер. Они остаются на хосте, даже если контейнер удален.
docker run -v /data:/var/lib/mysql mysql
- Bind mounts: Связывают директорию хоста с директорией контейнера.
docker run -v /path/on/host:/path/in/container nginx
Работа с .env файлами и передача переменных окружения в Docker
.env файл — это файл, в котором хранятся переменные окружения. В контексте Docker он используется для передачи конфигурационных данных в контейнеры, таких как пароли, ключи API, порты и другие параметры, которые могут изменяться в зависимости от среды (разработка, тестирование, продакшн).
Как использовать .env файл с Docker?
- Создание .env файла: В корневой директории вашего проекта создайте файл
.env
и укажите в нем переменные окружения в форматеключ=значение
MYSQL_ROOT_PASSWORD=supersecretpassword MYSQL_DATABASE=mydatabase
2. Использование с Docker Compose: Docker Compose автоматически загружает переменные из .env
файла и передает их в ваши сервисы
version: '3' services: db: image: mysql environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE}
3. Передача переменных окружения через аргумент -e
в docker run
: Переменные окружения также можно передавать напрямую при запуске контейнера с помощью опции -e
.
docker run -d -e MYSQL_ROOT_PASSWORD=supersecretpassword -e MYSQL_DATABASE=mydatabase mysql
В этом примере -e
указывает Docker, что нужно задать переменные окружения MYSQL_ROOT_PASSWORD
и MYSQL_DATABASE
в контейнере.
4. Передача переменных в Dockerfile: Можно использовать переменные окружения из .env
файла и в Dockerfile, если задать их через ARG
и ENV
.
ARG MYSQL_ROOT_PASSWORD ENV MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
Полезные команды и опции Docker
- docker ps -a: Показывает все контейнеры, включая остановленные.
- docker logs -f [ID контейнера]: «Живой» просмотр логов контейнера.
- docker logs --tail [число строк] [ID контейнера]: Вывод последних N строк логов.
- docker exec -it [ID контейнера] /bin/bash: Доступ к командной строке контейнера.
- docker inspect [ID контейнера]: Выводит детальную информацию о контейнере или образе в формате JSON.
- docker cp [ID контейнера]:/path/in/container /path/on/host: Копирует файлы из контейнера на хост.
docker cp c3f279d17e0a:/app/logs ./logs
- docker run --restart [политика] [имя образа]: Устанавливает политику автоматического перезапуска контейнера.
Заключение
Docker — мощный инструмент для разработки и развертывания приложений. С его помощью вы можете изолировать свои приложения, создавать их переносимые образы и управлять инфраструктурой с меньшими затратами. Основные преимущества Docker — это скорость, гибкость и простота в использовании. Начав с простых команд, вы быстро освоите основные концепции и сможете перейти к более сложным задачам, таким как оркестрация и масштабирование контейнеров.
Спасибо за прочтение! Пожалуйста, поделитесь своим отзывом в комментариях и подпишитесь на меня в социальных сетях, если вам понравилась статья. Я также создал сообщество Telegram, где мы можем собираться и обсуждать интересные темы, связанные с криптовалютой. Вы можете присоединиться к нам и принять участие в обсуждении → Telegram: Contact @razgules