Посібник для початківців з Docker: Швидкий старт з контейнеризації ваших додатків
# Посібник для початківців з Docker: Швидкий старт з контейнеризації ваших додатків
Docker став невід'ємною частиною сучасної розробки та розгортання програмного забезпечення. Незважаючи на те, що навколо Kubernetes точаться нескінченні дискусії, Docker залишається кращим інструментом для багатьох компаній для створення, тестування та розгортання додатків. Ця стаття допоможе вам швидко розпочати роботу з Docker, зрозуміти його основні концепції та надасть практичний приклад, який допоможе вам почати контейнеризувати ваші програми.
## Основні концепції Docker
Перш ніж почати практику, важливо зрозуміти деякі основні концепції Docker:
* **Образ (Image):** Образ — це шаблон лише для читання, який містить усе необхідне для запуску програми: код, середовище виконання, системні інструменти, бібліотеки та залежності. Схожий на образ віртуальної машини, але набагато легший.
* **Контейнер (Container):** Контейнер — це запущений екземпляр, створений з образу. Це екземпляр образу під час виконання, який містить програму та всі її залежності. Контейнери ізольовані один від одного, мають власну файлову систему, процеси та мережевий простір.
* **Docker Hub:** Docker Hub — це загальнодоступний репозиторій образів, з якого ви можете завантажувати попередньо створені образи або завантажувати власні. Схожий на GitHub, але спеціалізується на образах Docker.
* **Dockerfile:** Dockerfile — це текстовий файл, який містить усі інструкції для створення образу Docker. Написавши Dockerfile, ви можете автоматизувати процес створення образу.
* **Docker Compose:** Docker Compose — це інструмент для визначення та запуску багатоконтейнерних програм Docker. Він дозволяє налаштовувати служби програми за допомогою файлу YAML, а потім запускати або зупиняти всі служби однією командою.
## Встановлення Docker
Спочатку вам потрібно встановити Docker. Docker надає інсталяційні пакети для різних операційних систем. Відвідайте [офіційний веб-сайт Docker](https://www.docker.com/get-started/) і дотримуйтесь відповідних інструкцій для встановлення.
Після завершення встановлення ви можете перевірити, чи правильно встановлено Docker, виконавши команду `docker --version`.
## Контейнеризація простого Python-додатка
Ми створимо простий Python-додаток і контейнеризуємо його за допомогою Docker.
### 1. Створення Python-додатка
Створіть файл під назвою `app.py`, що містить наступний код:
```python
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Docker!"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
Цей простий додаток Flask повертає "Hello, Docker!" за кореневим шляхом /.
2. Створення файлу requirements.txt
Додаток залежить від бібліотеки Flask, тому нам потрібно створити файл requirements.txt, щоб оголосити ці залежності.
Flask
3. Створення Dockerfile
Створіть файл під назвою Dockerfile і додайте наступний вміст:
# Використовуйте офіційний образ Python як базовий образ
FROM python:3.9-slim-buster
# Встановіть робочий каталог
WORKDIR /app
# Скопіюйте файл requirements.txt у робочий каталог
COPY requirements.txt .
# Встановіть залежності
RUN pip install --no-cache-dir -r requirements.txt
Копіювання коду програми в робочий каталог
COPY app.py .
Відкриття порту 5000
EXPOSE 5000
Визначення команди запуску
CMD ["python", "app.py"]
**Пояснення до Dockerfile:**
* `FROM python:3.9-slim-buster`: Вказує базовий образ як полегшену версію Python 3.9.
* `WORKDIR /app`: Встановлює робочий каталог всередині контейнера як `/app`.
* `COPY requirements.txt .`: Копіює файл `requirements.txt` з поточного каталогу в каталог `/app` контейнера.
* `RUN pip install --no-cache-dir -r requirements.txt`: Запускає команду `pip` всередині контейнера для встановлення залежностей, вказаних у файлі `requirements.txt`. Параметр `--no-cache-dir` може зменшити розмір образу.
* `COPY app.py .`: Копіює файл `app.py` з поточного каталогу в каталог `/app` контейнера.
* `EXPOSE 5000`: Оголошує, що контейнер буде прослуховувати порт 5000.
* `CMD ["python", "app.py"]`: Визначає команду, яка буде виконана при запуску контейнера.
### 4. Збірка Docker образу
У каталозі, що містить `Dockerfile`, виконайте наступну команду для збірки Docker образу:
```bash
docker build -t my-python-app .
docker build: Команда для збірки образу.-t my-python-app: Призначає ім'я образу (my-python-app)..: Вказує каталог, де знаходиться Dockerfile (поточний каталог).
Процес збірки може зайняти деякий час, залежно від швидкості мережі та розміру залежностей.
5. Запуск Docker контейнера
Використовуйте наступну команду для запуску Docker контейнера:
docker run -d -p 5000:5000 my-python-app
docker run: Команда для запуску контейнера.-d: Запускає контейнер у відокремленому режимі (працює у фоновому режимі).-p 5000:5000: Зіставляє порт 5000 хост-машини з портом 5000 контейнера.my-python-app: Вказує ім'я образу, який потрібно використовувати.
6. Перевірка програми
Відвідайте http://localhost:5000 у браузері, і ви повинні побачити "Hello, Docker!".
7. Зупинка та видалення контейнера
Використовуйте наступну команду для зупинки контейнера:
docker stop
`` можна переглянути за допомогою команди docker ps.
Використовуйте наступну команду для видалення контейнера:
docker rm
Початок роботи з Docker Compose
Якщо ваша програма складається з кількох служб, ви можете використовувати Docker Compose для їх керування.
1. Створення файлу docker-compose.yml
Створіть файл під назвою docker-compose.yml і додайте наступний вміст:
version: "3.9"
services:
web:
image: my-python-app
ports:
- "5000:5000"
Пояснення до docker-compose.yml:* version: "3.9": Вказує версію файлу Docker Compose.
services: Визначає сервіси програми.web: Визначає сервіс під назвою "web".image: my-python-app: Вказує образ, який використовується сервісом.ports: Визначає відображення портів.
2. Запуск програми
У каталозі, що містить файл docker-compose.yml, запустіть наступну команду, щоб запустити програму:
docker-compose up -d
docker-compose up: Команда для запуску програми.-d: Запускає контейнер у відокремленому режимі.
3. Зупинка програми
Використовуйте наступну команду, щоб зупинити програму:
docker-compose down
Найкращі практики безпеки Docker
Як видно з обговорення, безпека образів Docker є важливим питанням. Ось деякі найкращі практики безпеки Docker:
- Використовуйте офіційні образи: Наскільки це можливо, використовуйте офіційні образи, які зазвичай проходять сканування безпеки та обслуговуються.
- Скануйте образи на наявність вразливостей: Використовуйте такі інструменти, як Trivy, для сканування образів на наявність відомих вразливостей та своєчасного оновлення образів.
- Використовуйте принцип найменших привілеїв: Уникайте запуску контейнерів від імені користувача root.
- Обмежте ресурси контейнера: Використовуйте cgroups для обмеження використання процесора та пам'яті контейнером.
- Регулярно оновлюйте образи: Підтримуйте образи в актуальному стані, щоб виправити вразливості безпеки.
- Використовуйте інструменти сканування безпеки: Такі інструменти, як Snyk, Clair, тощо, можна інтегрувати у ваш CI/CD процес для автоматичного сканування образів на наявність вразливостей.





