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. Практикуйтеся, експериментуйте, і ви швидко освоїте цей корисний інструмент.
