Найти в Дзене
Linux | Network | DevOps

Знакомство с архитектурой Docker, Docker Compose, повседневными командами и Dockerfile

Docker — это открытая платформа для разработки, доставки и запуска приложений. Она позволяет отделить приложения от инфраструктуры, чтобы обеспечить более быструю доставку и эффективное масштабирование. Docker упаковывает программное обеспечение в контейнеры — стандартизированные исполняемые компоненты, которые объединяют исходный код приложения с библиотеками операционной системы и зависимостями, необходимыми для запуска этого кода в любой среде. Docker Compose — это инструмент для определения и запуска многоконтейнерных приложений Docker. С помощью Docker Compose вы можете настроить все службы вашего приложения (базы данных, кэши, бэкенд, фронтенд) в одном файле YAML (docker-compose.yml). # Example docker-compose.yml file
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine" Dockerfile — это скрипт, содержащий ряд инструкций по созданию образа Docker. # Example Dockerfile
# 1. Specify a base image
FROM python:3.9-slim
# 2. Set
Оглавление

1. Знакомство с Docker

Docker — это открытая платформа для разработки, доставки и запуска приложений. Она позволяет отделить приложения от инфраструктуры, чтобы обеспечить более быструю доставку и эффективное масштабирование. Docker упаковывает программное обеспечение в контейнеры — стандартизированные исполняемые компоненты, которые объединяют исходный код приложения с библиотеками операционной системы и зависимостями, необходимыми для запуска этого кода в любой среде.

2. Архитектура Docker

2.1 Демон Docker

  • Демон Docker (dockerd) работает на хост-компьютере и управляет объектами Docker, такими как образы, контейнеры, сети и тома.
  • Демон прослушивает запросы Docker API и управляет объектами Docker.

2.2 Клиент Docker

  • Клиент Docker (docker) — это то, как большинство пользователей взаимодействуют с Docker. Он отправляет команды демону Docker через интерфейс командной строки или API Docker.
  • Один клиент может взаимодействовать с несколькими демонами.

2.3 Образы Docker

  • Образ Docker — это шаблон только для чтения с инструкциями по созданию контейнера Docker. Он содержит код приложения, системные библиотеки и зависимости.
  • Слои: каждая команда в Dockerfile создает новый слой в образе, который хранится в формате, пригодном для повторного использования.

2.4 Контейнеры Docker

  • Docker-контейнер — это исполняемый экземпляр образа Docker. Он работает как отдельный процесс на вашем хост-компьютере.
  • Контейнеры легковесны и портативны, они инкапсулируют код и его зависимости.

2.5 Реестр Docker

  • Реестр Docker — это хранилище, в котором содержатся образы Docker. Docker Hub — это общедоступный реестр по умолчанию.
  • Вы можете создавать частные реестры для внутреннего использования.

3. Docker Compose

3.1 Что такое Docker Compose?

Docker Compose — это инструмент для определения и запуска многоконтейнерных приложений Docker. С помощью Docker Compose вы можете настроить все службы вашего приложения (базы данных, кэши, бэкенд, фронтенд) в одном файле YAML (docker-compose.yml).

3.2 Архитектура Docker Compose

  • Сервисы: каждый сервис в docker-compose.yml определяет контейнер.
  • Сети: используются для определения способов взаимодействия различных сервисов (контейнеров) друг с другом.
  • Тома: обеспечивают сохранение данных путем подключения хранилища к контейнерам.

3.3 Команды Docker Compose

  • Запуск служб: docker-compose up
  • Остановка служб: docker-compose down
  • Создание служб: docker-compose build
  • Просмотр запущенных служб: docker-compose ps
  • Масштабирование служб: docker-compose scale <service>=<number_of_instances>

# Example docker-compose.yml file

version: '3'

services:

web:

build: .

ports:

- "5000:5000"

redis:

image: "redis:alpine"

4. Ежедневные команды Docker

4.1 Управление образами

  • Список всех образов: docker images
  • Получить образ из реестра: docker pull <image_name>
  • Удалить образ: docker rmi <image_name>

4.2 Управление контейнерами

  • Список всех контейнеров: docker ps или docker ps -a (для всех, включая остановленные)
  • Запустить контейнер: docker start <container_id>
  • Остановить контейнер: docker stop <container_id>
  • Запустить новый контейнер: docker run -d -p <host_port>:<container_port> <image_name>
  • Просмотреть логи контейнера: docker logs <container_id>
  • Удалить контейнер: docker rm <container_id>

4.3 Управление объёмами

  • Список томов: docker volume ls
  • Создать том: docker volume create <volume_name>
  • Удалить том: docker volume rm <volume_name>

4.4 Управление сетями

  • Список сетей: docker network ls
  • Создать сеть: docker network create <network_name>
  • Удалить сеть: docker network rm <network_name>

5. Разбор Dockerfile

Dockerfile — это скрипт, содержащий ряд инструкций по созданию образа Docker.

# Example Dockerfile

# 1. Specify a base image

FROM python:3.9-slim

# 2. Set environment variables (optional)

ENV PYTHONUNBUFFERED=1

# 3. Copy the application code into the container

COPY . /app

# 4. Set the working directory

WORKDIR /app

# 5. Install dependencies

RUN pip install -r requirements.txt

# 6. Expose a port (optional)

EXPOSE 5000

# 7. Define the command to run the application

CMD ["python", "app.py"]

Ключевые команды и параметры Dockerfile:

  1. FROM: определяет базовый образ для последующих инструкций. Каждый Dockerfile должен начинаться с инструкции FROM .

FROM ubuntu:latest

  1. RUN: выполняет команду в контейнере во время сборки образа (например, установку пакетов).

RUN apt-get update && apt-get install -y nginx

  1. COPY: копирует файлы из файловой системы хоста в контейнер.

COPY ./src /app/src

  1. WORKDIR: устанавливает рабочий каталог внутри контейнера для последующих инструкций.

WORKDIR /app

  1. EXPOSE: сообщает Docker, что контейнер будет прослушивать указанный сетевой порт во время выполнения.

EXPOSE 8080

  1. CMD: указывает команду по умолчанию для запуска в контейнере. Если пользователь запускает контейнер без указания команды, она будет выполнена.

CMD ["python", "app.py"]

  1. ENTRYPOINT: аналогично CMD, но определяет команду, которая всегда выполняется, даже если в контейнер передаются аргументы.

ENTRYPOINT ["python"]

CMD ["app.py"]

  1. ENV: устанавливает переменные среды внутри контейнера.

ENV MYSQL_ROOT_PASSWORD=secret

6. Заключение

Docker предоставляет оптимизированную среду для согласованного и масштабируемого управления приложениями и их развертывания. Понимание архитектуры Docker, освоение повседневных команд Docker, использование Docker Compose для приложений с несколькими контейнерами и создание эффективных Docker-файлов помогут вам оптимизировать разработку, упростить развертывание и обеспечить бесперебойную работу приложений в различных средах.

Linux | Network | DevOps

Чат

YouTube

VK

Rutube