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

Docker run rm v что за команды

  • автор:

Docker совет №38: Топ-10 опций команды docker run

Sep 13, 2018 07:02 · 358 words · 2 minute read docker

Консольная команда docker run имеет около сотни опций, в том числе -d , -i , -t , -v и -w . В данной статье рассмотрим десять наиболее популярных опций, с которыми наверняка придется работать. Давайте разберемся!

Пример команды с опциями, которые будут рассмотрены в данной статье:

docker run \  --rm \  --detach \  --env KEY=VALUE \  --ip 10.10.9.75 \  --publish 3000:3000 \  --volume my_volume \  --name my_container \  --tty --interactive \  --volume /my_volume \  --workdir /app \  IMAGE bash 

Начнем с азов. Консольная команда docker run создает из docker-образа контейнер (точнее создает доступный для записи слой поверх слоев, содержащихся в docker-образе) и запускает его (выполняет указанную команду). В общем виде это выглядит так:

docker run [OPTIONS] IMAGE [COMMAND] [ARG. ] 

Команда docker run очень похожа на комбинацию команд docker create . и docker start . , подробнее о которых можно узнать в официальной документации.

Топ-10 опций команды docker run в алфавитном порядке.

  1. —detach , -d — по умолчанию, docker-контейнер запускается присоединенным (attached) к стандартным потокам ввода-вывода. Параметр -d , —detach позволяет запускать контейнер в фоне и не выводить на экран содержимое потоков ввода-вывода.
  2. —entrypoint — устанавливает или переопределяет используемую по умолчанию команду (и параметры) из docker-образа. Подробнее о Docker ENTRYPOINT можно узнать здесь.
  3. —env , -e — устанавливает переменные окружения в формате пар КЛЮЧ=ЗНАЧЕНИЕ. Если у вас есть список переменных окружения в файле, тогда необходимо использовать опцию —env-file .
  4. —ip — назначает docker-контейнеру IP-адрес, например, —ip=10.10.9.75 .
  5. —name — назначает docker-контейнеру имя ( —name my-super-container ).
  6. —publish , -p или —publish-all , -P — сопоставляет порт(ы) docker-контейнера порту(ам) на хост системе. Стоит отметить, что —publish-all откроет доступ к портам, описанным в Dockerfile с помощью директивы EXPOSE.
  7. —rm — автоматически удалить контейнер после завершения его работы (в том числе, при завершении с ошибкой).
  8. —tty , -t — назначает псевдо-TTY, подключенный к STDIN контейнера. Зачастую используется с опцией —interactive , -i — например, если вам нужно подключиться к оболочке (bash) внутри docker-контейнера для выполнения каких-то действий.
  9. —volume , -v — монтирование тома. Подробнее о томах можно почитать здесь.
  10. —workdir , -w — устанавливает рабочую директорию внутри docker-контейнера. Например, если вы скопировали некие файлы в папку app контейнера, то вполне разумно будет установить этот каталог в качестве рабочей директории.

Больше полезных опций команды docker run можно найти в официальной документации.

Read more

© Copyright 2023 Yevhen Lebid

Docker — Полный курс Docker Для Начинающих [3 ЧАСА]

docker info — Информация обо всём в установленном Docker
docker history — История образа
docker tag — Дать тег образу локально или в registry
docker login — Залогиниться в registry
docker search — Поиск образа в registry
docker pull — Загрузить образ из Registry себе на хост
docker push — Отправить локальный образ в registry

Управления контейнерами

docker ps -а — Посмотреть все контейнеры

docker start container-name — Запустить контейнер

docker run container-name — создает новый контейнер и сразу включает его. (подробнее отдельно)

docker kill/stop container-name — Убить (SIGKILL) /Остановить (SIGTERM) контейнер

docker logs —tail 100 container-name — Вывести логи контейнера, последние 100 строк

docker inspect container-name — Вся инфа о контейнере + IP

docker rm container-name — Удалить контейнер (поле каждой сборки Dockerfile)

docker rm -f $(docker ps -aq) — Удалить все запущенные и остановленные контейнеры

docker events container-name

docker port container-name — Показать публичный порт контейнера

docker top container-name — Отобразить процессы в контейнере

docker stats container-name — Статистика использования ресурсов в контейнере

docker diff container-name — Изменения в ФС контейнера

docker build -t my_app . — Билд контейнера в текущей папке, Скачивает все слои для запуска образа

docker images / docker image ls — Показать все образы в системе

docker image rm / docker rmi image — Удалить image

docker commit lepkov/debian11slim:version3- Создает образ из контейнера

docker insert URL — вставляет файл из URL в контейнер

docker save -o backup.tar — Сохранить образ в backup.tar в STDOUT с тегами, версиями, слоями

docker load — Загрузить образ в .tar в STDIN с тегами, версиями, слоями

docker import — Создать образ из .tar

docker image history —no-trunc — Посмотреть историю слоёв образа

docker system prune -f — Удалит все, кроме используемого (лучше не использовать на проде, ещё кстати из-за старого кеша может собираться cтарая версия контейнера)

Подробнее «docker run»

Синтаксис следующий: docker run [опции] название образа [команды][аргументы].

docker run -d -p 80:80 -p 22:22 debian:11.1-slim sleep infinity (—rm удалит после закрытия контейнера, —restart unless-stopped добавит автозапуск контейнера) — Запуск контейнера интерактивно или как демона/detached (-d), Порты: слева хостовая система, справа в контейнере, пробрасывается сразу 2 порта 80 и 22, используется легкий образ Debian 11 и команда бесконечный сон

docker update —restart unless-stopped redis — добавит к контейнеру правило перезапускаться при закрытии, за исключением команды стоп, автозапуск по-сути

docker exec -it container-name /bin/bash (ash для alpine) — Интерактивно подключиться к контейнеру для управления, exit чтобы выйти

docker attach container-name — Подключиться к контейнеру чтоб мониторить ошибки логи в реалтайме

Управления разделами (Volumes)

docker cp file :/ — Скопировать в корень контейнера file

docker cp :/file . — Скопировать file из корня контейнера в текущую директорию командной строки

docker volume create todo-db — Создать volume для постоянного хранения файлов

docker run -dp 3000:3000 —name=dev -v todo-db:/etc/todos container-name — Добавить named volumу todo-db к контейнеру (они ok когда мы не заморачиваемся где конкретно хранить данные)

docker run -dp 3000:3000 —name=dev —mount source=todo-db,target=/etc/todos container-name — тоже самое что команда сверху

docker volume ls — Отобразить список всех volume’ов

docker volume inspect — Инспекция volume’ов

docker volume rm — Удалить volume

Управления сетью (Network)

docker network create todo-app — Создать сеть

docker network rm — Удалить сеть
docker network ls — Отразить все сеть
docker network inspect — Вся информация о сети
docker network connect — Соединиться с сетью
docker network disconnect — Отсоединиться от сети

Пример 1: Hello world

Настало время запустить ваш первый контейнер:

docker run ubuntu /bin/echo 'Hello world'
Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu d54efb8db41d: Pull complete f8b845f45a87: Pull complete e8db7bf7c39f: Pull complete 9654c40e9079: Pull complete 6d9ef359eaaa: Pull complete Digest: sha256:dd7808d8792c9841d0b460122f1acf0a2dd1f56404f8d1e56298048885e45535 Status: Downloaded newer image for ubuntu:latest Hello world

docker run — команда, запускающая контейнер.
ubuntu — образ, который вы запускаете, например, образ ОС Ubuntu. Когда вы определяете его, Docker начинает поиск на Docker-хосте. Если образ не существует локально, тогда он будет вытянут из общественного реестра — Docker Hub.
/bin/echo ‘Hello world’ — команда, которая будет запущена внутри нового контейнера. Данный контейнер просто выведет «Hello world» и остановит выполнение.

Давайте попробуем создать интерактивную оболочку внутри Docker-контейнера:

docker run -i -t –rm ubuntu /bin/bash

— t — флаг, добавляющий псевдотерминал внутри нового контейнера.
-i — флаг, который позволяет установить интерактивное соединение, взяв стандартный ввод (STDIN) контейнера.
-rm — флаг, автоматически удаляющий контейнер после завершения процесса. По умолчанию контейнеры не удаляются. Этот контейнер существует, пока установлена текущая сессия оболочки, и уничтожается, когда мы покидаем сессию (например, SSH-сессию с удаленным сервером).

Если вы хотите оставить контейнер работающим после завершения сессии, превратите его в демон-процесс:

docker run –name daemon ubuntu /bin/sh c «while true; do echo hello world; sleep 1; done»

—name daemon — устанавливает имя демона для нового контейнера. Если вы не определите имя, то Docker сгенерирует и присвоит его автоматически.
-d — флаг запускает контейнер в фоновом режиме (демонизирует его).

Давайте взглянем, какие контейнеры у нас есть на текущий момент:

docker ps -a

Вывод консоли:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1fc8cee64ec2 ubuntu "/bin/sh -c 'while. " 32 seconds ago Up 30 seconds daemon c006f1a02edf ubuntu "/bin/echo 'Hello . " About a minute ago Exited (0) About a minute ago gifted_nobel

docker ps — команда для вывода списка контейнеров.
-a — флаг, который показывает все контейнеры (без этого флага ps выведет только работающие контейнеры).

Команда ps показала, что у нас всего два контейнера:

gifted_nobel (имя для этого контейнера сгенерировано автоматически, оно будет другим на вашем компьютере) — это первый контейнер, который мы создали, выводит один раз «Hello world».
daemon — это третий контейнер, который мы создали, работает как фоновый процесс.

Замечание : здесь нет второго контейнера (с интерактивной оболочкой), потому что мы установили флаг —rm . Как следствие, этот контейнер автоматически удалился сразу после выполнения.

Давайте проверим логи и посмотрим, что фоновый контейнер делает прямо сейчас:

docker logs -f daemon

Вывод консоли:

. . . hello world hello world hello world

docker logs — объединяет логи контейнера.
-f — флаг для слежения за выводом логов (работает так же, как tail -f ).

Теперь остановим фоновый контейнер:

docker stop daemon

Удостоверимся, что контейнер остановился:

docker ps -a

Вывод консоли:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1fc8cee64ec2 ubuntu "/bin/sh -c 'while. " 5 minutes ago Exited (137) 5 seconds ago daemon c006f1a02edf ubuntu "/bin/echo 'Hello . " 6 minutes ago Exited (0) 6 minutes ago gifted_nobel

Контейнер остановился. Мы можем запустить его заново:

docker start daemon

Удостоверимся, что он работает:

docker ps -a

Вывод консоли:

ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1fc8cee64ec2 ubuntu "/bin/sh -c 'while. " 5 minutes ago Up 3 seconds daemon c006f1a02edf ubuntu "/bin/echo 'Hello . " 6 minutes ago Exited (0) 7 minutes ago gifted_nobel

Теперь остановим его опять и удалим все контейнеры вручную:

docker stop daemon docker rm your first container name> docker rm daemon

Чтобы удалить все контейнеры, мы можем использовать следующую команду:

docker rm -f $(docker ps -aq)

docker rm — команда для удаления контейнера.
-f — флаг для rm , который останавливает контейнер, если он работает (принудительное удаление).
-q — флаг для ps , который выводит только ID контейнеров.

Пример 2: Nginx

Настало время создать и запустить более полезный контейнер типа Nginx.

Сменим директорию на examples/nginx :

docker run -d --name test-nginx -p 80:80 -v $(pwd):/usr/share/nginx/html:ro nginx:latest
Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 693502eb7dfb: Pull complete 6decb850d2bc: Pull complete c3e19f087ed6: Pull complete Digest: sha256:52a189e49c0c797cfc5cbfe578c68c225d160fb13a42954144b29af3fe4fe335 Status: Downloaded newer image for nginx:latest 436a602273b0ca687c61cc843ab28163c720a1810b09005a36ea06f005b0c971

-p — преобразование портов HOST PORT:CONTAINER PORT .
-v — монтирование тома HOST DIRECTORY:CONTAINER DIRECTORY .

Важно : команда run принимает только абсолютные пути. В нашем примере мы использовали $(pwd) , чтобы установить абсолютный путь текущей директории.

Теперь вы можете открыть localhost в вашем браузере.

Или можно изменить /example/nginx/index.html (который смонтирован как том в /usr/share/nginx/html внутри контейнера) и обновить страницу.

Получим информацию о контейнере test-nginx :

docker inspect test-nginx

Эта команда показывает широкую системную информацию об установке Docker. Эта информация включает в себя версию ядра, количество контейнеров и образов, открытые порты, смонтированные тома и так далее.

Пример 3: написание Dockerfile

Чтобы создать Docker-образ, вам необходимо создать Dockerfile. Это просто текстовый файл с инструкциями и аргументами. Вот описание инструкций, которые мы будем использовать в нашем следующем примере:

FROM — устанавливает базовый образ.
RUN — выполняет команду в контейнере.
ENV — устанавливает переменную окружения.
WORKDIR — устанавливает рабочую директорию.
VOLUME — создает точку монтирования для тома.
CMD — устанавливает исполняемый файл для контейнера.

Вы можете просмотреть справку по Dockerfile , чтобы узнать больше подробностей.

Теперь создадим образ, который будет получать содержимое сайта с помощью curl и записывать его в текстовый файл. Нам надо передать URL сайта через переменную окружения SITE_URL . Результирующий файл будет помещен в директорию, смонтированную в качестве тома:

FROM ubuntu:latest RUN apt-get update RUN apt-get install --no-install-recommends --no-install-suggests -y curl ENV SITE_URL https://google.com/ WORKDIR /data VOLUME /data CMD sh -c "curl -L $SITE_URL > /data/results"

Dockerfile готов. Теперь настало время создать сам образ.

Перейдем в examples/curl и выполним следующую команду для создания образа:

docker build . -t test-curl

В ывод консоли:

Sending build context to Docker daemon 3.584 kB Step 1/7 : FROM ubuntu:latest ---> 0ef2e08ed3fa Step 2/7 : RUN apt-get update ---> Running in 4aa839bb46ec Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB] Get:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB] ... Fetched 24.9 MB in 4s (5208 kB/s) Reading package lists... ---> 35ac5017c794 Removing intermediate container 4aa839bb46ec Step 3/7 : RUN apt-get install --no-install-recommends --no-install-suggests -y curl ---> Running in 3ca9384ecf8d Reading package lists... Building dependency tree... Reading state information... The following additional packages will be installed... ---> f3c6d26b95e6 Removing intermediate container 3ca9384ecf8d Step 4/7 : ENV SITE_URL https://google.com/ ---> Running in 21b0022b260f ---> 9a733ee39a46 Removing intermediate container 21b0022b260f Step 5/7 : WORKDIR /data ---> c024301ddfb8 Removing intermediate container 3bc973e5584c Step 6/7 : VOLUME /data ---> Running in a9594a8958fe ---> 6802707a7114 Removing intermediate container a9594a8958fe Step 7/7 : CMD sh -c "curl -L $SITE_URL > /data/results" ---> Running in 37503bc4e386 ---> 5ebb2a65d771 Removing intermediate container 37503bc4e386 Successfully built 5ebb2a65d771

docker bulid — создает новый локальный образ.
-t — устанавливает именную метку для образа.

Теперь у нас есть новый образ, и мы можем посмотреть список существующих:

docker images

Вывод консоли:

REPOSITORY TAG IMAGE ID CREATED SIZE test-curl latest 5ebb2a65d771 37 minutes ago 180 MB nginx latest 6b914bbcb89e 7 days ago 182 MB ubuntu latest 0ef2e08ed3fa 8 days ago 130 MB

Мы можем создать и запустить контейнер из образа. Попробуем сделать это со стандартными параметрами:

docker run --rm -v $(pwd)/vol:/data/:rw test-curl

Чтобы увидеть результаты, сохраненные в файле, выполним команду:

cat ./vol/results

Попробуем с facebook.com:

docker run --rm -e SITE_URL=https://facebook.com/ -v $(pwd)/vol:/data/:rw test-curl

И снова посмотрим результаты:

cat ./vol/results

Пример 4: Разворачиваем PROXY / ZABBIX / AGENT в docker контейнере

Docker Compose — это инструмент, который позволяет определить и запустить несколько связанных контейнеров Docker как одно приложение. Он основан на файле конфигурации в формате YAML, который описывает различные сервисы, сети и объемы данных, необходимые для запуска и настройки контейнеров.
С помощью Docker Compose вы можете определить множество контейнеров, которые взаимодействуют друг с другом, и описать их конфигурацию в файле `docker-compose.yml`. В этом файле вы указываете образы Docker, сети, порты, переменные окружения, объемы и другие параметры для каждого сервиса, который хотите запустить.

Docker Compose позволяет вам определить зависимости между сервисами, настроить сетевое взаимодействие между контейнерами и упростить процесс развертывания и управления многоконтейнерными приложениями. Он также предоставляет команды для создания, запуска и остановки всех контейнеров, описанных в файле `docker-compose.yml`.

При использовании Docker Compose вы можете создавать и развертывать комплексные приложения, состоящие из нескольких сервисов, таких как веб-серверы, базы данных, кэш-серверы и другие. Это упрощает разработку, тестирование и развертывание приложений в среде Docker.

Данный пример представляет файл конфигурации Docker Compose (docker-compose-zabbix-proxy.yml) для развертывания двух сервисов: zabbix-proxy и zabbix-agent :

Создадим фаил docker-compose.yml:

Основные команды Docker, которые вам необходимо знать для эффективной работы

Docker — это популярная платформа, позволяющая разработчикам с легкостью управлять приложениями в изолированных окружениях. Платформа предоставляет мощные инструменты контейнеризации, что делает ее незаменимым инструментом в разработке современного программного обеспечения. Однако для ее эффективного использования необходимо знать основные команды, которые позволяют управлять контейнерами и их образами. В этой статье рассмотрим основные команды Docker, которые помогут вам начать работать с контейнерами.

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

Чтобы изучать команды Docker было удобнее, мы решили сделать несколько списков команд, разбив их на тематические группы. Вы узнаете, что делает определенная команда Docker, а затем будут приведены примеры кода для закрепления.

Команды для управления контейнерами

Создает и запускает контейнер из образа. Принимает различные параметры и аргументы, которые определяют настройки контейнера.

Запуск контейнера в фоновом режиме, проброс порта с хоста на контейнер и передача переменной окружения:

docker run -d -p 8080:80 -e ENV_VAR=value nginx

Запуск контейнера с ограничением ресурсов, в данном примере — количества оперативной памяти:

docker run --memory=2g myimage

Запускает остановленный контейнер. Позволяет возобновить выполнение контейнера, который был ранее остановлен.

Запуск одного остановленного контейнера:

docker start mycontainer
docker start first_container second_container third_container

Останавливает работающий контейнер. Позволяет завершить выполнение контейнера и отключить его.

Остановка одного работающего контейнера:

docker stop mycontainer
docker stop first_container second_container third_container

Остановка по времени (в данном примере — через 30 секунд):

docker stop -t 30 mycontainer

Перезапускает контейнер. Позволяет остановить контейнер и затем опять запустить.

Перезапуск одного контейнера:

docker restart mycontainer
docker restart first_container second_container third_container

Перезапуск через определенное время:

docker restart -t 30 mycontainer

Удаляет один или несколько контейнеров, которые уже остановлены. Позволяет очистить систему от не используемых контейнеров.

Удаление одного контейнера:

docker rm mycontainer
docker rm first_container second_container third_container

Принудительное удаление (позволяет удалить контейнер, который выполняется в данный момент):

docker rm -f mycontainer

Отображает список активных контейнеров в системе. Позволяет получить различную информацию о работающих контейнерах, включая их ID, имена, статус, порты, использование ресурсов.

Отображение списка только работающих контейнеров:

docker ps

Отображение списка всех (включая остановленные):

docker ps -a

Отображение размера занимаемого дискового пространства:

docker ps -s

Команды для управления образами

Загружает образы из удаленного репозитория Docker Hub. Позволяет получить доступ к готовым образам.

Загрузка последней версии Ubuntu:

docker pull ubuntu

Здесь ubuntu — это имя образа, но версия не указана, поэтому будет загружена последняя.

Загрузка определенной версии:

docker pull ubuntu:20.04

Нужна для сборки пользовательского образа Docker на основе Dockerfile. Dockerfile — это текстовый файл с инструкциями для сборки образа, включая базовый образ, установку зависимостей, копирование файлов.

Сборка образа из текущего каталога, используя Dockerfile в этом каталоге:

docker build -t myimage:latest .

Сборка образа из удаленного репозитория Git, который содержит Dockerfile:

docker build -t myimage:latest https://github.com/username/repo.git#branch

Загружает пользовательский образ в Docker Hub или другие хранилища образов. Позволяет делиться созданным образом с другими пользователями Docker.

Загрузка в репозиторий по умолчанию:

docker push username/myimage:1.0

Загрузка в другое хранилище (в данном примере — репозиторий ECR):

docker push myecr/myimage:latest

Удаляет образы с локального хоста. Позволяет освободить место, удалив не используемые или устаревшие образы.

Удаление одного образа:

docker rmi myimage:1.0
docker rmi myimage:1.0 myotherimage:latest

Выводит список образов, которые находятся на вашем локальном хосте. Она позволяет просматривать информацию о доступных образах: идентификаторы, размеры, теги и прочее.

Вывод всех образов:

docker images

Вывод образов по конкретному репозиторию:

docker images myrepository/myimage

Команды для управления хранилищами данных

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

Создание нового тома:

docker volume create myvolume

Создание с указанием драйвера:

docker volume create --driver local myvolume

Создание тома с добавлением меток:

docker volume create --label mylabel=myvalue myvolume

Используется для привязки тома к контейнеру при запуске. Позволяет контейнеру получить доступ к постоянному хранилищу данных, предоставляемому томом.

Привязка существующего тома:

docker run -v myvolume:/data myimage

Привязка тома с указанием дополнительных опций (например, read only ):

docker run -v myvolume:/data:ro myimage

Удаляет том с локального хоста. При удалении все данные, связанные с этим томом, будут потеряны, поэтому будьте осторожны.

Удаление одного тома:

docker volume rm myvolume
docker volume rm first_volume second_volume third_volume

Используется для вывода списка всех доступных томов на локальном хосте. Позволяет просмотреть существующие тома и получить информацию о них, в том числе имена и идентификаторы.

docker volume ls

Будет выведен список всех доступных томов на вашем локальном хосте. Результат будет содержать столбцы с информацией о каждом томе, включая их имена, идентификаторы и дополнительные сведения, если они есть. Пример вывода:

DRIVER VOLUME NAME
local myvolume1
local myvolume2

Команды Docker Compose

Docker Compose работает поверх Docker и позволяет управлять множеством контейнеров в рамках одного проекта. Давайте рассмотрим основные команды (принципы работы большинства из них вам уже знакомы):

  • docker-compose up — запускает приложение со всеми контейнеры, информация о которых есть в docker-compose.yml. Если файл не указан, по умолчанию используется файл в текущем каталоге;
  • docker-compose down — останавливает и удаляет все контейнеры, а также тома, связанные с ними;
  • docker-compose start — запускает остановленные контейнеры;
  • docker-compose stop — останавливает работу запущенных контейнеров без их удаления;
  • docker-compose restart — перезапускает контейнеры;
  • docker-compose build — позволяет обновить образы или создать их заново, если они были изменены;
  • docker-compose logs — выводит журналы состояния;
  • docker-compose ps — отображает текущее состояние контейнеров;
  • docker-compose pull — загружает последние версии образов для сервисов, описанных в файле docker-compose.yml.

Заключение

Мы рассмотрели основные команды Docker, которые позволяют управлять контейнерами и образами. Изучив эту платформу более глубоко, вы убедитесь в том, что Docker предоставляет мощные возможности для разработки, тестирования и развертывания приложений, обеспечивая эффективное использование ресурсов и изоляцию приложений. Желаем успехов!

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

Рассмотрим основные команды для работы Docker, а также приведём несколько примеров.

Детальная официальная документация Docker: https://docs.docker.com/

В Windows для ввода команд используйте «Командную строку» (cmd.exe)

В лучших традициях Linux каждая команда Docker имеет встроенную документацию для этого добавьте —help

# Например, документация для команды images docker images --help

1. Общие команды

  • docker version — показывает техническую информацию о Docker
  • docker login — авторизует пользователя в реестре Docker
  • docker system prune — выполняет очистку, удаляя из системы неиспользуемые контейнеры, ненужные сети и образы без имен и меток

2. Команды для управления образами

(Docker Image) — неизменяемая, изолированная файловая система. Содержит всё необходимое для запуска приложения — все зависимости, конфигурации, сценарии, двоичные файлы и т. д. Образ также содержит конфигурацию контейнера: переменные среды, команды по умолчанию для запуска, и другие метаданные.

  • build — собирает образ с нуля
  • push — отправляет образ в реестр
  • pull — загружает готовый образ с необходимыми для работы параметрами
  • images — списком показывает все образы Docker на диске
  • ls — показывает все существующие образы
  • history — показывает каждый слой образа в ретроспективе, отображая некоторые полезные сведения
  • inspect — рассказывает всё, что известно об образе, включая данные, касающиеся отдельных слоев
  • rm — удаляет образ Docker из системы
# Синтаксис docker image %команда% # Вывести список всех образов docker images

3. Команды для управления контейнерами

(Docker Container) — это исполняемый экземпляр запущенного образа. Можно создать, запустить, остановить, переместить или удалить контейнер с помощью DockerAPI или CLI. Контейнер можно запускать на локальных машинах, виртуальных машинах или развертывать в облаке. Контейнер может работать на любой ОС. Контейнер изолирован от других контейнеров и запускает собственное программное обеспечение, двоичные файлы и конфигурации.

  • create — создает контейнер из выбранного образа
  • start — активирует уже существующий контейнер
  • run — создает новый контейнер и сразу включает его
  • ls — отображает все существующие контейнеры
  • inspect — подробнее рассказывает о выбранном контейнере
  • logs — выводит в консоль логи (журнал событий)
  • pause — приостанавливает все запущенные процессы внутри контейнера
  • stop — пытается остановить выбранный контейнер, отправив ему сигнал SIGTERM, требующий завершить всю активность и сохранить пользовательские данные. Если ответ занимает слишком много времени, то следом посылает сигнал SIGKILL, чтобы «убить» процесс без сохранения данных
  • kill — выполняет ту же задачу, что и предыдущая команда, но пропускает шаг с отправкой SIGTERM. Сразу выключает контейнер, игнорируя сохранение пользовательских данных
  • rm — удаляет выбранный контейнер (он должен быть выключен, чтобы команда сработала)
# Синтаксис docker container %команда% # Выводит список запущенных контейнеров docker ps # Выводит список всех контейнеров docker ps -a # Выводит список id всех контейнеров docker ps -a -q # Запуск существующего контейнера docker start %container-id% # Выполнить команду внутри запущенного контейнера docker exec -it %container-id% /bin/bash # Остановка существующего контейнера docker stop %container-id% # Удаление существующего контейнера docker rm %container-id%

4. Команды для управления томами

(Docker Volumes) — способ хранения данных, представляющий собой примонтированный каталог хоста к файловой системе контейнера.

Контейнеры могут создавать, обновлять и удалять файлы, но эти изменения теряются при удалении контейнера, и все изменения изолируются в этом контейнере. С помощью томов это можно изменить. Тома предоставляют возможность подключать определенные пути файловой системы контейнера обратно к хост-компьютеру. Если каталог в контейнере смонтирован, то изменения в этом каталоге также видны на хост-компьютере. Если мы смонтируем один и тот же каталог при перезапуске контейнера, мы увидим одни и те же файлы.

# Создать том с именем user-data без контейнера docker volume create --name user-data # Вывести список томов docker volume ls # Вывести детальную информацию по имени тома docker inspect user-data # Запустить контейнер ubuntu и подключить созданный том -v docker run --rm -v user-data:/data -it ubuntu:22.04 /bin/bash # Записать случайное число в файл echo $RANDOM > /data/test # Прочитать файл cat /data/test # В нашем примере это число 12415 # Теперь нужно запустить любой другой контейнер и подключить тот же том user-data # Например запустим centos v.8 и попробуем прочитать содержимое того же файла из тома user-data docker run --rm -v slurm-storage:/data -it centos:8 /bin/bash -c "cat /data/test" # Получим тот же результат. Задача выполнена - данные были сохранены в томе. 12415

5. Команды для работы портами

Docker запускает сервис изолированно — все порты между хостом и контейнером закрыты. Для доступа к сервису нужно указать сопоставление портов или создать маппинг. Тогда все запросы, проходящие через указанный порт хоста, будут перенаправляться в контейнер. Сопоставление портов делает сервисы контейнера доступными извне.

Для примера поднимем сервер и сделаем его доступным в основной ОС через порт 8082.

# 0. Создать каталог и перейти в него mkdir apache cd apache # 1. Создать файл Dockerfile с содержимым FROM php:7.4-apache WORKDIR /var/www/html COPY . /var/www/html # разрешить подключение к 80 порту контейнера EXPOSE 80 # 2. Создать файл index.php с содержимым printf("Текущее время: %s
", date('H:i:s', time() ) ); # 3. Создать docker build . --tag apache # 4. Запустить контейнер с указанием порта хоста и контейнера docker run --rm -p 8082:80 apache # 5. Перейти в браузере по адресу http://localhost:8082 # Вывод будет примерно таким > Текущее время: 09:02:04 # 6. Найти id контейнера и остановить docker ps docker stop %container-id%

6. Команды Docker-Compose

— это инструмент в составе Docker, который позволяет запускать несколько контейнеров одновременно и маршрутизировать потоки данных между ними. Написан на Python.

При работе в Compose используется конфигурационный файл YAML. Создание и запуск всех служб производится выполнением одной команды.

Для примера поднимем сервер и сделаем редактирование файлов на лету, без ребилда. В конфигурационном файле для Compose укажем 2 сервиса: app и mysql. При этом для сервиса app укажем зависимость (depends_on) от сервиса mysql.

# 0. Создать каталог и перейти в него mkdir apache2 cd apache2 # 1. Создать файл Dockerfile с содержимым FROM php:7.4-apache # указываем рабочий каталог WORKDIR /var/www/html # запускаем обновление по и установку wget RUN apt-get update # запускаем установку расширений php для работы с бд RUN docker-php-ext-install pdo pdo_mysql mysqli EXPOSE 80 # 2. Создать файл index.php с содержимым # Выводим текущее время, # а также подключаемся в базе данных и выводим её версию printf("Текущее время: %s\n", date('H:i:s', time() ) ); $mysqli = new mysqli("mysql", "app", "secret", "db"); if( mysqli_connect_errno() ) < printf("Не удалось подключиться к mysql: %s
", mysqli_connect_error()); exit(); > printf("Версия mysql сервера: %d
", $mysqli->server_version); # 3. Создать файл docker-compose.yml с содержимым # В примере запускается только два сервиса app и mysql, # на практике файлы конфигурации, конечно, содержат множество сервисов # Указываем, что монтируется текущий каталог ОС. Это позволит вносить изменения без перестроения/ребилда. services: app: container_name: php-server build: context: . ports: - 8082:80 volumes: - .:/var/www/html depends_on: - mysql mysql: image: mysql:8 container_name: mysql-server-8 command: --default-authentication-plugin=mysql_native_password volumes: - .:/application restart: "always" environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: db MYSQL_USER: app MYSQL_PASSWORD: secret ports: - "33099:3306" # 4. Парсинг конфига YML и создание сервисов docker-compose build # 5. Запуск сервисов docker-compose up # 6. Перейти в браузере по адресу http://localhost:8082 # При изменении файлов в примонтированном каталоге основной ОС , # изменения будут сразу применяться в контейнере # Вывод будет примерно таким > Текущее время: 09:33:41 > Версия mysql сервера: 80031

Пример получения образа и запуска контейнера:

# 1. Скачать с Dockerhub.com образ Ubuntu 22.04 docker pull ubuntu:22.04 # 2. Создать контейнер образа ubuntu:22.04, запустить его и выполнить команду echo # после выполнения команды контейнер завершает работу docker run ubuntu:22.04 echo 'hello from ubuntu v.22.04' # 3. Запуск контейнера с выполнением неограниченного количества команд # открыть консоль виртуальной ОС Ubuntu для выполнения команд docker run -it ubuntu:22.04 /bin/bash # 4. Запуск контейнера с монтированием локальной директории C:\Users\username\docker # в запущенной ubuntu будет доступна директория локальной ОС Windows docker run -it -v C:\Users\username\docker\app:/mounted ubuntu:22.04 /bin/bash # 5. Можно добавить флаг --rm # в таком случае контейнер будет удалён после завершения работы docker run -it --rm ubuntu:22.04 /bin/bash # 6. Если открыть новое окно cmd.exe, то команда ps отобразить список запущенных контейнеров docker ps # 7. Выход из контейнера exit

Пример сборки образа с помощью Dockerfile и запуска контейнера:

# 0. Перейти в каталог проекта cd /Users/username/docker/app # 1. Создать файл Dockerfile с содержимым FROM php:7.4-cli COPY board.php /board.php RUN chmod +x /board.php CMD php /board.php # 2. Создать файл board.php с содержимым $size = $argv[1] ?? 4; $board = ""; for( $y = 0; $y < $size; $y++) < for( $x = 0; $x < $size; $x++ ) < if( ( $x + $y ) % 2 == 0 ) < $board .= " "; >else < $board .= "#"; >> $board .= "\n"; > echo $board; # 3. Создание образа с названием kolotun из конфигурационного файла Dockerfile, # расположенного в текущей директории (.) docker build . --tag kolotun # 4. Запуск и удаление после выполнения docker run --rm kolotun # 5. Запуск для выполнения команды ls (просмотра списка файлов) docker run --rm kolotun ls # 6. Запуск с параметром для скрипта docker run --rm kolotun php board.php 10 # 7. Альтернативный файл Dockerfile FROM php:7.4-cli COPY board.php /board.php RUN chmod +x /board.php ENTRYPOINT ["php", "/board.php"] CMD ["4"] # 8. Пересобираем образом с новым конфигом docker build . --tag kolotun # 9. Запуск с параметром для контейнера docker run --rm kolotun 10

Сервер Docker 13.12.2022 up: 11.08.2023 Просмотров: 3.1k
Оценить код:

Код был обновлён. Предыдущий рейтинг:

  • Бесполезный код — 0 голосов
  • Костыль — 0 голосов
  • Полезный код — 2 голоса

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *