Ръководство за начинаещи в 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 и следвайте съответните инструкции за инсталиране.
След като инсталацията приключи, можете да проверите дали Docker е инсталиран правилно, като изпълните командата docker --version.
Контейнеризиране на просто Python приложение
Ще създадем просто Python приложение и ще го контейнеризираме с помощта на Docker.
1. Създаване на Python приложение
Създайте файл с име app.py, съдържащ следния код:
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 образ:
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, за да ограничите използването на CPU и памет от контейнера.
- Актуализирайте редовно изображенията: Поддържайте изображенията актуални, за да коригирате пропуски в сигурността.
- Използвайте инструменти за сканиране на сигурността: Инструменти като Snyk, Clair и др. могат да бъдат интегрирани във вашия CI/CD процес, за да сканират автоматично изображенията за уязвимости.





