Files
serti-docs/docs/docs/docker/commands.md
T

281 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Команды 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