Docker / Image, Container, Registry

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 байршуулж болно
bash
# Docker Hub-аас ubuntu image татах
docker pull ubuntu

# Docker Hub-аас nginx image татах
docker pull nginx:alpine

Бусад registry-ууд:

  • GitHub Container Registryghcr.io
  • Google Artifact Registrygcr.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 хийнэ.

bash
# Image-ийн layer-уудыг харах
docker history nginx

Layer хуваалцах:

Хэд хэдэн image нэг layer хуваалцаж болно. Жишээ нь ubuntu:22.04 дээр суурилсан бүх image тэр layer-ийг хуваалцана — disk дээр нэг удаа хадгалагдана.

Нэрлэх дүрэм

Image-ийн нэр дараах хэлбэртэй байна:

код
[registry/][username/]image-name[:tag]

Жишээнүүд:

bash
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 ашиглана.

Үндсэн командууд

bash
# 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 нээнэ.