summaryrefslogtreecommitdiff
path: root/LINUX/DOCKER.md
blob: 0f6c9420145e5c547f4df0ab6a486b205adc68bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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 --…"
```