# Команды Docker ## Введение Рассмотрим команды, которые необходимо знать для использования Docker. Список базовых команд: - Справочная страница: ```bash docker help ``` - Версия Dсocker: ```bash docker version ``` - Базовая информация о работе Docker: ```bash docker info ``` ## Поиск образов Поиск можно осуществлять на [сайте образов docker](https://hub.Docker.com/), но иногда можно искать и с помощью команд. **Почему это полезно?** Мы быстрее получим необходимый список и сможем выбрать нужный Docker. **Обычный поиск:** ```bash docker search wordpress ``` ???info "Пример резульата" ``` NAME DESCRIPTION STARS OFFICIAL wordpress The WordPress rich content management system… 5855 [OK] bitnami/wordpress Bitnami Secure Image for wordpress 281 bitnamicharts/wordpress Bitnami Helm chart for WordPress 2 elestio/wordpress Wordpress, verified and packaged by Elestio 6 secoresearch/wordpress Apache+PHP+Varnish+Wordpress 0 shinsenter/wordpress 🔋 (PHP / Wordpress) Production-ready Docker… 5 vulhub/wordpress 4 chainguard/wordpress Build, ship and run secure software with Cha… 0 corpusops/wordpress https://github.com/corpusops/docker-images/ 0 rootpublic/wordpress 0 centurylink/wordpress Wordpress image with MySQL removed. 14 erikzenker/wordpress wordpress docker image 0 arm64v8/wordpress The WordPress rich content management system… 21 arm32v7/wordpress The WordPress rich content management system… 16 tutum/wordpress Out-of-the-box Wordpress docker image 42 amd64/wordpress The WordPress rich content management system… 2 demyx/wordpress Non-root Docker image running Alpine Linux, … 2 i386/wordpress The WordPress rich content management system… 1 ppc64le/wordpress The WordPress rich content management system… 1 wodby/wordpress Vanilla WordPress container image 2 itherz/wordpress Wordpress 0 s390x/wordpress The WordPress rich content management system… 5 spatialy/wordpress Wordpress + PHP Extensions 0 arm32v5/wordpress The WordPress rich content management system… 0 mips64le/wordpress The WordPress rich content management system… 1 ``` Здесь мы получаем список из 4 столбцов: - **NAME** Имя - **DESCRIPTION** Описание - **STARS** Звезды, которые отображат популярность образов - **OFFICIAL** Помечаються оффициальные образы **Аргументы:** - `-f` (`--filter`) Фильтрует результат. - `-f stars=3` больше 3 звезд - `-f is-offical=true` только оффициальные - `--format` Преобразование вывода - `--format "{{.Name}}"` Имя образа - `--format {{.StarCount}}` Кол-во звезд - `--format {{.Description}}` Описание - `--format {{.IsOffical}}` официальный образ - `--limit` Ограничивает список до определенного количества - `--limit 5` Выводит 5 образов - `--no-trunc` Не сокращенный вариант описания **Поиск с аргументами:** ```bash docker search --limit 5 --format "{{.Name}}: {{.Description}}" --no-trunc wordpress ``` ???info "Пример результата" ``` wordpress: The WordPress rich content management system can utilize plugins, widgets, and themes. bitnami/wordpress: Bitnami Secure Image for wordpress bitnamicharts/wordpress: Bitnami Helm chart for WordPress elestio/wordpress: Wordpress, verified and packaged by Elestio secoresearch/wordpress: Apache+PHP+Varnish+Wordpress ``` ## Установка образа Теперь попробуем установить образ **nginx**. **Установка образа:** ```bash docker pull nginx ``` ???info "Пример вывода" ``` Using default tag: latest latest: Pulling from library/nginx 02d7611c4eae: Pull complete dcea87ab9c4a: Pull complete 35df28ad1026: Pull complete 99ae2d6d05ef: Pull complete a2b008488679: Pull complete d03ca78f31fe: Pull complete d6799cf0ce70: Pull complete Digest: sha256:ca871a86d45a3ec6864dc45f014b11fe626145569ef0e74deaffc95a3b15b430 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest ``` Смотря от загрузки сети, через некоторое время, у нас получиться установить **nginx**. !!!note "Обратите внимание" Оффициальный поставщик образов **Docker** имеет имя **library**. Когда мы устанавливаем оффициальные образа, можно не указывать поставщика. **Установка определенной версии:** ```bash docker pull nginx:1.29-trixie ``` Под версии в Docker подразумеваются **Tags**. Теги просматриваются на сайте [hub.docker.com](https://hub.docker.com). В нашем случае это [данный образ](https://hub.docker.com/_/nginx/tags/). К сожалению, с помощью команды **docker** нельзя просмотреть список версий. Можно с помощью api или, как было написанно выше - на сайте. | ![image](../../media/hub.docker.com-nginx-tags.png) | | :--------: | | Теги Nginx | ## Просмотр установленных образов После устанвки, можно посмотреть какие образы у нас установлены: ```bash docker images ``` ???info "Пример вывода" ``` REPOSITORY TAG IMAGE ID CREATED SIZE ... nginx latest 058f4935d1cb 10 days ago 152MB ... ``` Мы получим пять колонок: - **REPOSITORY** имя образа (репозитория). Обычно пишеться `имя поставщика/образ` - **TAG** версия (тег) изображения - **IMAGE ID** ID изображения - **CREATED** Когда данный образ обновлялся - **SIZE** Размер образа ## Запуск контейнера Запуск происходит достаточно простым способом. Попробуем запустить контейнер nginx, который только что установили. ```bash docker run nginx ``` Веб сервис nginx запуститься и отобразит логи. ???info "Пример логов" ``` /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2026/01/14 14:30:15 [notice] 1#1: using the "epoll" event method 2026/01/14 14:30:15 [notice] 1#1: nginx/1.29.4 2026/01/14 14:30:15 [notice] 1#1: built by gcc 14.2.0 (Debian 14.2.0-19) 2026/01/14 14:30:15 [notice] 1#1: OS: Linux 6.1.0-27-amd64 2026/01/14 14:30:15 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2026/01/14 14:30:15 [notice] 1#1: start worker processes 2026/01/14 14:30:15 [notice] 1#1: start worker process 30 2026/01/14 14:30:15 [notice] 1#1: start worker process 31 2026/01/14 14:30:15 [notice] 1#1: start worker process 32 2026/01/14 14:30:15 [notice] 1#1: start worker process 33 2026/01/14 14:30:15 [notice] 1#1: start worker process 34 2026/01/14 14:30:15 [notice] 1#1: start worker process 35 2026/01/14 14:30:15 [notice] 1#1: start worker process 36 2026/01/14 14:30:15 [notice] 1#1: start worker process 37 2026/01/14 14:30:15 [notice] 1#1: start worker process 38 2026/01/14 14:30:15 [notice] 1#1: start worker process 39 2026/01/14 14:30:15 [notice] 1#1: start worker process 40 2026/01/14 14:30:15 [notice] 1#1: start worker process 41 2026/01/14 14:30:15 [notice] 1#1: start worker process 42 2026/01/14 14:30:15 [notice] 1#1: start worker process 43 2026/01/14 14:30:15 [notice] 1#1: start worker process 44 2026/01/14 14:30:15 [notice] 1#1: start worker process 45 ``` Но зайти на стандартную страницу по порту 80, вероятнее вссего не получиться. ### Проброс портов Попробуем пробросить HTTP порт 80. ```bash docker run -p 80:80 nginx ``` - `-p 80:80` - `[HOST]:[CONTAINER]` - проброс порта на машину хоста. - Тем же самым можно пробросить на другие порты хоста `81:80`, `8080:80` и так далее. Это помогает избежать конфликтов, когда запущено несколько портов и они используют одни и те же порты. Теперь, когда перейдем на адрес машины, то мы получим страницу по умолчанию: - [http://localhost](http://localhost) - кто поднимает контейнеры на основной машине или пробрасывает порты. - `http://[адрес хоста с активным контейнером]` - прямой доступ с удаленной машины. ???warning "Информация для тех, которые поднимают первый раз сайты" Браузер может запросить о подтверждения входа. Это из-за того, что используеться http протокол, а не https. Принимаем риски. ???info "Стартовая страница nginx" ![Docker nginx title web site](../../media/docker-run-nginx-title-web-site.png) ### Монтирование каталога Однозначно, если мы говорим про nginx, нам нужен прямой доступ к `/usr/share/nginx/html`, да бы иметь доступ к исходному сайту. ```bash docker run -p 80:80 -v /mnt/nginx:/usr/share/nginx/html:ro nginx ``` - `-v /mnt/nginx:/usr/share/nginx/html:ro` - `[HOST]:[CONTAINER]:[PERMISSION]` - подключение каталога контейнера к машине с правами только для четения. - `ro` - только для четения не для контейнера, а для самого контейнера. - Это полезно, когда нужно что бы процесс в контейнере случайно не изменил сруктуру сайта. - Если не нужно прописывать такие обраничения, то не устанавливаем данный параметр и простовводим `-v /mnt/nginx:/usr/share/nginx/html` - Каталог автоматически создасться, если отсутствует. !!!warning "Смотрите оф документацию по настройке NGINX" Это пример использования команд docker. Читайте настройку. ### Фоновый запуск Контейнер уже готов для постоянного использования. Попробуем запустить в демоне. ```bash docker run -p 80:80 -v /mnt/nginx:/usr/share/nginx/html:ro -d nginx ``` - `-d` - Процесс будет запущен в фоне. ## Просмотр рабочих контейнеров Да бы проверить, какие контейнеры работают на данный момент, прописываем данную команду: ```bash docker ps ``` --- **📌 Документ в разработке.** Следующие разделы в работе: - Управление контейнерами (`exec`, `logs`, `ps`, `stop`, `rm`) - Работа с томами (Volumes) - Сети Docker