Docker Уводни Водич: Брзо Контејнеризујте Вашу Апликацију
markdown\n# Docker Уводни Водич: Брзо Контејнеризујте Вашу Апликацију\n\nDocker је постао незаобилазан део модерног развоја и имплементације софтвера. Иако су дискусије о Kubernetes-у свеприсутне, Docker је и даље омиљени алат многих компанија за изградњу, тестирање и имплементацију апликација. Овај чланак ће вас брзо увести у Docker, упознати са његовим основним концептима и пружити практичан пример који ће вам помоћи да почнете да контејнеризујете вашу апликацију.\n\n## Docker Основни Концепти\n\nПре него што почнете са праксом, важно је разумети неке од основних Docker концепата:\n\n* **Слика (Image):** Слика је шаблон само за читање који садржи све што је потребно за покретање апликације: код, окружење за извршавање, системске алате, библиотеке и зависности. Слично је слици виртуелне машине, али је лакша.\n\n* **Контејнер (Container):** Контејнер је покренута инстанца креирана од слике. То је инстанца слике у времену извршавања, која садржи апликацију и све њене зависности. Контејнери су међусобно изоловани и имају сопствени систем датотека, процесе и мрежни простор.\n\n* **Docker Hub:** Docker Hub је јавно складиште слика, са којег можете преузети унапред изграђене слике, или уплодовати своје слике. Слично је GitHub-у, али је специјализован за Docker слике.\n\n* **Dockerfile:** Dockerfile је текстуална датотека која садржи све инструкције за изградњу Docker слике. Писањем Dockerfile-а, можете аутоматизовати процес креирања слике.\n\n* **Docker Compose:** Docker Compose је алат за дефинисање и покретање Docker апликација са више контејнера. Омогућава вам да користите YAML датотеку за конфигурисање сервиса апликације, а затим користите једну команду за покретање или заустављање свих сервиса.\n\n## Docker Инсталација\n\nПрво, морате инсталирати Docker. Docker нуди инсталационе пакете за различите оперативне системе. Посетите [Docker званичну веб страницу](https://www.docker.com/get-started/) и пратите одговарајућа упутства за инсталацију.\n\nНакон инсталације, можете проверити да ли је Docker правилно инсталиран покретањем команде `docker --version`.\n\n## Контејнеризација једноставне Python Апликације\n\nКреираћемо једноставну Python апликацију и користити Docker да је контејнеризујемо.\n\n### 1. Креирање Python Апликације\n\nКреирајте датотеку под називом `app.py`, која садржи следећи код:\n\npython\nfrom flask import Flask\napp = Flask(name)\n\n@app.route(# 将应用程序代码复制到工作目录
COPY app.py .
暴露端口 5000
EXPOSE 5000
定义启动命令
CMD ["python", "app.py"]
**Dockerfile 说明:**
* `FROM python:3.9-slim-buster`: 指定基础镜像为 Python 3.9 的精简版。 (Određuje baznu sliku kao pojednostavljenu verziju Python 3.9).
* `WORKDIR /app`: 设置容器内的工作目录为 `/app`。 (Postavlja radni direktorijum unutar kontejnera na `/app`).
* `COPY requirements.txt .`: 将当前目录下的 `requirements.txt` 文件复制到容器的 `/app` 目录。 (Kopira `requirements.txt` datoteku iz trenutnog direktorijuma u `/app` direktorijum kontejnera).
* `RUN pip install --no-cache-dir -r requirements.txt`: 在容器内运行 `pip` 命令安装 `requirements.txt` 文件中指定的依赖项。 `--no-cache-dir` 参数可以减小镜像的大小。 (Pokreće `pip` komandu unutar kontejnera da instalira zavisnosti navedene u `requirements.txt` datoteci. `--no-cache-dir` parametar može smanjiti veličinu slike).
* `COPY app.py .`: 将当前目录下的 `app.py` 文件复制到容器的 `/app` 目录。 (Kopira `app.py` datoteku iz trenutnog direktorijuma u `/app` direktorijum kontejnera).
* `EXPOSE 5000`: 声明容器将监听 5000 端口。 (Deklariše da će kontejner slušati na portu 5000).
* `CMD ["python", "app.py"]`: 定义容器启动时执行的命令。 (Definiše komandu koja se izvršava kada se kontejner pokrene).
### 4. 构建 Docker 镜像
在包含 `Dockerfile` 的目录下,运行以下命令构建 Docker 镜像:(U direktorijumu koji sadrži `Dockerfile`, pokrenite sledeću komandu da biste izgradili Docker sliku):
```bash
docker build -t my-python-app .
docker build: 构建镜像的命令。 (Komanda za izgradnju slike).-t my-python-app: 为镜像指定一个名称 (my-python-app)。 (Dodjeljuje ime slici (my-python-app))..: 指定 Dockerfile 所在的目录 (当前目录)。 (Određuje direktorijum u kojem se nalazi Dockerfile (trenutni direktorijum)).
构建过程可能需要一些时间,取决于网络速度和依赖项的大小。(Proces izgradnje može potrajati neko vreme, u zavisnosti od brzine mreže i veličine zavisnosti).
5. 运行 Docker 容器
使用以下命令运行 Docker 容器:(Koristite sledeću komandu da pokrenete Docker kontejner):
docker run -d -p 5000:5000 my-python-app
docker run: 运行容器的命令。 (Komanda za pokretanje kontejnera).-d: 以分离模式运行容器 (在后台运行)。 (Pokreće kontejner u odvojenom režimu (radi u pozadini)).-p 5000:5000: 将宿主机的 5000 端口映射到容器的 5000 端口。 (Mapira port 5000 host mašine na port 5000 kontejnera).my-python-app: 指定要使用的镜像名称。 (Određuje ime slike koja će se koristiti).
6. 验证应用程序
在浏览器中访问 http://localhost:5000,你应该能看到 "Hello, Docker!"。(Posetite http://localhost:5000 u pregledaču, trebalo bi da vidite "Hello, Docker!").
7. 停止和删除容器
使用以下命令停止容器:(Koristite sledeću komandu da zaustavite kontejner):
docker stop
`` 可以通过 docker ps 命令查看。 (Može se videti pomoću komande docker ps).
使用以下命令删除容器:(Koristite sledeću komandu da obrišete kontejner):
docker rm
Docker Compose 入门
如果你的应用程序由多个服务组成,可以使用 Docker Compose 来管理它们。(Ako se vaša aplikacija sastoji od više servisa, možete koristiti Docker Compose da biste ih upravljali).
1. 创建 docker-compose.yml 文件
创建一个名为 docker-compose.yml 的文件,并添加以下内容:(Napravite datoteku pod nazivom docker-compose.yml i dodajte sledeći sadržaj):
version: "3.9"
services:
web:
image: my-python-app
ports:
- "5000:5000"
docker-compose.yml 说明:
version: "3.9": Određuje verziju Docker Compose datoteke.services: Definiše servise aplikacije.web: Definiše servis pod nazivom "web".image: my-python-app: Određuje image koji servis koristi.ports: Definiše mapiranje portova.
2. Pokretanje aplikacije
U direktorijumu koji sadrži docker-compose.yml datoteku, pokrenite sledeću komandu da biste pokrenuli aplikaciju:
docker-compose up -d
docker-compose up: Komanda za pokretanje aplikacije.-d: Pokreće kontejnere u odvojenom (detached) režimu.
3. Zaustavljanje aplikacije
Koristite sledeću komandu da zaustavite aplikaciju:
docker-compose down
Docker bezbednosne najbolje prakse
Kao što se može videti iz diskusije, bezbednost Docker image-a je važno pitanje. Sledi nekoliko Docker bezbednosnih najboljih praksi:
- Koristite zvanične image-e: Koristite zvanične image-e kad god je to moguće, jer su oni obično skenirani i održavani u pogledu bezbednosti.
- Skenirajte image-e na ranjivosti: Koristite alate kao što je Trivy da skenirate image-e na poznate ranjivosti i blagovremeno ažurirajte image-e.
- Koristite princip minimalnih privilegija: Izbegavajte pokretanje kontejnera kao root korisnik.
- Ograničite resurse kontejnera: Koristite cgroups da ograničite upotrebu CPU-a i memorije kontejnera.
- Redovno ažurirajte image-e: Održavajte image-e ažurnim da biste popravili bezbednosne propuste.
- Koristite alate za bezbednosno skeniranje: Alati kao što su Snyk, Clair itd. se mogu integrisati u vaš CI/CD proces da automatski skeniraju image-e na ranjivosti.
ZaključakOvaj članak pruža brzi vodič za početak rada sa Docker-om, pokrivajući osnovne koncepte, korake instalacije i jednostavan primer kontejnerizacije Python aplikacije. Učenjem ovih osnova, možete početi da koristite Docker za izgradnju, testiranje i implementaciju vaših aplikacija. Zapamtite, bezbednost je od suštinskog značaja, uvek obratite pažnju na bezbednost Docker image-a i preduzmite odgovarajuće mere da zaštitite svoje aplikacije. Iako je Kubernetes moćan u orkestraciji kontejnera velikih razmera, Docker je i dalje jednostavno i efikasno rešenje u mnogim scenarijima. Ovladavanjem Docker-om, bićete bolje opremljeni da se nosite sa izazovima modernog razvoja i implementacije softvera.





