Команды, которые покрывают 95% ежедневной работы с контейнерами. Сделай закладку. Подробные разборы - в статьях Docker для новичка, пишем Dockerfile и docker compose.
Контейнеры
| Команда | Что делает |
|---|---|
docker run -d -p 8080:80 nginx |
Запустить в фоне, проброс порта |
docker run -it --rm ubuntu bash |
Интерактивно, удалить после выхода |
docker ps / docker ps -a |
Запущенные / все контейнеры |
docker logs -f <id> |
Логи в реальном времени |
docker exec -it <id> sh |
Шелл внутри контейнера |
docker stop <id> / docker start <id> |
Остановить / запустить |
docker rm <id> |
Удалить контейнер |
docker stats |
Использование CPU/RAM в реальном времени |
Образы
docker images # список образов
docker build -t myapp:1.0 . # собрать из Dockerfile
docker pull postgres:16 # скачать
docker tag myapp:1.0 myapp:latest
docker push registry/myapp:1.0 # загрузить в реестр
docker rmi <image> # удалить образ
docker history myapp:1.0 # слои образа и их размер
Dockerfile - основное
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./ # сначала зависимости - для кэша слоёв
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
USER node # не root в проде
CMD ["node", "server.js"]
Порядок важен: то, что меняется реже - выше. Подробно: пишем Dockerfile.
docker compose
docker compose up -d # поднять стек в фоне
docker compose down # остановить и удалить
docker compose down -v # + удалить тома (осторожно!)
docker compose ps # статус сервисов
docker compose logs -f <сервис> # логи одного сервиса
docker compose exec <сервис> sh # шелл в сервисе
docker compose build --no-cache # пересобрать с нуля
docker compose pull # обновить образы
Тома и данные
docker volume ls
docker volume create mydata
docker run -v mydata:/var/lib/postgresql/data postgres:16 # именованный том
docker run -v $(pwd):/app node:22 # bind mount (код с хоста)
docker volume rm mydata
docker volume prune # удалить неиспользуемые тома
Сети
docker network ls
docker network create mynet
docker run --network mynet --name db postgres:16 # контейнеры видят друг друга по имени
docker network inspect mynet
Отладка
docker inspect <id> # вся метадата (JSON)
docker inspect -f '{% raw %}{{.State.Status}}{% endraw %}' <id> # одно поле
docker logs --tail 100 <id> # последние 100 строк
docker cp <id>:/app/log.txt . # скопировать файл из контейнера
docker diff <id> # что изменилось в файловой системе
docker top <id> # процессы внутри
Очистка (освободить место)
docker system df # сколько занято
docker container prune # удалить остановленные контейнеры
docker image prune # удалить «висячие» образы
docker image prune -a # удалить все неиспользуемые образы
docker system prune -a --volumes # удалить ВСЁ неиспользуемое (агрессивно)
.dockerignore
node_modules
.git
.env
dist
*.log
Без него COPY . . тащит в образ мусор и ломает кэш. Деплой на сервер с нуля - в статье про VPS.