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 --version` командыг ажиллуулж Docker зөв суулгагдсан эсэхийг шалгаж болно.\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 [* version: "3.9": Docker Compose файлын хувилбарыг заана.
services: Аппликешны үйлчилгээнүүдийг тодорхойлно.web: "web" нэртэй үйлчилгээг тодорхойлно.image: my-python-app: Үйлчилгээнд ашиглах image-ийг заана.ports: Порт холболтыг тодорхойлно.
2. Аппликешныг ажиллуулах
docker-compose.yml файл агуулсан директорт дараах командыг ажиллуулж аппликешныг эхлүүлнэ үү:
docker-compose up -d
docker-compose up: Аппликешныг эхлүүлэх команд.-d: Контейнерийг салгах горимд ажиллуулна.
3. Аппликешныг зогсоох
Дараах командыг ашиглан аппликешныг зогсооно уу:
docker-compose down
Docker аюулгүй байдлын шилдэг туршлагууд
Хэлэлцүүлгээс харахад Docker image-ийн аюулгүй байдал нь чухал асуудал юм. Docker-ийн аюулгүй байдлын шилдэг туршлагууд:
- Албан ёсны image ашиглах: Аль болох албан ёсоор нийлүүлсэн image-үүдийг ашиглаарай, эдгээр image-үүд нь ихэвчлэн аюулгүй байдлын сканнердаар шалгагдаж, засвар үйлчилгээ хийгддэг.
- Image-ийн эмзэг байдлыг сканнердах: Trivy зэрэг хэрэгслүүдийг ашиглан image-ийн мэдэгдэж буй эмзэг байдлыг сканнердаж, image-ээ цаг тухайд нь шинэчилнэ үү.
- Хамгийн бага эрхтэй байх зарчим: Контейнерийг root хэрэглэгчээр ажиллуулахаас зайлсхий.
- Контейнерийн нөөцийг хязгаарлах: cgroups-ийг ашиглан контейнерийн CPU болон санах ойн хэрэглээг хязгаарлаарай.
- Image-ээ тогтмол шинэчлэх: Аюулгүй байдлын эмзэг байдлыг засахын тулд image-ээ шинэчилж байгаарай.
- Аюулгүй байдлын сканнердах хэрэгсэл ашиглах: Snyk, Clair зэрэг хэрэгслүүдийг CI/CD процессдээ нэгтгэж, image-ийн эмзэг байдлыг автоматаар сканнердаж болно.





