Lesson 1Images

Containers and Amazon ECR

Container ทำให้ application และ dependencies ถูก package เป็น image เดียวกัน รันซ้ำได้ในเครื่อง dev, CI/CD และ AWS runtime platforms

Container vs Virtual Machine

Virtual Machine มี guest OS แยกชุด ส่วน Container แชร์ kernel ของ host แต่ isolate process, filesystem และ network namespace Container จึงเริ่มเร็วและเบากว่า แต่ยังต้องดูแล base image, patching และ runtime security

Dockerfile และ image build

Dockerfile คือ recipe สำหรับสร้าง image ควรเริ่มจาก base image ที่เชื่อถือได้, pin version, copy เฉพาะไฟล์จำเป็น, ใช้ non-root user เมื่อทำได้ และลด image size เพื่อลด attack surface

FROM public.ecr.aws/docker/library/node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
EXPOSE 3000
CMD ["node", "server.js"]

Amazon ECR

Amazon Elastic Container Registry หรือ ECR เป็น managed container registry สำหรับเก็บ Docker/OCI images ใช้ IAM ควบคุม push/pull, รองรับ lifecycle policies, image scanning, tag immutability และ replication ตาม use case

aws ecr create-repository --repository-name learning-web
aws ecr get-login-password --region ap-southeast-1 \
  | docker login --username AWS --password-stdin ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com
docker build -t learning-web:1.0.0 .
docker tag learning-web:1.0.0 ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/learning-web:1.0.0
docker push ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/learning-web:1.0.0

Tagging strategy

  • ใช้ immutable release tag เช่น Git SHA หรือ semantic version
  • หลีกเลี่ยง deploy ด้วย latest ใน production เพราะ rollback และ audit ยาก
  • ใช้ ECR lifecycle policy เพื่อลบ old untagged images
  • เปิด image scanning เพื่อเห็น vulnerability ก่อน deploy

Common mistakes

  • ใส่ secret ลง image layer เช่น .env หรือ private key
  • ใช้ base image ใหญ่และไม่ patch นานจนมี CVE สะสม
  • ไม่กำหนด health check หรือ signal handling ทำให้ container shutdown ไม่เรียบร้อย

Review questions

  1. Container ต่างจาก VM อย่างไร?
  2. ทำไม production ไม่ควรพึ่ง tag latest?
  3. ECR lifecycle policy ช่วยลดปัญหาอะไร?