Перейти к основному содержимому

Установка Docker и Docker Compose

Официальная установка последних версий Docker Engine и Docker Compose на различных операционных системах.

Ubuntu/Debian

Удаление старых версий

sudo apt-get remove docker docker-engine docker.io containerd runc

Установка официального Docker

sudo apt-get update

sudo apt-get install ca-certificates curl

sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Для Debian

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

CentOS/RHEL/Rocky Linux

Удаление старых версий

sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

Установка официального репозитория

sudo dnf install -y dnf-plugins-core

sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Настройка Docker

Добавление пользователя в группу docker

sudo groupadd docker

sudo usermod -aG docker $USER

newgrp docker

docker run hello-world

Автозапуск Docker

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

Запуск Docker

sudo systemctl start docker

sudo systemctl status docker

Конфигурация Docker daemon

Создание конфигурационного файла

sudo mkdir -p /etc/docker

sudo nano /etc/docker/daemon.json

Оптимизированная конфигурация

{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"default-runtime": "runc",
"runtimes": {
"runc": {
"path": "runc"
}
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"dns": ["8.8.8.8", "8.8.4.4"],
"registry-mirrors": [],
"insecure-registries": [],
"live-restore": true,
"userland-proxy": false,
"no-new-privileges": true,
"seccomp-profile": "/etc/docker/seccomp.json",
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
},
"features": {
"buildkit": true
}
}

Применение конфигурации

sudo systemctl restart docker

docker info

Docker Compose

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

docker compose version

Установка через pip (альтернативный способ)

sudo apt install python3-pip

pip3 install docker-compose

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Создание символической ссылки для совместимости

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Базовый пример Docker Compose

docker-compose.yml

version: '3.8'

services:
nginx:
image: nginx:alpine
container_name: nginx_server
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/nginx/ssl:ro
- ./www:/var/www/html:ro
restart: unless-stopped
networks:
- web_network
depends_on:
- app

app:
build:
context: ./app
dockerfile: Dockerfile
container_name: node_app
environment:
- NODE_ENV=production
- PORT=3000
volumes:
- ./app:/usr/src/app
- /usr/src/app/node_modules
restart: unless-stopped
networks:
- web_network
depends_on:
- redis
- postgres

postgres:
image: postgres:15-alpine
container_name: postgres_db
environment:
- POSTGRES_DB=myapp
- POSTGRES_USER=myuser
- POSTGRES_PASSWORD=mypassword
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
restart: unless-stopped
networks:
- web_network
ports:
- "5432:5432"

redis:
image: redis:7-alpine
container_name: redis_cache
command: redis-server --appendonly yes --requirepass myredispassword
volumes:
- redis_data:/data
restart: unless-stopped
networks:
- web_network
ports:
- "6379:6379"

volumes:
postgres_data:
driver: local
redis_data:
driver: local

networks:
web_network:
driver: bridge

Настройка безопасности

Создание пользователя для Docker

sudo useradd -r -s /bin/false dockeruser

sudo usermod -aG docker dockeruser

Настройка AppArmor профиля

sudo nano /etc/apparmor.d/docker

Ограничение ресурсов

services:
app:
image: myapp:latest
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
ulimits:
nofile:
soft: 65536
hard: 65536

Мониторинг и логирование

Настройка логирования

{
"log-driver": "journald",
"log-opts": {
"tag": "docker/{{.Name}}"
}
}

Просмотр логов

docker logs -f container_name

journalctl -u docker.service

docker system df

docker system prune

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

Создание образов из контейнеров

docker commit container_name backup_image_name

docker save backup_image_name > backup_image.tar

Бэкап volumes

docker run --rm -v volume_name:/data -v $(pwd):/backup alpine tar czf /backup/volume_backup.tar.gz -C /data .

docker run --rm -v volume_name:/data -v $(pwd):/backup alpine tar xzf /backup/volume_backup.tar.gz -C /data

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

Очистка системы

docker system prune -a

docker volume prune

docker network prune

docker container prune

Мониторинг ресурсов

docker stats

docker system df

docker inspect container_name

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

docker compose up -d

docker compose down

docker compose logs -f

docker compose ps

docker compose restart service_name
Производительность

Используйте multi-stage builds и .dockerignore для оптимизации размера образов.

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

Регулярно обновляйте Docker и базовые образы, используйте non-root пользователей в контейнерах.