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