Как поставить Docker и Compose в Ubuntu, Debian и AlmaLinux из официального репозитория, запустить приложение из compose.yaml, не открыть порт в обход межсетевого экрана и не забить диск журналами.
Содержание
Docker запускает программы в контейнерах — вместе со всем, что им нужно, отдельно от остальной системы. Ставить его лучше из репозитория Docker: там свежие версии и сразу есть Compose. В репозиториях самих систем Docker тоже есть, но версии там старше.
Ubuntu и Debian
Команды для Ubuntu:
sudo apt update
sudo apt 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
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginДля Debian — те же команды, только в двух адресах вместо ubuntu напишите debian. Служба Docker запустится сама и будет запускаться при загрузке.
AlmaLinux
sudo dnf install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now dockerПри первой установке dnf попросит подтвердить ключ репозитория — его отпечаток должен быть 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35.
Проверка
sudo docker run --rm hello-world
docker --version
docker compose versionЕсли появилось «Hello from Docker!», всё работает.
Чтобы не писать каждый раз sudo, добавьте себя в группу docker и войдите заново:
sudo usermod -aG docker $USERdocker может получить права root без пароля. Добавляйте в неё только тех, кому вы дали бы и sudo.Compose: приложение одним файлом
Compose описывает в одном файле несколько контейнеров, их настройки и данные. Пример — WordPress с базой MariaDB. Создайте папку, например /opt/wordpress, а в ней файл compose.yaml:
services:
db:
image: mariadb:11
restart: unless-stopped
environment:
MARIADB_DATABASE: wp
MARIADB_USER: wp
MARIADB_PASSWORD: надёжный-пароль
MARIADB_RANDOM_ROOT_PASSWORD: "1"
volumes:
- db:/var/lib/mysql
wordpress:
image: wordpress:6
restart: unless-stopped
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wp
WORDPRESS_DB_PASSWORD: надёжный-пароль
WORDPRESS_DB_NAME: wp
ports:
- "127.0.0.1:8080:80"
volumes:
- wp:/var/www/html
volumes:
db:
wp:Запуск и управление — из этой папки:
| Команда | Что делает |
|---|---|
| docker compose up -d | скачать образы, создать и запустить контейнеры |
| docker compose ps | что запущено |
| docker compose logs -f wordpress | журнал контейнера, выход — Ctrl+C |
| docker compose pull && docker compose up -d | обновить образы и пересоздать контейнеры |
| docker compose down | остановить и удалить контейнеры; данные в томах остаются |
restart: unless-stopped — контейнеры поднимутся сами после перезагрузки сервера. Данные лежат в томах (volumes): контейнеры можно удалять и пересоздавать, база и файлы сайта не пропадут. Тома хранятся в /var/lib/docker/volumes, их стоит включить в резервное копирование.
Порты и межсетевой экран
Строка "127.0.0.1:8080:80" публикует порт 80 контейнера только на внутреннем адресе сервера — снаружи до него не достучаться. Наружу сайт отдаёт nginx на самом сервере, он же получает бесплатный сертификат: Сертификат Let's Encrypt: certbot. Строка для nginx:
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}"8080:80" или -p 8080:80, Docker откроет порт всему интернету — в обход ufw и firewalld: он добавляет свои правила раньше правил экрана. Так в интернет часто случайно попадают базы данных и панели управления. Публикуйте на 127.0.0.1 всё, что не должно быть видно снаружи.Журналы контейнеров
Docker сохраняет всё, что контейнер выводит, в файл, и по умолчанию этот файл растёт без ограничений — со временем он может занять весь диск. Ограничьте размер: создайте /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}и перезапустите Docker: sudo systemctl restart docker. Настройка действует на новые контейнеры — существующие пересоздайте: docker compose up -d --force-recreate.
Место на диске
docker system df # сколько занимают образы, контейнеры, тома и кэш
docker image prune -a # удалить образы, которые не использует ни один контейнерПодробнее о том, что можно чистить, — в статье Закончилось место на диске.
Не нашли ответ? Напишите в поддержку — подскажем.


