summaryrefslogtreecommitdiff
path: root/LINUX/DOCKER.md
diff options
context:
space:
mode:
Diffstat (limited to 'LINUX/DOCKER.md')
-rw-r--r--LINUX/DOCKER.md87
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 --…"
+```