Image, Container, Registry
Docker-ийн гурван үндсэн ойлголтыг ойлговол бусад бүх зүйл энгийн болно: Image, Container, Registry.
Image — уншихад зориулагдсан загвар
Image бол аппликейшнийг ажиллуулахад шаардлагатай бүх зүйл агуулсан read-only загвар. Үүнд:
- Үндсэн OS (Ubuntu, Alpine гэх мэт)
- Суулгасан library, package-ууд
- Аппликейшний код
- Тохиргооны файлууд
Image-ийг шууд ажиллуулж болохгүй — эхлээд Container болгон хувиргах хэрэгтэй.
Зүйрлэл: Image бол барилгын зураг төсөл. Зураг төслийг харж барилга барина — зураг төсөл өөрөө барилга биш.
Container — ажиллаж байгаа жишээ
Container бол image-аас үүсгэсэн ажиллаж байгаа жишээ. Нэг image-аас олон container үүсгэж болно.
Image → docker run → Container 1
→ docker run → Container 2
→ docker run → Container 3
Container ажиллаж байх үед:
- Файл бичих, унших боломжтой (зөвхөн тэр container-д)
- Сүлжээтэй холбогдох боломжтой
- Зогсоох, дахин эхлүүлэх боломжтой
Container устгагдвал дотор нь хийсэн өөрчлөлт арилна — image өөрчлөгдөхгүй.
Зүйрлэл: Image барилгын зураг бол, Container бол тэр зургаар баригдсан бодит барилга.
Image ба Container харьцуулалт
| Шинж чанар | Image | Container |
| -------------- | ------------------ | -------------------- |
| Төлөв | Read-only | Read-write |
| Ажиллах байдал | Disk дээр хадгална | Санах ойд ажиллана |
| Тоо | Нэг | Олон (нэг image-аас) |
| Устгах | docker rmi | docker rm |
Registry — image хадгалах газар
Registry бол image-уудыг хадгалж, хуваалцдаг төвлөрсөн агуулах. GitHub код хадгалдаг шиг Registry image хадгалдаг.
Docker Hub — хамгийн том, олон нийтийн registry:
- hub.docker.com
ubuntu,nginx,postgres,nodeзэрэг official image-ууд байдаг- Бүртгэлгүйгээр татаж болно
- Бүртгүүлбэл өөрийн image байршуулж болно
# Docker Hub-аас ubuntu image татах
docker pull ubuntu
# Docker Hub-аас nginx image татах
docker pull nginx:alpine
Бусад registry-ууд:
- GitHub Container Registry —
ghcr.io - Google Artifact Registry —
gcr.io - Amazon ECR — AWS-ийн registry
Layer архитектур
Image нь давхарга (layer)-уудаас тогтдог. Dockerfile-ийн мөр бүр шинэ layer үүсгэдэг.
Layer 4: COPY . /app ← Аппликейшний код
Layer 3: RUN npm install ← Dependencies
Layer 2: RUN apt update ← System update
Layer 1: FROM ubuntu:22.04 ← Суурь OS
Layer-ийн давуу тал — cache:
Хэрэв Layer 1, 2, 3 өөрчлөгдөөгүй бол дахин build хийхэд эдгээрийг cache-аас авна. Зөвхөн өөрчлөгдсөн layer ба түүнээс дараах layer-ийг дахин build хийнэ.
# Image-ийн layer-уудыг харах
docker history nginx
Layer хуваалцах:
Хэд хэдэн image нэг layer хуваалцаж болно. Жишээ нь ubuntu:22.04 дээр суурилсан бүх image тэр layer-ийг хуваалцана — disk дээр нэг удаа хадгалагдана.
Нэрлэх дүрэм
Image-ийн нэр дараах хэлбэртэй байна:
[registry/][username/]image-name[:tag]
Жишээнүүд:
ubuntu # Docker Hub-ийн official image, latest tag
ubuntu:22.04 # Тодорхой хувилбар
nginx:alpine # Alpine Linux дээрх nginx
myuser/myapp:1.0 # Хэрэглэгчийн image
ghcr.io/org/app:latest # GitHub Container Registry
Tag заагаагүй бол автоматаар latest tag ашиглана.
Үндсэн командууд
# Image жагсаах
docker images
# Image татах
docker pull ubuntu:22.04
# Image устгах
docker rmi ubuntu:22.04
# Container жагсаах (ажиллаж байгаа)
docker ps
# Container жагсаах (бүгд)
docker ps -a
Дараагийн хичээлд:
Анхны container-ийг практикаар ажиллуулж, interactive shell нээнэ.