Пошук уроків, статей та іншого контенту
Ознайомимося з Docker Engine і навчимося виконувати основні операції через командний рядок.
Docker Engine — це програмне забезпечення, яке створює та запускає контейнери. Воно працює локально або на віддаленому сервері й складається з кількох частин:
Docker daemon — фоновий процес, який керує образами, контейнерами, мережами та сховищами.
Docker API — інтерфейс для взаємодії з daemon.
Docker CLI — командний рядок, через який розробник надсилає команди Docker Engine.
Зазвичай команда docker у терміналі є клієнтом, а Docker daemon виконує фактичну роботу.
На Linux Docker daemon працює як системний сервіс. Docker Desktop для macOS і Windows містить Docker Engine всередині себе та надає зручний спосіб його запуску.
Docker працює з двома основними поняттями:
Образ (image) — незмінний шаблон, який містить файли, залежності та налаштування для запуску програми.
Контейнер (container) — запущений екземпляр образу.
Один образ можна використовувати для створення багатьох контейнерів. Наприклад, образ nginx може стати основою для кількох незалежних контейнерів.
Контейнер зазвичай виконує один основний процес. Якщо цей процес завершується, контейнер також зупиняється.
Перед виконанням команд переконайтеся, що Docker Engine встановлений і запущений.
Перевірити версію Docker CLI можна так:
docker --versionКоманда для отримання детальнішої інформації про клієнт і Engine:
docker versionЯкщо daemon доступний, команда покаже інформацію про Client і Server. Якщо Engine не запущений або CLI не може з ним зв’язатися, буде показано помилку підключення.
Ще одна корисна команда:
docker infoВона показує загальну інформацію про Docker Engine: кількість контейнерів та образів, драйвер сховища, версію та інші параметри.
Для перевірки встановлення Docker зручно використати образ hello-world:
docker run --rm hello-worldЩо відбувається:
Docker перевіряє, чи є образ hello-world локально.
Якщо образу немає, Docker завантажує його з реєстру.
На основі образу створюється контейнер.
Контейнер запускається та виводить повідомлення.
Прапорець --rm автоматично видаляє контейнер після завершення.
Образ при цьому залишається локально, тому наступний запуск може не потребувати повторного завантаження.
Команда docker pull завантажує образ без запуску контейнера:
docker pull nginx:alpineУ цьому прикладі:
nginx — назва образу;
alpine — тег образу;
тег alpine вказує на варіант образу, побудований на Alpine Linux.
Якщо тег не вказати, Docker зазвичай використовує тег latest:
docker pull nginxПроте краще явно вказувати тег, коли важливо контролювати версію або варіант образу.
Переглянути локальні образи можна командою:
docker image lsТакож використовується короткий варіант:
docker imagesУ результаті буде видно назву образу, тег, ідентифікатор, час створення та розмір.
Запустимо вебсервер Nginx у фоновому режимі:
docker run --name web -d -p 8080:80 nginx:alpineРозглянемо параметри команди:
docker run — створити та запустити контейнер;
--name web — назвати контейнер web;
-d — запустити контейнер у фоновому режимі;
-p 8080:80 — зіставити порт 8080 комп’ютера з портом 80 контейнера;
nginx:alpine — образ, на основі якого створюється контейнер.
Після запуску Nginx буде доступний на порту 8080 локального комп’ютера. Перевірити відповідь можна командою:
curl http://localhost:8080Також можна відкрити цю адресу у браузері.
Формат параметра -p такий:
порт_комп’ютера:порт_контейнераУ команді:
-p 8080:80порт 80 усередині контейнера доступний через порт 8080 на комп’ютері.
Якщо не вказати -p, вебсервер усе одно працюватиме всередині контейнера, але до нього не можна буде звернутися через порт локального комп’ютера.
Щоб переглянути запущені контейнери, використовуйте:
docker psДля кожного контейнера команда показує, зокрема:
ідентифікатор;
образ;
команду запуску;
час створення;
поточний стан;
зіставлені порти;
ім’я.
Щоб побачити всі контейнери, зокрема зупинені:
docker ps -aКороткі та повні форми команд рівнозначні:
docker container ls
docker container ls -aКоманди з префіксом docker container явно вказують, з яким типом об’єктів виконується операція. Команда docker ps є скороченим варіантом.
Контейнер web працює у фоновому режимі, тому його вивід не відображається безпосередньо в терміналі.
Переглянути журнал контейнера можна так:
docker logs webЩоб стежити за новими повідомленнями в реальному часі:
docker logs -f webПрапорець -f означає стеження за журналом. Щоб завершити перегляд, натисніть Ctrl+C. Це зупинить лише перегляд журналу, а не сам контейнер.
Для запуску команди в активному контейнері використовується docker exec.
Наприклад:
docker exec web nginx -vКоманда виконає nginx -v усередині контейнера web.
Щоб відкрити інтерактивну оболонку:
docker exec -it web shПрапорці означають:
-i — залишити стандартне введення відкритим;
-t — створити інтерактивний термінал.
Після виконання команди ви опинитеся всередині контейнера. Наприклад, можна переглянути файли:
lsЩоб вийти з оболонки:
exitВихід із оболонки не зупиняє контейнер, якщо основний процес Nginx продовжує працювати.
Зупинити контейнер можна за його ім’ям або ідентифікатором:
docker stop webПісля цього контейнер залишиться створеним, але не буде запущеним. Це можна перевірити:
docker ps -aЩоб знову запустити вже створений контейнер:
docker start webПеревірити його стан:
docker psВажливо розрізняти:
docker stop — зупиняє контейнер;
docker start — запускає існуючий зупинений контейнер;
docker run — створює новий контейнер і запускає його.
Для перезапуску контейнера використовується:
docker restart webЗупинений контейнер можна видалити так:
docker rm webЯкщо контейнер ще працює, спочатку його потрібно зупинити:
docker stop web
docker rm webАбо можна примусово зупинити й видалити його однією командою:
docker rm -f webПрапорець -f зупиняє контейнер, якщо він працює, а потім видаляє його.
Видалення контейнера не видаляє образ nginx:alpine.
Список локальних образів:
docker image lsВидалити образ можна за назвою та тегом:
docker image rm nginx:alpineСкорочена форма:
docker rmi nginx:alpineDocker не дозволить видалити образ, якщо він використовується наявним контейнером. Спочатку потрібно видалити відповідний контейнер.
Наприклад:
docker rm -f web
docker image rm nginx:alpineПрапорець -f для docker image rm може примусово видаляти образ, але його слід використовувати обережно.
Нижче наведена послідовність команд, яка демонструє типовий життєвий цикл контейнера:
# Завантажуємо образ Nginx
docker pull nginx:alpine
# Створюємо та запускаємо контейнер у фоновому режимі
docker run --name lesson-web -d -p 8080:80 nginx:alpine
# Перевіряємо запущені контейнери
docker ps
# Перевіряємо відповідь вебсервера
curl http://localhost:8080
# Переглядаємо журнал контейнера
docker logs lesson-web
# Виконуємо команду всередині контейнера
docker exec lesson-web nginx -v
# Зупиняємо контейнер
docker stop lesson-web
# Запускаємо його повторно
docker start lesson-web
# Зупиняємо та видаляємо контейнер
docker rm -f lesson-web
# Видаляємо образ
docker image rm nginx:alpineКоментарі в цьому прикладі пояснюють призначення команд і не є обов’язковими для виконання.
Загальна форма команди:
docker [об’єкт] [операція] [параметри]Наприклад:
docker container ls
docker image ls
docker container stop lesson-web
docker image rm nginx:alpineУ сучасному Docker багато команд можна записувати скорочено:
docker ps
docker stop lesson-web
docker images
docker rmi nginx:alpineДля отримання довідки використовуйте:
docker --helpДовідка для конкретної команди:
docker run --helpПомилка підключення до Docker daemon означає, що Docker Engine не запущений або CLI не має доступу до нього.
Потрібно:
запустити Docker Desktop, якщо використовується macOS або Windows;
перевірити стан Docker-сервісу в операційній системі;
перевірити права доступу користувача до Docker.
Якщо порт 8080 уже використовує інша програма, контейнер не запуститься з параметром -p 8080:80.
Можна вибрати інший порт комп’ютера:
docker run --name web-2 -d -p 8081:80 nginx:alpineТепер контейнер буде доступний за адресою http://localhost:8081.
Імена контейнерів мають бути унікальними. Якщо контейнер web уже існує, команда з --name web завершиться помилкою.
Перегляньте всі контейнери:
docker ps -aПісля цього можна:
використати інше ім’я;
видалити старий контейнер;
повторно запустити існуючий контейнер.
Контейнер працює, поки працює його основний процес. Якщо процес завершився, контейнер переходить у стан Exited.
Переглянути причину можна через журнал:
docker logs <ім’я_контейнера>Стан контейнера:
docker ps -aФайли, створені безпосередньо всередині контейнера, належать його файловій системі. Якщо контейнер видалити, ці зміни також можуть бути втрачені.
Для збереження даних використовують томи та монтування каталогів. Цей механізм розглядається окремо; у поточному прикладі контейнер використовується лише для ознайомлення з командами Docker CLI.
Docker Engine створює та запускає контейнери.
Docker CLI дає змогу керувати Engine через термінал.
Образ є шаблоном, а контейнер — його запущеним екземпляром.
docker pull завантажує образ.
docker run створює та запускає контейнер.
docker ps показує запущені контейнери, а docker ps -a — усі.
docker logs показує журнал контейнера.
docker exec запускає команду всередині активного контейнера.
docker stop зупиняє контейнер, docker start запускає його повторно.
docker rm видаляє контейнер, а docker image rm — образ.
Параметр -p відкриває порт контейнера через порт локального комп’ютера.