Skip to content

Instantly share code, notes, and snippets.

@Aleksey-Voko
Last active May 11, 2023 05:48
Show Gist options
  • Save Aleksey-Voko/50f3631386514e340fca7c416f21ab9f to your computer and use it in GitHub Desktop.
Save Aleksey-Voko/50f3631386514e340fca7c416f21ab9f to your computer and use it in GitHub Desktop.
Docker Cheat Sheet

Docker Cheat Sheet

Команды

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

docker images или docker image ls — посмотреть список образов (ссылка, ссылка)
docker rmi <образ> [образ...] или docker image rm <образ> [образ...] — удалить образ(ы) (ссылка, ссылка)

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

docker run <образ> — поднять контейнер на основе образа (ссылка)

  • docker run --name <имя> <образ> — при поднятии присвоить имя контейнеру (ссылка)
  • docker run --rm <образ> — удалять контейнер после завершения его работы (ссылка)
  • docker run -it <образ> — позволяет «войти» в контейнер во время его создания (ссылка, ссылка)
  • docker run -d <образ> — поднять контейнер в фоновом режиме (ссылка)

docker ps — список активных (работающих) контейнеров (ссылка)

  • docker ps -a — список всех контейнеров (ссылка)

docker stop <контейнер> [контейнер...] — остановить работающий(ие) контейнер(ы) (ссылка)

docker start <контейнер> [контейнер...] — запустить остановленный(ые) контейнер(ы) (ссылка)

docker rm <контейнер> [контейнер...] — удалить контейнер(ы) (ссылка)

docker exec <контейнер> команда — запустить команду в работающем контейнер (ссылка)

  • docker exec -it <контейнер> bash — запустить bash процесс и «войти» в контейнер (ссылка)

Инструкции Dockerfile'а

FROM — задаем базовый образ, на основе которого собираем новый (ссылка)

COPY — копируем файл с нашей файловой системы в файловую систему контейнеров (ссылка)

ADD — добавляем файл или ссылку с нашей файловой системы в образ (ссылка)

RUN — выполняем команду (ссылка)

WORKDIR — устанавливаем рабочую директорию (ссылка)

ENTRYPOINT — задаем точку входа для запуска контейнера (ссылка)

CMD — задаем точку входа для запуска контейнера (ссылка)

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

Разница в использовании ENTRYPOINT и CMD

Несмотря на то, что и ENTRYPOINT, и CMD отвечают за запуск программы в контейнере, они используются в разных ситуациях. Особенно это касается случая, когда в одном докерфайле используются обе инструкции одновременно (ссылка, ссылка).

Разница в использовании ADD и COPY

Полезно будет заглянуть сюда и сюда.

И в документацию (COPY, ADD).

Команда для сборки

docker build <путь, где лежит Dockerfile> — создать образ на основе Dockerfile (ссылка)

  • docker build -t <имя_образа:тег> <путь> — создать образ с именем и тегом (ссылка)

docker volume ls — вывести список вольюмов (ссылка)

docker volume create <название> — создать вольюм (ссылка)

docker volume rm <название> — удалить вольюм (ссылка)

docker volume prune — удалить вольюмы, которые не используются контейнерами (ссылка)

Bind mount:

docker run -v <полный_путь_на_хосте>:<полный_путь_в_контейнере> <образ>

Volume:

docker run -v <название_вольюма>:<полный_путь_в_контейнере> <образ>

Readonly режим:

docker run -v <полный_путь_на_хосте>:<полный_путь_в_контейнере>:ro <образ>

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

ENV — инструкция в Dockerfile, которая позволяет задавать переменные окружения в контейнерах (ссылка).

  • Не задавайте через эту инструкцию секретные данные

docker run -e <НАЗВАНИЕ_ПЕРЕМЕННОЙ>=<значение> <образ> — позволяет задать переменную окружения в конкретном контейнере (ссылка).

Логи

docker logs <контейнер> — позволяет вытащить логи из контейнера (ссылка)

  • docker logs -f <контейнер> — не отключаемся от контейнера
  • docker logs -f <контейнер> — не отключаемся от контейнера

View container logs

Порты

EXPOSE — инструкция в Dockerfile, которая позволяет сообщить пользователю, какой(ие) порт(ы) слушает приложение внутри контейнера. Не прокидывает порты на хост (ссылка)

docker run -p <порт_на_хосте>:<порт_в_контейнере> <образ> — связывает порт внутри контейнера с портом на хосте (ссылка).

docker run -p <IP_адрес_на_хосте>:<порт_на_хосте>:<порт_в_контейнере> <образ> — по умолчанию адрес на хосте задается 0.0.0.0. При поднятии можно изменить этот адрес.
Например: docker run -p 127.0.0.1:80:80 nginx

Сети

docker network ls — список сетей (ссылка)

docker network create — создать сеть (ссылка)

docker network rm — удалить сеть (ссылка)

docker run --net=<название_сети> <образ> — подключаем контейнер к сети (ссылка, ссылка)

docker inspect <название_или_ID_объекта> — получить информацию об объектах докера (контейнер, образ, вольюм, сеть) (ссылка)

Networking overview,
Docker networking is CRAZY!!,
Сети Docker изнутри

Многоэтапная сборка

Multi-stage builds

Этапы задаются при помощи нескольких инструкций FROM.

Из одного этапа сборки в другой можно копировать артефакты при помощи COPY --from=.

FROM <образ> AS builder
. . .


FROM <образ> 
. . .
COPY --from=builder <путь_в_сборке_builder> <путь_в_текущей_сборке>
. . .

YAML И DOCKER-COMPOSE

docker-compose ps — список контейнеров (ссылка)

docker-compose up — поднять приложение (ссылка)

  • docker-compose up <сервис> — поднять конкретный контейнер
  • docker-compose up -d — поднять контейнеры в фоновом режиме
  • docker-compose -f docker-compose.dev.yml up — указать docker-compose.yaml файл (ссылка)

docker-compose stop — остановить поднятые контейнеры (ссылка)

docker-compose start — запустить остановленные контейнеры (ссылка)

docker-compose down — остановить и удалить контейнеры и сеть (ссылка)

Инструкции docker-compose.yaml

Compose specification

build — собираем образ, на основе которого поднимем сервис (ссылка)

image — образ, на основе которого поднимем сервис (ссылка)

container_name — название контейнера в сервисе (ссылка)

volumes — список вольюмов для сервиса (ссылка)

environment — переменные окружения в сервисе (ссылка)

networks — список сетей, к которым нужно подключить сервис (ссылка)

ports — список портов, которые нужно прокинуть у сервиса (ссылка)

restart — указываем поведение сервиса при падении (ссылка)

deploy/replicas — указываем количество контейнеров у сервиса (ссылка, ссылка)

depends_on — определяем зависимость между сервисами (ссылка)

healthcheck — задаем проверку для сервиса (ссылка)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment