🐳 Docker (Установка и настройка)
⚠️ ВНИМАНИЕ: Эта статья носит исключительно напоминалку (шпаргалку) по Docker в Astra Linux.
ℹ️ О версиях Astra Linux:
- Astra Linux 1.6 — основа Debian 9 (устаревшая, EOL)
- Astra Linux 1.7 — основа Debian 10 (устаревшая)
- Astra Linux 1.8 — основа Debian 12 (актуальная, рекомендуется)
⚠️ Данная инструкция актуальна для 1.6 , 1.7 и 1.8. Для версии 1.8 рекомендуется использовать стандартную установку Docker из официального репозитория.
📦 Установка Docker
sudo apt install -y docker.io
Добавляем пользователя в группу docker:
sudo -S usermod -aG docker $USER
📦 Установка, включение и применение Docker для работы в непривилегированном (rootless) режиме
sudo apt install -y docker.io rootless-helper-astra
Добавляем пользователя в группу docker:
sudo -S usermod -aG docker $USER
Запускаем службу docker в rootless-режиме:
sudo systemctl start rootless-docker@$USER@0:0:0:0
sudo systemctl enable rootless-docker@$USER@0:0:0:0
Вводим команду rootlessenv и под ней работаем:
rootlessenv
🐙 Установка Docker Compose v2
📌 Docker Compose v2 (рекомендуемый способ):
sudo apt update
sudo apt install -y docker-compose-v2
Проверка установки:
docker compose version
📌 Docker Compose v1 (устаревший):
sudo apt install docker-compose
Проверка установки:
docker-compose --version
🐙 Команды Docker Compose
🚀 Основные команды
| Команда | Описание |
|---|---|
| docker compose up -d | Запустить все сервисы в фоне |
| docker compose down | Остановить и удалить контейнеры |
| docker compose ps | Список контейнеров проекта |
| docker compose logs -f | Просмотр логов в реальном времени |
| docker compose exec <service> bash | Зайти внутрь контейнера сервиса |
| docker compose restart | Перезапустить все сервисы |
| docker compose down -v | Остановить и удалить контейнеры + volumes |
| docker compose build --no-cache | Пересобрать образы без кэша |
📄 Примеры docker-compose.yml (шаблоны)
🌐 Nginx + PHP (простой LEMP)
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
restart: unless-stopped
php:
image: php:8.2-fpm-alpine
volumes:
- ./html:/var/www/html
restart: unless-stopped
🐘 PostgreSQL + pgAdmin
services:
postgres:
image: postgres:15-alpine
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
POSTGRES_DB: mydb
volumes:
- pgdata:/var/lib/postgresql/data
ports:
- "5432:5432"
restart: unless-stopped
pgadmin:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: admin@example.com
PGADMIN_DEFAULT_PASSWORD: admin
ports:
- "5050:80"
restart: unless-stopped
volumes:
pgdata:
📊 Redis + Python (Celery)
services:
redis:
image: redis:alpine
ports:
- "6379:6379"
restart: unless-stopped
worker:
build: .
command: celery -A tasks worker --loglevel=info
depends_on:
- redis
environment:
REDIS_URL: redis://redis:6379
restart: unless-stopped
🔧 Docker Compose с кастомным Dockerfile
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
NODE_ENV: production
volumes:
- ./app:/usr/src/app
restart: unless-stopped
📄 Примеры Dockerfile (шаблоны)
🐍 Python (FastAPI/Flask)
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
📦 Node.js (Express)
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
☕ Java (Spring Boot)
FROM openjdk:17-slim
WORKDIR /app
COPY target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
🐘 PHP (Apache)
FROM php:8.2-apache
RUN docker-php-ext-install pdo pdo_mysql
COPY . /var/www/html/
EXPOSE 80
🔷 Go (многостадийная сборка)
# Сборка
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o myapp .
# Финальный образ
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
EXPOSE 8080
CMD ["./myapp"]
🐋 Команды Docker
🌐 Сети в Docker
| Команда | Описание |
|---|---|
| docker network create название_сети | Создать сеть |
| docker network ls | Посмотреть имеющиеся сети |
| docker network rm название_сети | Удалить сеть |
🖼️ Image (образы)
| Команда | Описание |
|---|---|
| docker image ls | Список образов |
| docker build -t имя . | Собрать образ из Dockerfile |
| docker rmi -f имя_образа | Удалить образ |
| docker save имя > имя.tar | Экспорт образа в архив |
| docker load -i имя.tar | Импорт образа из архива |
📦 Container
| Команда | Описание |
|---|---|
| docker run -d -p 8080:80 nginx | Запуск контейнера |
| docker stop имя | Остановка |
| docker rm имя | Удаление |
| docker ps -a | Все контейнеры (включая остановленные) |
| docker exec -it имя bash | Войти в контейнер |
| docker commit CONTAINER_ID новый_образ | Сохранить контейнер в образ |
💾 Volume
| Команда | Описание |
|---|---|
| docker volume create имя | Создать том |
| docker volume ls | Список томов |
| docker volume rm имя | Удалить том |
| docker run -v my_volume:/data nginx | Привязать том к контейнеру |
🔧 Полезные команды
| Команда | Описание |
|---|---|
| docker cp /путь/файл контейнер:/путь/в/контейнере | Скопировать файл в контейнер |
| docker system prune -a | Очистить неиспользуемые образы, контейнеры, тома |
| docker logs -f имя | Посмотреть логи контейнера |