Вики / Службы и systemd
Docker (контейнеры)
Базовая работа с контейнерами — запуск, логи, exec, образы, compose, чистка.
Docker запускает приложения в изолированных контейнерах из образов. Демон
docker под systemd; управление — docker CLI.
systemctl status docker
docker ps # запущенные контейнеры
docker ps -a # включая остановленные
docker images # локальные образы
Без sudo — добавь пользователя в группу
docker(usermod -aG docker $USER, релогин). Группа docker = фактически root, давай осознанно.
docker run -d --name web -p 8080:80 nginx # фон + проброс порта (хост:контейнер)
docker run -d --name web --restart unless-stopped -p 8080:80 nginx # авто-рестарт
docker run --rm -it ubuntu bash # разово, удалить после выхода
docker run -e KEY=val -v /srv/data:/data img # переменная + том (bind)
docker logs -f --tail 100 web # логи (хвост, follow)
docker logs --since 10m web # за последние 10 минут
docker exec -it web bash # шелл внутри
docker stop web ; docker start web ; docker restart web
docker rm -f web # удалить (даже запущенный)
docker stats # CPU/память контейнеров
docker inspect web # вся метаинформация (JSON)
docker inspect -f '{{.State.Health.Status}}' web # одно поле через формат
docker pull nginx:1.27 # скачать образ (фиксируй тег, не :latest)
docker build -t myapp:1 . # собрать из Dockerfile
docker tag myapp:1 reg/myapp:1 ; docker push reg/myapp:1
docker volume create data ; docker volume ls # именованные тома (данные)
docker network create appnet ; docker network ls # своя сеть (контейнеры по имени)
docker run --network appnet --name db postgres # db резолвится по имени внутри appnet
# docker compose (несколько сервисов из compose.yaml)
docker compose up -d
docker compose ps ; docker compose logs -f
docker compose pull && docker compose up -d # обновить
docker compose down # остановить и удалить
Cannot connect to the Docker daemon
Демон не запущен (systemctl status docker) или нет прав (не в группе docker, нужен
релогин). В CI — нет docker-in-docker.
port is already allocated
Порт хоста занят: ss -tlnp | grep :8080 — поменяй левую часть -p 8081:80.
Контейнер сразу падает (Exited)
docker logs <name> — причина. Контейнер живёт, пока жив главный процесс; если
команда отработала/упала — контейнер завершается. Для отладки docker run -it img sh.
Контейнеры не видят друг друга по имени
Имя-резолвинг работает только в своей сети (docker network create + --network),
не в дефолтной bridge. В compose это включено автоматически.
Закончилось место
Образы/тома/логи копятся: docker system df, чистка docker system prune -af +
docker volume prune (осторожно — удалит неиспользуемое). Логи — драйвер
json-file без лимита; задай max-size в /etc/docker/daemon.json.
Данные пропали после пересоздания
Данные в контейнере эфемерны. Храни в томах (-v name:/path) или bind-mount.
docker ps -a ; docker images
docker run -d --name N --restart unless-stopped -p H:C img
docker logs -f --tail 100 N ; docker exec -it N bash
docker stats ; docker inspect N
docker compose up -d ; docker compose logs -f
docker system df ; docker system prune -af # чистка
См. также
- ss (сокеты и порты) — Сеть
- Процессы (ps, top, kill, nice) — Процессы
- systemctl — Службы и systemd