281 lines
14 KiB
Markdown
281 lines
14 KiB
Markdown
# Команды 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 или, как было написанно выше - на сайте.
|
||
|
||
|  |
|
||
| :--------: |
|
||
| Теги 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"
|
||

|
||
|
||
### Монтирование каталога
|
||
|
||
Однозначно, если мы говорим про 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
|