Docker Уводни Водич: Брзо Контејнеризујте Вашу Апликацију

2/18/2026
5 min read

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.

Published in Technology

You Might Also Like

📝
Technology

Claude Code Buddy модификација: Како добити сјајног легендарног љубимца

Claude Code Buddy модификација: Како добити сјајног легендарног љубимца априла 2026. године, Anthropic је у верзији Clau...

Obsidian je lansirao Defuddle, podigao Obsidian Web Clipper na novi nivoTechnology

Obsidian je lansirao Defuddle, podigao Obsidian Web Clipper na novi nivo

Obsidian je lansirao Defuddle, podigao Obsidian Web Clipper na novi nivo Uvek sam voleo osnovnu ideju Obsidiana: lokaln...

OpenAI iznenada najavljuje "tri u jednom": spajanje pretraživača + programiranja + ChatGPT, unutrašnje priznanje da su prošle godine pogrešiliTechnology

OpenAI iznenada najavljuje "tri u jednom": spajanje pretraživača + programiranja + ChatGPT, unutrašnje priznanje da su prošle godine pogrešili

OpenAI iznenada najavljuje "tri u jednom": spajanje pretraživača + programiranja + ChatGPT, unutrašnje priznanje da su p...

2026, ne prisiljavajte se na "disciplinu"! Uradite ovih 8 malih stvari, zdravlje će doći prirodnoHealth

2026, ne prisiljavajte se na "disciplinu"! Uradite ovih 8 malih stvari, zdravlje će doći prirodno

2026, ne prisiljavajte se na "disciplinu"! Uradite ovih 8 malih stvari, zdravlje će doći prirodno Nova godina je počela...

One of the reasons why mothers who work hard to lose weight can't succeed is definitely hereHealth

One of the reasons why mothers who work hard to lose weight can't succeed is definitely here

One of the reasons why mothers who work hard to lose weight can't succeed is definitely here Mart je već prošao, kako n...

📝
Technology

AI Browser 24-сатна стабилна операција

AI Browser 24-сатна стабилна операција Овај водич описује како да се подеси стабилно, дугорочно окружење за AI прегледач...