Docker став невідємною частиною сучасної розробки програмного забезпечення, дозволяючи пакувати, розгортати та запускати програми у вигляді контейнерів. У цій статті ми детально розглянемо Docker на Linux, охоплюючи основи роботи з контейнерами, важливі команди та практичні поради для ефективного використання Docker у вашому робочому процесі.
Що таке Docker і чому він важливий?
Docker – це платформа контейнеризації, яка дозволяє ізолювати додаток та всі його залежності (бібліотеки, системні інструменти, код, середовище виконання) в окремий контейнер. Контейнеризація надає численні переваги:
- Узгодженість середовища: Забезпечує ідентичне середовище для розробки, тестування та виробництва, усуваючи проблеми на моєму компютері працює.
- Ізоляція: Контейнери ізольовані один від одного та від хост-системи, що підвищує безпеку та запобігає конфліктам між додатками.
- Портативність: Контейнери можна легко переміщувати між різними середовищами, включаючи локальні машини, хмарні сервери та віртуальні машини.
- Ефективність використання ресурсів: Контейнери використовують менше ресурсів, ніж віртуальні машини, оскільки вони спільно використовують ядро хост-системи.
- Швидке розгортання: Контейнери можна швидко розгортати та масштабувати, що дозволяє швидко реагувати на зміни вимог бізнесу.
Основні компоненти Docker:
- Docker Engine: Основний компонент Docker, відповідальний за створення, запуск та керування контейнерами.
- Docker Images: Шаблони, що містять все необхідне для запуску контейнера, включаючи код, середовище виконання, системні інструменти та бібліотеки.
- Docker Containers: Працюючі екземпляри Docker images. Вони є ізольованими середовищами, в яких запускаються додатки.
- Docker Hub: Публічний реєстр Docker images, де можна знайти та завантажити готові образи для різних додатків та операційних систем.
- Docker Compose: Інструмент для визначення та запуску багатоконтейнерних додатків. Він дозволяє описувати конфігурацію додатків у файлі YAML та запускати їх однією командою.
- Dockerfile: Текстовий файл, що містить інструкції для автоматичного створення Docker image.
Встановлення Docker на Linux (Ubuntu/Debian):
Найпростіший спосіб встановити Docker на Ubuntu/Debian – використовувати офіційний скрипт встановлення:
- Оновіть список пакетів:
sudo apt update - Встановіть необхідні залежності:
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release - Додайте ключ GPG Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg - Додайте репозиторій Docker:
echo deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - Знову оновіть список пакетів:
sudo apt update - Встановіть Docker Engine:
sudo apt install docker-ce docker-ce-cli containerd.io - Перевірте статус Docker:
sudo systemctl status docker
Після встановлення Docker, додайте вашого користувача в групу `docker`, щоб не потрібно було використовувати `sudo` для виконання команд Docker:
sudo usermod -aG docker $USER- Вийдіть з системи та знову увійдіть, щоб зміни вступили в силу.
Основні команди Docker:
Ось декілька основних команд Docker, які вам знадобляться для початку роботи:
docker pull [image_name]: Завантажує Docker image з Docker Hub або іншого реєстру. Наприклад:docker pull ubuntu:latest.docker images: Відображає список доступних Docker images на вашій машині.docker run [options] [image_name] [command]: Створює та запускає контейнер з вказаного Docker image. Наприклад:docker run -it ubuntu:latest bash(запускає контейнер Ubuntu в інтерактивному режимі з bash).docker ps: Відображає список запущених контейнерів.docker ps -a: Відображає список всіх контейнерів (включаючи зупинені).docker stop [container_id]: Зупиняє запущений контейнер. Container_id можна знайти за допомогою команди `docker ps`.docker start [container_id]: Запускає зупинений контейнер.docker restart [container_id]: Перезавантажує запущений контейнер.docker rm [container_id]: Видаляє зупинений контейнер.docker rmi [image_id]: Видаляє Docker image. Image_id можна знайти за допомогою команди `docker images`.docker exec -it [container_id] [command]: Виконує команду всередині запущеного контейнера. Наприклад:docker exec -it [container_id] bash(відкриває bash-сесію всередині контейнера).docker logs [container_id]: Переглядає логи контейнера.docker build -t [image_name] .: Будує Docker image з Dockerfile у поточному каталозі.
Робота з Dockerfile:
Dockerfile – це текстовий файл, що містить інструкції для створення Docker image. Ось приклад Dockerfile для простого веб-додатку на Python:
FROM python:3.9-slim-busterWORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .CMD [python, app.py]n
Розберемо інструкції Dockerfile:
FROM: Визначає базовий образ, на основі якого буде створено ваш образ. В даному випадку, використовується образ Python 3.9 на базі Debian Buster.WORKDIR: Встановлює робочий каталог всередині контейнера.COPY: Копіює файли та каталоги з хост-машини в контейнер. Тут ми копіюємо файл `requirements.txt`, який містить список залежностей Python.RUN: Виконує команду всередині контейнера. В даному випадку, ми встановлюємо залежності Python, використовуючи `pip`.COPY . .: Копіює всі файли з поточного каталогу на хост-машині в робочий каталог всередині контейнера.CMD: Визначає команду, яка буде запущена при старті контейнера. Тут ми запускаємо скрипт `app.py` за допомогою Python.
Щоб побудувати Docker image з Dockerfile, виконайте команду:
docker build -t my-python-app .
Де `my-python-app` – назва вашого Docker image, а `.` вказує на поточний каталог, де знаходиться Dockerfile.
Docker Compose: Керування багатоконтейнерними додатками:
Docker Compose дозволяє визначати та запускати багатоконтейнерні додатки. Замість запуску кожного контейнера окремо, ви можете описати конфігурацію вашого додатку у файлі `docker-compose.yml` та запустити все однією командою.
Ось приклад `docker-compose.yml` для веб-додатку з базою даних PostgreSQL:
version: 3.9services:n web:n build: .n ports:n - 5000:5000n depends_on:n - dbn environment:n DATABASE_URL: postgresql://user:password@db:5432/mydb db:n image: postgres:13n environment:n POSTGRES_USER: usern POSTGRES_PASSWORD: passwordn POSTGRES_DB: mydbn volumes:n - db_data:/var/lib/postgresql/datavolumes:n db_data:n
Розберемо файл `docker-compose.yml`:
version: Версія формату файлу Docker Compose.services: Визначає список сервісів, які входять до складу додатку. У цьому випадку, у нас є два сервіси: `web` (веб-додаток) та `db` (база даних PostgreSQL).web:build: Вказує на каталог, що містить Dockerfile для побудови образу веб-додатку.ports: Визначає відображення портів між контейнером та хост-машиною. В даному випадку, порт 5000 контейнера відображається на порт 5000 хост-машини.depends_on: Вказує на залежності між сервісами. Веб-додаток залежить від сервісу бази даних (`db`). Docker Compose гарантує, що сервіс бази даних буде запущений перед веб-додатком.environment: Визначає змінні середовища, які будуть доступні веб-додатку. Тут ми передаємо URL бази даних.
db:image: Вказує на Docker image, який буде використано для сервісу бази даних. В даному випадку, використовується образ PostgreSQL 13 з Docker Hub.environment: Визначає змінні середовища, які будуть використані для конфігурації бази даних.volumes: Визначає volumes для збереження даних бази даних. В даному випадку, ми використовуємо volume `db_data` для збереження даних PostgreSQL.
volumes: Визначає volumes, які використовуються сервісами.
Щоб запустити додаток, визначений у файлі `docker-compose.yml`, перейдіть в каталог, що містить файл, та виконайте команду:
docker-compose up -d
Опція `-d` запускає додаток у фоновому режимі (detached mode).
Щоб зупинити додаток, виконайте команду:
docker-compose down
Поради та кращі практики:
- Використовуйте офіційні образи: Завжди віддавайте перевагу офіційним Docker images з Docker Hub, оскільки вони зазвичай краще підтримуються та мають менше вразливостей.
- Мінімізуйте розмір образу: Зменшуйте розмір Docker image, видаляючи непотрібні файли та залежності. Використовуйте багатоетапні збірки (multi-stage builds), щоб зменшити розмір кінцевого образу.
- Використовуйте volumes для збереження даних: Використовуйте volumes для збереження даних, які повинні бути збережені після зупинки або видалення контейнера.
- Використовуйте змінні середовища для конфігурації: Використовуйте змінні середовища для конфігурації додатків, щоб їх можна було легко змінювати без необхідності перебудови Docker image.
- Пишіть чисті та зрозумілі Dockerfile: Робіть Dockerfile легко читабельним та зрозумілим, щоб інші розробники могли легко зрозуміти, як створюється Docker image.
- Використовуйте інструменти для оркестрації контейнерів: Для управління великою кількістю контейнерів використовуйте інструменти для оркестрації контейнерів, такі як Kubernetes або Docker Swarm.
- Регулярно оновлюйте Docker: Регулярно оновлюйте Docker Engine та інші компоненти Docker, щоб отримувати останні виправлення помилок та оновлення безпеки.
Висновок:
Docker – потужний інструмент, який може значно спростити розробку, розгортання та управління додатками. Розуміння основних принципів роботи з Docker та застосування кращих практик дозволить вам ефективно використовувати Docker у ваших проектах. Сподіваємось, ця стаття допомогла вам зрозуміти основи роботи з Docker на Linux. Практикуйтеся, експериментуйте, і ви швидко освоїте цей корисний інструмент.
Популярні запитання
1. Що таке Docker?
Docker — це платформа для розробки, доставки та запуску програм у контейнерах. Контейнери ізолюють додатки від середовища, спрощуючи їх розгортання та управління.
2. Що таке контейнер Docker?
Контейнер — це легкий, портативний, самодостатній пакет програмного забезпечення, який містить все необхідне для його роботи: код, середовище виконання, системні інструменти, бібліотеки та налаштування.
3. Навіщо використовувати Docker?
Docker забезпечує послідовність середовищ розробки та продакшену, спрощує розгортання, ізолює додатки, масштабує ресурси та прискорює цикл розробки.
4. Як встановити Docker на Linux?
Встановлення залежить від дистрибутиву Linux. Зазвичай це команда типу `sudo apt install docker.io` (Debian/Ubuntu) або `sudo yum install docker` (CentOS/Fedora).
5. Як запустити контейнер?
Використовуйте команду `docker run
6. Як переглянути список контейнерів?
Команда `docker ps` покаже запущені контейнери. `docker ps -a` покаже всі контейнери, включаючи зупинені.
7. Як зупинити контейнер?
Використовуйте команду `docker stop
8. Що таке Docker образ?
Образ — це шаблон для створення контейнера. Він містить інструкції для побудови файлової системи контейнера та налаштування його роботи.
9. Як видалити контейнер?
Використовуйте команду `docker rm

Чудова стаття, дякую за пояснення! Хотів би уточнити один момент: якщо я запускаю контейнер з певним образом, і він потребує доступу до файлової системи хост-системи, як найкраще реалізувати цей доступ? Чи є стандартні методи монтування директорій, і які безпекові аспекти слід враховувати при цьому?