Основи роботи з Docker

Команда docker run

Використовується для створення і запуску контейнерів з Docker-образів

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

Де:

  • OPTIONS: параметри для налаштування контейнера (наприклад, порти, томи, змінні оточення).
  • IMAGE: назва образу, на основі якого буде створено контейнер.
  • COMMAND: команда, яка буде виконуватись всередині контейнера.
  • ARG...: аргументи для команди.

Запуск контейнера у фоновому режимі (-d) і призначення імені контейнеру (--name)

docker run -d --name my_nginx nginx

Команда docker start

Запускає раніше зупинені контейнери.

docker start [OPTIONS] CONTAINER [CONTAINER...]
docker start my_container
docker start container1 container2

Де:

  • CONTAINER: ім'я або ідентифікатор контейнера, який ви хочете запустити.

Команда docker stop

Використовується для зупинки працюючих контейнерів

docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker stop my_container
docker stop container1 container2
docker stop -t 30 my_container

Де:

  • CONTAINER: ім'я або ідентифікатор контейнера, який ви хочете зупинити
  • -t або --time: задає тайм-аут у секундах перед примусовою зупинкою контейнера (за замовчуванням 10 секунд).

Команда docker restart

Використовується для перезапуску контейнерів.

docker restart [OPTIONS] CONTAINER [CONTAINER...]
docker restart my_container
docker restart container1 container2
docker restart -t 20 my_container

Де:

  • CONTAINER: ім'я або ідентифікатор контейнера, який ти хочеш перезапустити.
  • -t або --time: задає тайм-аут у секундах перед перезапуском контейнера (за замовчуванням 10 секунд).

Команда docker rm

Використовується для видалення зупинених контейнерів

 

Основи команди docker ps

Відображає список працюючих контейнерів та надає інформацію про них.

docker ps [OPTIONS]

Де:

  • OPTIONS: додаткові параметри для фільтрації та форматування виводу.

Виведе список усіх запущених контейнерів

docker ps

Вивід буде включати наступні поля:

  • CONTAINER ID: унікальний ідентифікатор контейнера.
  • IMAGE: образ, з якого був створений контейнер.
  • COMMAND: команда, яка виконується в контейнері.
  • CREATED: час, що минув з моменту створення контейнера.
  • STATUS: поточний стан контейнера (наприклад, Up 5 minutes).
  • PORTS: перенаправлені порти.
  • NAMES: ім'я контейнера.

Список усіх контейнерів

docker ps -a

Фільтрація виводу

Фільтрація за статусом status=exited

Фільтрація за ім'ям name=my_container

Фільтрація за образом ancestor=nginx

Відображення контейнерів, запущених за останні 24 години since=24h

docker ps -f "status=exited"
docker ps -f "name=my_container"
docker ps -f "ancestor=nginx"
docker ps --filter "since=24h"

Форматування виводу

docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"

Доступні стовпці таблиці

  • {{.ID}}: ідентифікатор контейнера.
  • {{.Image}}: образ контейнера.
  • {{.Command}}: команда, яка виконується у контейнері.
  • {{.CreatedAt}}: час створення контейнера.
  • {{.RunningFor}}: час роботи контейнера.
  • {{.Status}}: поточний стан контейнера.
  • {{.Ports}}: перенаправлені порти.
  • {{.Names}}: ім’я контейнера.

Відображення лише ідентифікаторів контейнерів

docker ps -q

 

Основи команди docker logs

Виводить логи вказаного контейнера

docker logs [OPTIONS] CONTAINER

Де:

  • CONTAINER: ім'я або ідентифікатор контейнера, чиї логи ви хочете переглянути.
  • OPTIONS: додаткові параметри для налаштування виводу логів.

Виведеня всі накопичені логи контейнера my_container.

docker logs my_container

Перегляд логів в реальному часі

docker logs -f my_container

Обмеження кількості виведених рядків

docker logs --tail 100 my_container

Вивід логів з визначеного часу

docker logs --since "2023-07-20T15:00:00" my_container
АБО
docker logs --since 1h my_container

Вивід логів до визначеного часу

docker logs --until "2023-07-20T16:00:00" my_container
АБО
docker logs --until 10m my_container

Об'єднання stdout і stderr

За замовчуванням команда docker logs виводить як стандартний потік виводу (stdout), так і стандартний потік помилок (stderr). Ви можете вказати, які потоки виводити, використовуючи параметри --stdout і --stderr

docker logs --stdout my_container

 

Основи команди docker exec

Використовується для виконання команд у запущеному контейнері

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Де:

  • CONTAINER: ім'я або ідентифікатор контейнера, у який ви хочете зайти.
  • COMMAND: команда, яку ви хочете виконати всередині контейнера.
  • ARG...: аргументи для команди.

Приклад базового використання

Цей приклад виконає команду ls /app всередині контейнера my_container, що дозволить побачити вміст директорії /app у контейнері.

docker exec my_container ls /app

Відкриття інтерактивної сесії

Щоб почати інтерактивну сесію, використовуйте комбінацію опцій -i (interactive) і -t (pseudo-TTY).

docker exec -it my_container /bin/bash 

У цьому прикладі буде відкрито інтерактивний термінал Bash всередині контейнера my_container. Це дозволить виконувати команди в режимі реального часу.

2. Виконання команд у відриві

Якщо потрібно виконати команду в контейнері і не чекати її завершення, можна використовувати опцію -d (detached mode).

docker exec -d my_container touch /app/newfile.txt

У цьому прикладі команда створить порожній файл newfile.txt у директорії /app контейнера my_container. Контроль терміналу повертається одразу після виконання команди, не чекаючи її завершення.

3. Задання користувацького оточення

Ви можете передавати змінні оточення в контейнер за допомогою параметра -e.

docker exec -e MY_VAR=value my_container env

Цей приклад передасть змінну оточення MY_VAR у контейнер і запустить команду env, щоб показати всі змінні оточення всередині контейнера.

 

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

Ліміти на використання CPU

Обмеження частки CPU (--cpu-shares)

Параметр --cpu-shares задає відносне значення пріоритетності використання CPU контейнером. Значення за замовчуванням — 1024. Це відносне значення, що означає, що контейнер з --cpu-shares=512 матиме половину пріоритету контейнера з --cpu-shares=1024.

docker run -d --name low_priority_container --cpu-shares=512 nginx

docker run -d --name high_priority_container --cpu-shares=2048 nginx

Обмеження кількості CPU (--cpus)

Параметр --cpus задає точну кількість CPU, доступну для контейнера. Наприклад, значення 1.5 означає, що контейнер може використовувати 1.5 CPU

docker run -d --name limited_cpu_container --cpus="1.5" nginx

Обмеження використання CPU часу (--cpu-quota і --cpu-period)

Параметри --cpu-quota та --cpu-period дозволяють більш детально налаштувати використання CPU. --cpu-period задає інтервал часу в мікросекундах (за замовчуванням 100000), а --cpu-quota задає максимально допустимий час використання CPU за цей період.

docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx

Ліміти на використання пам'яті

Обмеження максимальної кількості пам'яті (--memory)

Параметр --memory задає верхню межу пам'яті, яку може використовувати контейнер. Якщо контейнер перевищить цей ліміт, система його завершить.

docker run -d --name limited_memory_container --memory="512m" nginx

Обмеження обсягу підкачки пам'яті (--memory-swap)

Параметр --memory-swap задає загальний ліміт для оперативної пам'яті та підкачки. Наприклад, якщо --memory встановлено на 512 MB, а --memory-swap на 1 GB, контейнер зможе використовувати до 512 MB оперативної пам'яті та ще 512 MB підкачки.

docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx

Обмеження використання пам'яті без підкачки (--memory-swap=-1)

Щоб заборонити використання підкачки, встановіть параметр --memory-swap в значення -1.

docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx

 

Перенаправлення портів

Перенаправлення портів — це важлива можливість Docker, яка дозволяє застосункам всередині контейнерів бути доступними ззовні. Ця функція потрібна, щоб підключатися до веб-серверів, баз даних або інших сервісів, запущених у контейнерах, з хост-машини або навіть інших мереж.

Для перенаправлення портів використовується параметр -p або --publish команди docker run.

docker run -p [HOST_PORT]:[CONTAINER_PORT] [OPTIONS] IMAGE [COMMAND] [ARG...]

Де:

  • HOST_PORT: порт на хост-машині, через який буде йти трафік.
  • CONTAINER_PORT: порт всередині контейнера, куди буде перенаправлятися трафік.
  • OPTIONS: додаткові параметри для налаштування контейнера.
  • IMAGE: образ, з якого створюється контейнер.
  • COMMAND: команда, яка виконується всередині контейнера.
  • ARG...: аргументи для команди.

Приклад базового використання

У цьому прикладі порт 80 контейнера, де працює веб-сервер Nginx, перенаправляється на порт 8080 хост-машини. Після цього ви зможете відкрити веб-сервер у браузері за адресою http://localhost:8080.

docker run -d -p 8080:80 nginx

Множинне перенаправлення портів

docker run -d -p 8080:80 -p 8443:443 nginx

Перенаправлення портів із зазначенням IP-адреси

У цьому прикладі порт 80 контейнера перенаправляється на порт 8080 тільки на інтерфейсі 127.0.0.1 хост-машини. Це означає, що доступ до сервісу буде можливим тільки з самої хост-машини.

docker run -d -p 127.0.0.1:8080:80 nginx

Перенаправлення діапазону портів

docker run -d -p 7000-8000:7000-8000 someimage

 

Монтування томів

Основний синтаксис команди docker run для монтування томів

docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]

Створення та використання томів

Іменовані томи

docker volume create my_volume

docker run -d -v my_volume:/data --name my_container nginx

Анонімні томи

У цьому прикладі Docker автоматично створить анонімний том і змонтує його в директорію /data всередині контейнера.

docker run -d -v /data --name my_container nginx

Прив'язані директорії

У цьому прикладі директорія /host/data на хостовій машині монтується в директорію /container/data всередині контейнера my_container.

docker run -d -v /host/data:/container/data --name my_container nginx

Керування томами

Перегляд усіх томів

Ця команда виводить список усіх доступних томів на хостовій машині.

docker volume ls

2. Перегляд інформації про том

За допомогою цієї команди можна отримати детальну інформацію про том my_volume: його місцезнаходження на хостовій файловій системі, а також інформацію про контейнери, які використовують цей том.

docker volume inspect my_volume

3. Видалення тому

Ця команда видаляє том my_volume. Перед видаленням важливо переконатися, що том не використовується жодним контейнером, інакше команда не виконається.

docker volume rm my_volume

Резервне копіювання томів

Резервне копіювання тому

У цьому прикладі вміст тому my_volume архівується в файл my_volume_backup.tar.gz, який зберігається в директорії /backup на хостовій машині.

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume

2. Відновлення тому

Цей приклад відновлює вміст тому my_volume із резервної копії, яка зберігається у файлі my_volume_backup.tar.gz.

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume

 

Робота з Docker Hub

Завантаження конкретного образу

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

docker pull nginx:latest

docker pull ubuntu:20.04

Де:

  • NAME: ім'я образу.
  • TAG: (необов'язково) тег образу. За замовчуванням використовується тег latest, якщо не вказано інший.
  • @DIGEST: (необов'язково) SHA256-ідентифікатор образу.
2015-2026 © SumyNikNet