Основи роботи з 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 ls2. Перегляд інформації про том
За допомогою цієї команди можна отримати детальну інформацію про том my_volume: його місцезнаходження на хостовій файловій системі, а також інформацію про контейнери, які використовують цей том.
docker volume inspect my_volume3. Видалення тому
Ця команда видаляє том 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 /volume2. Відновлення тому
Цей приклад відновлює вміст тому 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-ідентифікатор образу.