🖥️
Horvitz
Обо мне
  • Содержание
  • DevOps
    • Docker и Docker Compose
    • Ansible
    • Terraform
  • WEB
    • Nginx
  • Linux
    • Удобный терминал
    • IPtables
  • windows
    • Winget
  • VCS
    • Шпаргалка Git
    • Установка и настройка Gitlab EE
    • Установка и настройка Gitlab Runner
  • Мониторинг
    • Grafana
  • Артефакты
    • Nexus Sonatype
Powered by GitBook
On this page
  • Docker и Docker Compose
  • Основные Понятия
  • Установка Docker
  • На Linux
  • На MacOS
  • Проверка установки
  • Основные Команды Docker
  • Работа с Образами
  • Работа с Контейнерами
  • Выполнение команд внутри контейнера
  • Логи и мониторинг
  • Управление сетью
  • Работа с томами
  • Создание Собственного Образа с помощью Dockerfile
  • Структура Dockerfile
  • Пример Dockerfile для Python приложения
  • Сборка образа
  • Запуск созданного образа
  • Docker Compose
  • Файл docker-compose.yml
  • Основные команды Docker Compose
  • Docker Registry
  • Docker Networking
  • Типы сетей
  • Создание пользовательской мостовой сети
  • Запуск контейнера в пользовательской сети
  • Связывание контейнеров
  • Docker Volumes (Тома)
  • Создание тома
  • Использование тома при запуске контейнера
  • Монтирование директории хоста
  • Резервное копирование тома
  • Восстановление тома из резервной копии
  • Управление ресурсами
  • Ограничение использования CPU
  • Ограничение использования памяти
  • Полезные Команды
  • Docker Swarm (Оркестрация)
  • Инициализация Swarm
  • Добавление узла в Swarm
  • Развертывание сервиса в Swarm
  • Масштабирование сервиса
  • Просмотр сервисов
  • Безопасность Docker
  • Docker Best Practices
  • Получение Справки
  • Полезные Ресурсы
  • Заключение

Was this helpful?

Edit on GitHub
  1. DevOps

Docker и Docker Compose

Подробная Шпаргалка по Docker

Docker и Docker Compose

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

Основные Понятия

  • Образы (Images): Шаблоны для создания контейнеров. Образы состоят из слоев, каждый из которых представляет собой набор файловых изменений.

  • Контейнеры (Containers): Изолированные экземпляры образов, которые можно запускать, останавливать и управлять ими.

  • Dockerfile: Файл с инструкциями для создания пользовательских образов.

  • Docker Hub: Публичный реестр образов Docker, где можно найти и загрузить готовые образы.

Установка Docker

На Linux

curl -fsSL https://get.docker.com | sudo sh
sudo systemctl enable --now docker
sudo usermod -aG docker $(whoami)

На MacOS

Скачайте Docker Desktop с официального сайта и установите его.

Проверка установки

docker --version

Основные Команды Docker

Работа с Образами

  • Поиск образов в Docker Hub:

    docker search <имя_образа>

    Пример:

    docker search nginx
  • Загрузка образа:

    docker pull <имя_образа>

    Пример:

    docker pull nginx
  • Просмотр локальных образов:

    docker images
  • Удаление образа:

    docker rmi <ID_образа>

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

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

    docker run <опции> <имя_образа>

    Пример (запуск Nginx на порту 80):

    docker run -d -p 80:80 nginx
  • Опции команды docker run:

    • -d: Запуск в фоновом режиме (detached mode).

    • -p: Проброс порта (HOST:CONTAINER).

    • --name: Присвоение имени контейнеру.

    • -v: Монтирование тома (HOST:CONTAINER).

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

    docker ps
  • Просмотр всех контейнеров (включая остановленные):

    docker ps -a
  • Остановка контейнера:

    docker stop <ID_контейнера>
  • Запуск остановленного контейнера:

    docker start <ID_контейнера>
  • Перезапуск контейнера:

    docker restart <ID_контейнера>
  • Удаление контейнера:

    docker rm <ID_контейнера>
  • Удаление всех остановленных контейнеров:

    docker container prune

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

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

    docker exec -it <ID_контейнера> <команда>

    Пример (открыть bash):

    docker exec -it <ID_контейнера> /bin/bash
  • Запуск контейнера с доступом к терминалу:

    docker run -it <имя_образа> /bin/bash

Логи и мониторинг

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

    docker logs <ID_контейнера>

    С выводом в реальном времени:

    docker logs -f <ID_контейнера>
  • Статистика использования ресурсов:

    docker stats

Управление сетью

  • Просмотр сетей Docker:

    docker network ls
  • Создание пользовательской сети:

    docker network create <имя_сети>
  • Запуск контейнера в определенной сети:

    docker run --network=<имя_сети> <имя_образа>
  • Подключение контейнера к сети:

    docker network connect <имя_сети> <ID_контейнера>
  • Отключение контейнера от сети:

    docker network disconnect <имя_сети> <ID_контейнера>

Работа с томами

  • Просмотр томов:

    docker volume ls
  • Создание тома:

    docker volume create <имя_тома>
  • Удаление тома:

    docker volume rm <имя_тома>
  • Монтирование тома при запуске контейнера:

    docker run -v <имя_тома>:/path/in/container <имя_образа>

    Пример (монтирование текущей директории):

    docker run -v $(pwd):/app <имя_образа>

Создание Собственного Образа с помощью Dockerfile

Структура Dockerfile

# Базовый образ
FROM <базовый_образ>

# Автор
LABEL maintainer="ваш_email@example.com"

# Установка зависимостей
RUN apt-get update && apt-get install -y <пакеты>

# Копирование файлов
COPY <источник> <назначение>

# Установка рабочей директории
WORKDIR <путь>

# Определение переменных окружения
ENV <переменная>=<значение>

# Открытие портов
EXPOSE <порты>

# Команда запуска
CMD ["команда", "аргумент"]

Пример Dockerfile для Python приложения

# Базовый образ
FROM python:3.9-slim

# Установка рабочей директории
WORKDIR /app

# Копирование зависимостей
COPY requirements.txt .

# Установка зависимостей
RUN pip install -r requirements.txt

# Копирование исходного кода
COPY . .

# Открытие порта
EXPOSE 5000

# Команда запуска
CMD ["python", "app.py"]

Сборка образа

docker build -t <имя_образа>:<тег> .

Пример:

docker build -t myapp:latest .

Запуск созданного образа

docker run -d -p 5000:5000 myapp:latest

Docker Compose

Docker Compose используется для определения и запуска многоконтейнерных приложений.

Файл docker-compose.yml

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app
    links:
      - redis
  redis:
    image: "redis:alpine"

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

  • Запуск всех сервисов:

    docker-compose up

    В фоновом режиме:

    docker-compose up -d
  • Остановка всех сервисов:

    docker-compose down
  • Пересборка образов:

    docker-compose build
  • Просмотр логов:

    docker-compose logs
  • Выполнение команды внутри сервиса:

    docker-compose exec <сервис> <команда>

    Пример:

    docker-compose exec web /bin/bash

Docker Registry

  • Вход в Docker Hub:

    docker login
  • Тегирование образа для отправки в реестр:

    docker tag <локальный_образ> <репозиторий>/<имя_образа>:<тег>

    Пример:

    docker tag myapp:latest username/myapp:latest
  • Отправка образа в Docker Hub:

    docker push <репозиторий>/<имя_образа>:<тег>
  • Получение образа из реестра:

    docker pull <репозиторий>/<имя_образа>:<тег>

Docker Networking

Типы сетей

  • bridge: По умолчанию для контейнеров на одном хосте.

  • host: Контейнер использует сеть хоста.

  • none: Отключенная сеть.

Создание пользовательской мостовой сети

docker network create mynetwork

Запуск контейнера в пользовательской сети

docker run --network=mynetwork <имя_образа>

Связывание контейнеров

Контейнеры в одной сети могут обращаться друг к другу по имени.

Пример:

  • Запустить Redis:

    docker run -d --name redis --network=mynetwork redis
  • Запустить приложение, которое использует Redis:

    docker run -d --network=mynetwork myapp

В приложении можно обращаться к Redis по имени redis.

Docker Volumes (Тома)

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

Создание тома

docker volume create myvolume

Использование тома при запуске контейнера

docker run -d -v myvolume:/data myapp

Монтирование директории хоста

docker run -d -v /host/path:/container/path myapp

Резервное копирование тома

docker run --rm -v myvolume:/volume -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz /volume

Восстановление тома из резервной копии

docker run --rm -v myvolume:/volume -v $(pwd):/backup alpine tar xzf /backup/backup.tar.gz -C /

Управление ресурсами

Ограничение использования CPU

docker run --cpus="1.5" <имя_образа>

Ограничение использования памяти

docker run -m 512m <имя_образа>

Полезные Команды

  • Удаление всех остановленных контейнеров:

    docker container prune
  • Удаление всех неиспользуемых образов:

    docker image prune
  • Удаление всех неиспользуемых данных:

    docker system prune
  • Информация о Docker:

    docker info
  • Список процессов внутри контейнера:

    docker top <ID_контейнера>

Docker Swarm (Оркестрация)

Docker Swarm позволяет управлять кластером Docker-демонов.

Инициализация Swarm

docker swarm init

Добавление узла в Swarm

На основном узле:

docker swarm join-token worker

Следуйте инструкциям для добавления узла.

Развертывание сервиса в Swarm

docker service create --name myservice -p 80:80 nginx

Масштабирование сервиса

docker service scale myservice=5

Просмотр сервисов

docker service ls

Безопасность Docker

  • Запуск только доверенных образов.

  • Регулярное обновление образов и Docker Engine.

  • Использование минимальных базовых образов (например, Alpine).

  • Ограничение привилегий контейнеров:

    docker run --user nobody <имя_образа>
  • Использование --read-only для создания только чтения файловой системы:

    docker run --read-only <имя_образа>

Docker Best Practices

  • Минимизируйте количество слоев в Dockerfile.

  • Используйте .dockerignore для исключения ненужных файлов.

  • Закрепляйте версии зависимостей.

  • Регулярно обновляйте образы.

  • Используйте многоступенчатую сборку (multi-stage builds) для уменьшения размера образа.

Пример многоступенчатой сборки:

# Ступень 1: Сборка приложения
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

# Ступень 2: Создание конечного образа
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]

Получение Справки

  • Общая справка:

    docker --help
  • Справка по конкретной команде:

    docker <команда> --help

    Пример:

    docker run --help

Полезные Ресурсы

  • Официальная документация Docker: https://docs.docker.com/

  • Docker Hub: https://hub.docker.com/

  • Play with Docker (песочница): https://labs.play-with-docker.com/

Заключение

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

PreviousСодержаниеNextAnsible

Last updated 4 months ago

Was this helpful?