Docker — это инструмент для запуска приложений в изолированных контейнерах. Он делает разработку и развертывание проще, быстрее и безопаснее.
Нужен он для: изоляции приложений и зависимостей, переносимости (софтина работает одинаково на любой системе) и DevOps-процессов.
Плюсы докера: простота развёртывания, экономия ресурсов по сравнению с виртуальными машинами, стандартизация окружения.
Минусы докера: не подходит для задач, требующих полной виртуализации, не оптимален для GUI-приложений, требует грамотной настройки безопасности.
Минимальный пример запуска первого Docker-контейнера с Python (FastAPI):
1. Для развертывания для начала создадим новый проект и установим зависимости. Если не имели раньше дела с
$ sudo apt install python3 python3-pip -y
$ sudo apt install docker.io -y
После установки создаем рабочую папку:
$ mkdir fastapi_backend && cd fastapi_backend
Активируем виртуальное окружение, чтобы изолировать зависимости проекта и с помощью команды pip freeze автоматически сформировать requirements.txt, не заполняя его вручную:
$ python3 -m venv venv
$ source venv/bin/activate
Cкачиваем необходимые для создания API зависимости с помощью пакетного менеджера pip и сохраняем их в requirements.txt:
$ pip install fastapi uvicorn
$ pip freeze > requirements.txt
2. Создадим в каталоге проекта файл "main.py" с простым API:
$ touch main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "LinuxCamp"}
3. Ну и наконец добавим в локальный каталог сам Dockerfile - это инструкция по созданию docker контейнера. Cейчас приведу общий пример, в следующих постах подробнее разберем его структуру:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "127.0.0.1", "--port", "8000"]
4. На этом все! Мы уже можем собрать свой Docker-образ и запустить его, после чего приложение будет доступно по адресу ниже:
$ sudo docker build -t myapp .
$ sudo docker run -d -p 8000:8000 myapp
$ curl -L http://127.0.0.1:8000
$ {"Hello":"LinuxCamp"}
http://127.0.0.1:8000
Также можно посмотреть наличие нашего docker контейнера в списке запущенных контейнеров с помощью команды docker ps:
$ docker ps
CONTAINER ID IMAGE COMMAND
640d6f4d1acb fastapi_backend "uvicorn main:app --…"
LinuxCamp | #devops #docker #bymaga