So Sánh
| Docker Image | Docker Container |
|---|---|
| Là template (khuôn mẫu), giống như Class trong OOP | Là runtime instance của Image, giống như Object trong OOP |
| Gồm nhiều lớp (layers), mỗi lớp là 1 instruction trong Dockerfile | Thêm 1 lớp read-write layer phía trên image để lưu thay đổi |
| Build-time construct: Dùng để build ứng dụng | Run-time construct: Dùng để chạy ứng dụng |
| Read-only | Read-write layer |
| Không thay đổi được khi đã build xong | Có thể thay đổi khi container đang chạy |
| Được tạo bởi Dockerfile | Tạo từ Image qua lệnh: docker run |
Layer & Container Layer
- Mỗi instruction trong Dockerfile → 1 layer.
- Các layer trước đó: read-only.
Giả sử có Dockerfile như sau:
FROM ubuntu:20.04 # Layer 1: Base image
RUN apt-get update # Layer 2: Cập nhật package list
RUN apt-get install -y python3 # Layer 3: Cài Python3
COPY . /app # Layer 4: Copy code vào thư mục /app
WORKDIR /app # Layer 5: Đặt thư mục làm việc
CMD ["python3", "main.py"] # Layer 6: Lệnh chạy mặc định
Mỗi dòng tạo thành 1 layer:
| Layer | Instruction | Mô tả |
|---|---|---|
| 1 | FROM ubuntu:20.04 | Image nền Ubuntu 20.04 |
| 2 | RUN apt-get update | Cập nhật danh sách package |
| 3 | RUN apt-get install -y python3 | Cài đặt Python3 |
| 4 | COPY . /app | Copy mã nguồn vào thư mục /app |
| 5 | WORKDIR /app | Đặt thư mục làm việc |
| 6 | CMD ["python3", "main.py"] | Thiết lập lệnh mặc định khi chạy |
Mô hình:
Layer 6: CMD ["python3", "main.py"]
Layer 5: WORKDIR /app
Layer 4: COPY . /app
Layer 3: RUN apt-get install -y python3
Layer 2: RUN apt-get update
Layer 1: FROM ubuntu:20.04
Khi Container chạy:
Docker sẽ tạo thêm container layer (read-write) ở trên cùng:
Container Layer (read-write)
└── Layer 6
└── Layer 5
└── Layer 4
└── Layer 3
└── Layer 2
└── Layer 1
Mọi thay đổi khi container đang chạy:
- Sẽ chỉ ghi lên container layer.
- Ví dụ: cài thêm Vim, sửa file → chỉ ảnh hưởng container layer.
- Khi xóa container, layer này bị xóa → image gốc không đổi.