Перейти к основному содержимому

Основные команды Docker

·957 слов·5 минут
DevOps • Networks • Security • Infrastructure
Автор
DevOps • Networks • Security • Infrastructure
DevOps/Network/Infra Engineer, CyberSecurity Expert
Оглавление

Шпаргалка по командам Docker CLI для DevOps инженеров и разработчиков.

Архитектура Docker

Docker — платформа контейнеризации, позволяющая запускать приложения в изолированных контейнерах.

Существуют GUI интерфейсы, например Lazydocker, но лучше использовать Docker CLI.

Проверка Docker
#

Версия Docker
#

docker --version

Версия Docker Compose
#

docker compose version

Информация о системе
#

docker info

Посмотреть рабочий каталог
#

docker info | grep 'Docker Root Dir'

Работа с контейнерами
#

Запустить контейнер
#

docker run <image_name> Команда docker run представляет собой комбинацию команд docker create и docker start
Она создает новый контейнер из указанного образа и запускает его.
Если указанный образ локально отсутствует, то команда docker run загружает образ.

docker run nginx

Запуск в фоне
#

docker run -d nginx

Запуск с именем web1
#

docker run --name web1 nginx

Проброс портов
#

Параметр -p указывает на соответствие порта на хостовой машине и порта внутри контейнера

docker run -p 8080:80 nginx

Удалить контейнер после остановки
#

docker run --rm nginx

Список запущенных контейнеров
#

docker ps

Список всех контейнеров
#

docker ps -a

Перезапустить контейнер
#

docker restart container

Остановить контейнер
#

docker stop container

Остановить несколько контейнеров
#

docker stop container container2 container3

Остановить все запущенные контейнеры
#

$() — конструкция для подстановки результата одной команды в другую.

docker stop $(docker ps -q)

Удалить остановленный контейнер
#

docker rm container

Удалить запущенный контейнер
#

docker rm -f container

Удалить все контейнеры, включая работающие
#

docker rm -f $(docker ps -aq)

Полезные флаги docker run
#

Переменные окружения
#

docker run -e ENV=prod nginx

Env файл
#

docker run --env-file .env nginx

Volume
#

docker run -v data:/data nginx

Bind mount
#

docker run -v $(pwd):/app nginx

Установить лимит на RAM
#

docker run --name web1 --memory 512m nginx

Установить лимит на CPU
#

docker run --name web1 --cpus=1 nginx

Изменить лимиты на RAM и CPU
#

docker update --cpus=2 --memory=1g web1

Детальная проверка лимитов RAM и CPU
#

--memory или -m: Максимальный объем RAM
--memory-swap: Общий лимит памяти + swap
--cpus: Количество ядер CPU (может быть дробным)
--cpu-shares: Относительный вес CPU (по умолчанию 1024)
--cpuset-cpus: Привязка к конкретным ядрам CPU

docker inspect web1 | jq '
  .[].HostConfig | {
    Memory_MB: (.Memory / 1024 / 1024),
    MemorySwap_MB: (.MemorySwap / 1024 / 1024),
    CPU_cores: (.NanoCpus / 1000000000),
    CpuShares: .CpuShares
  }'

Посмотреть использование ресурсов выделенных самим контейнерам
#

docker stats

Restart policy
#

docker run --restart always nginx

Работа с образами
#

Скачать образ
#

docker pull nginx

Скачать конкретную версию
#

docker pull nginx:1.25

Список образов
#

docker images
# или
docker image ls

Удалить образ
#

docker rmi IMAGE_ID

Удалить dangling images
#

docker image prune

Удалить все неиспользуемые образы
#

docker image prune -a

Docker Build
#

Сборка образа
#

docker build -t myapp .

Сборка с тегом
#

docker build -t myapp:1.0 .

Без кеша
#

docker build --no-cache -t myapp .

Указать Dockerfile
#

docker build -f Dockerfile.prod .

Multi-stage build
#

FROM node:20 AS builder

WORKDIR /app
COPY . .
RUN npm install
RUN npm run build

FROM nginx

COPY --from=builder /app/dist /usr/share/nginx/html

Логи и мониторинг
#

Логи контейнера
#

docker logs container

Следить за логами
#

docker logs -f container

Последние строки
#

docker logs --tail 50 container

Exec и Debug
#

Зайти в контейнер
#

docker exec -it container bash

или

docker exec -it container sh

Выполнить команду
#

docker exec container ls /

Процессы контейнера
#

docker top container

Debug сетевых проблем
#

Проверить сеть контейнера
#

docker network inspect bridge

Запустить debug контейнер
#

docker run -it nicolaka/netshoot

Проверить DNS
#

dig google.com

Проверить соединение
#

curl http://service

Копирование файлов
#

Из контейнера
#

docker cp container:/file .

В контейнер
#

docker cp file container:/file

Volumes
#

Список volumes
#

docker volume ls

Создать volume
#

docker volume create data

Inspect volume
#

docker volume inspect data

Удалить volume
#

docker volume rm data

Networks
#

Список сетей
#

docker network ls

Создать сеть
#

docker network create backend

Подключить контейнер
#

docker network connect backend container

Inspect network
#

docker network inspect backend

Типы сетей Docker
#

bridge
#

По умолчанию для standalone контейнеров.

host
#

Контейнер использует сеть хоста.

docker run --network host nginx

none
#

Без сети.

docker run --network none nginx

overlay
#

Используется в Docker Swarm.

Docker Registry
#

Логин
#

docker login

Тег образа
#

docker tag myapp username/myapp:latest

Push
#

docker push username/myapp

Pull
#

docker pull username/myapp

Создание бэкапа и восстановление
#

Экспорт контейнера
#

docker export container > container.tar

Импорт контейнера
#

docker import container.tar image

Сохранить образ
#

docker save nginx > nginx.tar

Загрузить образ
#

docker load < nginx.tar

Docker System Cleanup
#

Удалить остановленные контейнеры
#

docker container prune

Удалить volumes
#

docker volume prune

Удалить networks
#

docker network prune

Полная очистка
#

docker system prune -a

Docker Compose
#

Запуск сервисов
#

docker compose up

В фоне
#

docker compose up -d

Пересборка
#

docker compose up --build

Остановка
#

docker compose down

Логи
#

docker compose logs

Список контейнеров
#

docker compose ps

Пример docker-compose.yml
#

version: "3"

services:

  nginx:
    image: nginx
    ports:
      - "8080:80"

  redis:
    image: redis

  postgres:
    image: postgres
    environment:
      POSTGRES_PASSWORD: secret

Полезные alias
#

alias dps="docker ps"
alias dpa="docker ps -a"
alias di="docker images"
alias dstop="docker stop $(docker ps -q)"
alias drm="docker rm $(docker ps -aq)"
alias dprune="docker system prune -a"

Best Practices
#

Не использовать latest
#

docker pull nginx:latest

docker pull nginx:1.25

Использовать маленькие образы
#

alpine
distroless
scratch

Использовать multi-stage build
#

Это уменьшает размер образа.

Не хранить секреты в образе
#

Использовать:

  • environment variables
  • secrets
  • vault

Troubleshooting
#

Контейнер сразу падает
#

Проверить:

docker logs container

Проверить конфигурацию контейнера
#

docker inspect container

Проверить процессы
#

docker top container

Документация
#

Docker Docs https://docs.docker.com

Docker Hub https://hub.docker.com

Related

Lazydocker для Docker
·89 слов·1 минута
Установка Docker на Ubuntu
·263 слов·2 минут
Как работает bridge-сеть в Docker
·1149 слов·6 минут