diff options
Diffstat (limited to 'LINUX/DOCKER.md')
| -rw-r--r-- | LINUX/DOCKER.md | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/LINUX/DOCKER.md b/LINUX/DOCKER.md new file mode 100644 index 0000000..0f6c942 --- /dev/null +++ b/LINUX/DOCKER.md @@ -0,0 +1,87 @@ +**Собираем минимальный Docker образ** + +**Docker** — это инструмент для запуска приложений в изолированных контейнерах. Он делает разработку и развертывание проще, быстрее и безопаснее. + +**Нужен он для:** изоляции приложений и зависимостей, переносимости (софтина работает одинаково на любой системе) и DevOps-процессов. + +**Плюсы докера:** простота развёртывания, экономия ресурсов по сравнению с виртуальными машинами, стандартизация окружения. + +**Минусы докера:** не подходит для задач, требующих полной виртуализации, не оптимален для GUI-приложений, требует грамотной настройки безопасности. + +Минимальный пример запуска первого **Docker-контейнера** с **Python** (**FastAPI**): + +1. Для развертывания для начала создадим новый проект и установим зависимости. Если не имели раньше дела с питухоном питоном и докером, также скачиваем все необходимое: +```sh +sudo apt install python3 python3-pip -y +sudo apt install docker.io -y +``` +После установки создаем рабочую папку: + +```sh +mkdir fastapi_backend && cd fastapi_backend +``` + +Активируем виртуальное окружение, чтобы изолировать зависимости проекта и с помощью команды **pip freeze** автоматически сформировать **requirements.txt**, не заполняя его вручную: + +```sh +python3 -m venv venv +source venv/bin/activate +``` +Cкачиваем необходимые для создания API зависимости с помощью пакетного менеджера pip и сохраняем их в **requirements.txt**: + +```sh +pip install fastapi uvicorn +pip freeze > requirements.txt +``` +2. Создадим в каталоге проекта файл "**main.py**" с простым **API**: + +```sh +touch main.py +``` + +```python +from fastapi import FastAPI + +app = FastAPI() + +@app.get("/") +def read_root(): + return {"Hello": "LinuxCamp"} +``` +3. Ну и наконец добавим в локальный каталог сам **Dockerfile** - это инструкция по созданию **docker** контейнера. Cейчас приведу общий пример, в следующих постах подробнее разберем его структуру: +```docker +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-образ** и запустить его, после чего приложение будет доступно по адресу ниже: + +```sh +sudo docker build -t myapp . +sudo docker run -d -p 8000:8000 myapp +``` + +```sh +curl -L http://127.0.0.1:8000 +{"Hello":"LinuxCamp"} +``` +http://127.0.0.1:8000 + +Также можно посмотреть наличие нашего docker контейнера в списке запущенных контейнеров с помощью команды **docker ps**: + +```sh +docker ps + +CONTAINER ID IMAGE +COMMAND +640d6f4d1acb fastapi_backend +"uvicorn main:app --…" +``` |
