Установка 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 пользователей в контейнерах.