Водич за почеток со Docker: Брзо започнете со контејнеризација на вашата апликација
# Водич за почеток со Docker: Брзо започнете со контејнеризација на вашата апликација
Docker стана незаменлив дел од модерното развивање и распоредување на софтвер. И покрај огромните дискусии околу Kubernetes, Docker сè уште е алатка од прв избор за многу компании за градење, тестирање и распоредување на апликации. Оваа статија ќе ве воведе во Docker, ќе ги објасни неговите основни концепти и ќе обезбеди практичен пример за да ви помогне да започнете со контејнеризација на вашата апликација.
## Основни концепти на Docker
Пред да започнете со пракса, од суштинско значење е да разберете некои од основните концепти на Docker:
* **Слика (Image):** Сликата е шаблон само за читање, кој содржи сè што е потребно за да се изврши апликација: код, runtime околина, системски алатки, библиотеки и зависности. Слично на виртуелна машина, но е полесна.
* **Контејнер (Container):** Контејнерот е инстанца на слика што се извршува. Тоа е runtime инстанца на сликата, која ги содржи апликацијата и сите нејзини зависности. Контејнерите се изолирани еден од друг, имаат сопствен датотечен систем, процеси и мрежен простор.
* **Docker Hub:** Docker Hub е јавен складиште на слики, од каде што можете да преземате претходно изградени слики, или да ги прикачувате вашите сопствени слики. Слично на GitHub, но специјализиран за Docker слики.
* **Dockerfile:** Dockerfile е текстуална датотека, која ги содржи сите инструкции за градење на Docker слика. Со пишување на Dockerfile, можете да го автоматизирате процесот на креирање на слика.
* **Docker Compose:** Docker Compose е алатка за дефинирање и извршување на Docker апликации со повеќе контејнери. Ви овозможува да ги конфигурирате услугите на апликацијата со помош на YAML датотека, а потоа да ги стартувате или стопирате сите услуги со една команда.
## Инсталација на Docker
Прво, треба да го инсталирате Docker. Docker нуди инсталациони пакети за различни оперативни системи. Посетете ја [официјалната веб-страница на Docker](https://www.docker.com/get-started/) и следете ги соодветните упатства за инсталација.
Откако ќе заврши инсталацијата, можете да проверите дали Docker е правилно инсталиран со извршување на командата `docker --version`.
## Контејнеризација на едноставна Python апликација
Ќе креираме едноставна Python апликација и ќе ја контејнеризираме со помош на Docker.
### 1. Креирање на Python апликација
Креирајте датотека со име `app.py`, која го содржи следниот код:
```python
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!" на root патеката /.
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 процес за автоматско скенирање на ранливости во сликите.





