docker swarm init
docker swarm join-token manager
Чтобы запустить контейнер и оказаться в нем “-t подключение к консоли tty”; “-i интерактивный режим”
docker run -it ubuntu bash
Просто войти
docker exec -it ubuntu
Где хранятся контейнеры
cd /var/lib/docker/containers
Вывести потушенные контейнеры
docker ps -a -f status=exited
Удалить все потушенные контейнеры
docker rm $(docker ps -a -q -f status=exited)
Логи
docker logs ubuntu
Вывести информацию о контейнере
docker inspect ubuntu
Запустить с именем web, с внешним и внутренним портом 80, оставить запущенным имидж nginx
docker run --name web -p 80:80 -d nginx
Скопировать файл index.html в контейнер web в /var/www/
docker cp index.html web:/var/www/index.html
Посмотреть диски
docker volume ls
Рассмотреть что за диск
docker volume inspect ubuntu
Как работать с Dockerfile https://wiki.merionet.ru/articles/kak-rabotat-s-dockerfile/?utm_source=sendpulse&utm_medium=email&utm_campaign=-kak-rabotat-s-dockerfile-frep
docker stats
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 процесс и «войти» в контейнер (ссылка)
То есть не запускайте их с параметром --restart=always. Используйте вместо этого --restart=on-failure:5. Будет сделано 5 попыток запуска в случае ошибки.
Часть инструкций, достаточный для создания собственных образов.
FROM — задаем базовый образ, на основе которого собираем новый (ссылка)
COPY — копируем файл с нашей файловой системы в файловую систему контейнеров (ссылка)
ADD — добавляем файл или ссылку с нашей файловой системы в образ (ссылка)
RUN — выполняем команду (ссылка)
WORKDIR — устанавливаем рабочую директорию (ссылка)
ENTRYPOINT — задаем точку входа для запуска контейнера (ссылка)
CMD — задаем точку входа для запуска контейнера (ссылка)
Со списком инструкций можно ознакомиться в документации (ссылка).
Несмотря на то, что и ENTRYPOINT, и CMD отвечают за запуск программы в контейнере, они используются в разных ситуациях. Особенно это касается случая, когда в одном докерфайле используются обе инструкции одновременно.
Предлагаем ознакомиться с этим абзацем из документации — ссылка.
Также полезно будет заглянуть сюда.
| No ENTRYPOINT | ENTRYPOINT exec_entry p1_entry | ENTRYPOINT [“exec_entry”, “p1_entry”] | |
| No CMD | error, not allowed | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry |
| CMD [“exec_cmd”, “p1_cmd”] | exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry exec_cmd p1_cmd |
| CMD [“p1_cmd”, “p2_cmd”] | p1_cmd p2_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry p1_cmd p2_cmd |
| CMD exec_cmd p1_cmd | /bin/sh -c exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd |
Полезно будет заглянуть сюда и сюда.
Ну и, безусловно, в документацию (COPY, ADD).
Рассмотрим разницу в использовании на двух примерах — добавление архива и файла по ссылке.
Dockerfile для ADD:
FROM ubuntu:22.04 WORKDIR /zip ADD archive.tar.xz . WORKDIR /url ADD https://airflow.apache.org/docs/apache-airflow/2.4.0/docker-compose.yaml .
При использовании ADD архив распаковался, а файл (в данном случае docker-compose.yaml) по ссылке скачался.
Dockerfile для COPY:
FROM ubuntu:22.04 WORKDIR /zip COPY archive.tar.xz . WORKDIR /url COPY https://airflow.apache.org/docs/apache-airflow/2.4.0/docker-compose.yaml .
При использовании COPY файл по ссылке скачивать нельзя, поэтому упали с ошибкой. При этом архив не распаковался.
docker build <путь, где лежит Dockerfile> — создать образ на основе Dockerfile (ссылка)
docker build -t <имя_образа:тег> <путь> — создать образ с именем и тегом (ссылка)
Пример создания образа:
После того, как вы зарегистрировались, необходимо создать репозиторий (прямо как на GitHub).
На странице вы увидите плашку Create a Repository. Нажмите на неё.
После нажатия вы попадете на страницу создания репозитория. Создайте там свой репозиторий.
Отлично! Теперь у вас есть свой репозиторий, где можно хранить свои образы.
После того, как у вас появился репозиторий, попробуйте загрузить в него свой образ.
Чтобы это сделать, необходимо локально авторизоваться, при необходимости сменить имя и тег образа и сделать пуш на Docker Hub.
docker login. docker tag <исходный_образ> <результирующий_образ>. docker push <образ>Чтобы локально разлогиниться, нужно ввести команду docker logout.
Выглядеть это будет как-то так:
После того, как вы загрузили образ на Docker Hub, вы можете его скачать.
Как вы уже знаете, делается это командой docker pull :)
docker compose down --volumes
docker volume ls — вывести список вольюмов (ссылка)
docker volume create <название> — создать вольюм (ссылка)
docker volume rm <название> — удалить вольюм (ссылка)
docker volume prune — удалить вольюмы, которые не используются контейнерами (ссылка)
docker run -v <полный_путь_на_хосте>:<полный_путь_в_контейнере> <образ>
docker run -v <название_вольюма>:<полный_путь_в_контейнере> <образ>
docker run -v <полный_путь_на_хосте>:<полный_путь_в_контейнере>:ro <образ>
ENV — инструкция в Dockerfile, которая позволяет задавать переменные окружения в контейнерах (ссылка).
* Не задавайте через эту инструкцию секретные данные
docker run -e <НАЗВАНИЕ_ПЕРЕМЕННОЙ>=<значение> <образ> — позволяет задать переменную окружения в конкретном контейнере (ссылка).
docker logs <контейнер> — позволяет вытащить логи из контейнера (ссылка)
docker logs -f <контейнер> — не отключаемся от контейнера
docker logs -t <контейнер> — добавляем время к логам
Еще можно заглянуть сюда.
docker logs pod > logs.log
Используя операторы >, >>, 2> и 2>> мы можем сохранить все наши логи в файлы
> — запись stdout в файл>> — дозапись stdout в файл2> — запись stderr в файл2>> — дозапись stderr в файл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_объекта> — получить информацию об объектах докера (контейнер, образ, вольюм, сеть) (ссылка)
Следует заглянуть еще сюда и вот сюда.
Дополнительно можете посмотреть еще вот это.
Зайдите вот сюда.
Этапы задаются при помощи нескольких инструкций FROM.
Из одного этапа сборки в другой можно копировать артефакты при помощи COPY --from=.
FROM <образ> AS builder
. . .
FROM <образ>
. . .
COPY --from=builder <путь_в_сборке_builder> <путь_в_текущей_сборке>
. . .
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 — остановить и удалить контейнеры и сеть (ссылка)
Загляните вот сюда
build — собираем образ, на основе которого поднимем сервис (ссылка)
image — образ, на основе которого поднимем сервис (ссылка)
container_name — название контейнера в сервисе (ссылка)
volumes — список вольюмов для сервиса (ссылка)
environment — переменные окружения в сервисе (ссылка)
networks — список сетей, к которым нужно подуключить сервис (ссылка)
ports — список портов, которые нужно прокинуть у сервиса (ссылка)
restart — указываем поведение сервиса при падении (ссылка)
deploy/replicas — указываем количество контейнеров у сервиса (ссылка, ссылка)
depends_on — определяем зависимость между сервисами (ссылка)
healthcheck — задаем проверку для сервиса (ссылка)