Ở phần 1 và 2 chúng ta đã tìm hiểu Docker, docker image, docker container là gì. Ở phần 3 này, chúng ta sẽ tìm hiểu về dockerfile, cấu trúc cơ bản của một dockerfile sẽ như nào.
Dockerfile là gì?
Dockerfile là một file văn bản đơn giản chứa tập hợp các lệnh hướng dẫn Docker build ra một image.
Thay vì cài thủ công môi trường, bạn chỉ cần viết một Dockerfile, Docker sẽ tự động thực hiện toàn bộ quá trình tạo môi trường chạy ứng dụng.
Đây là bước quan trọng để đảm bảo ứng dụng của bạn có thể reproducible – build ra cùng một môi trường ở mọi nơi.
Cấu trúc cơ bản của Dockerfile
Dockerfile
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
Giải thích:
FROM
: image gốc.WORKDIR
: thư mục làm việc trong container.COPY
: sao chép file từ máy host vào image.RUN
: chạy lệnh (ví dụ: cài đặt dependency).EXPOSE
: mở cổng.CMD
: lệnh mặc định khi container khởi chạy.
Build image từ Dockerfile
Để build image từ dockerfile, chúng ta dùng câu lệnh phía dưới:
docker build -t ten-image .
Docker Volume là gì?
Volume là một cách để Docker lưu trữ dữ liệu bên ngoài container.
Bởi vì khi bạn xóa một container, mọi dữ liệu bên trong nó sẽ mất. Volume giúp bạn giữ lại dữ liệu dù container có bị xóa hay khởi động lại.
Tại sao cần Volume?
- Dữ liệu quan trọng như database, file upload, logs… cần được lưu giữ lâu dài.
- Volume tách biệt dữ liệu với container, giúp dễ dàng:
- Backup & restore.
- Chia sẻ dữ liệu giữa các container.
- Quản lý storage độc lập.
Cách tạo và sử dụng Volume
Tạo volume:
docker volume create my-volume
Gắn volume vào container:
docker run -v my-volume:/data my-image
Docker sẽ gắn volume my-volume
vào thư mục /data
trong container. Tất cả dữ liệu ghi vào /data
sẽ được lưu giữ bên ngoài container.
Bạn cũng có thể mount trực tiếp một thư mục từ host:
docker run -v $(pwd)/data:/app/data my-image
Docker Networking
Docker cung cấp hệ thống mạng nội bộ để các container có thể giao tiếp với nhau một cách an toàn và hiệu quả.
Các kiểu mạng phổ biến trong Docker:
Loại mạng | Mô tả |
bridge | Mặc định, dùng cho giao tiếp giữa các container cùng network |
host | Container dùng trực tiếp network của host (máy thật) |
none | Không có mạng (dành cho container bị cô lập hoàn toàn) |
Tạo network riêng và gắn container vào:
Tạo network:
docker network create my-network
Chạy container và gắn vào network:
docker run --network my-network --name my-app my-image
Các container trong cùng my-network
có thể gọi nhau bằng tên (hostname). Ví dụ:
curl http://my-database:5432
Đây là cách rất phổ biến trong mô hình microservices, khi bạn muốn các container giao tiếp nội bộ mà không cần expose ra ngoài.
Tổng kết
- Dockerfile giúp chuẩn hóa và tự động hóa việc tạo Docker image.
- Dễ bảo trì, dễ chia sẻ.
- Là bước quan trọng để đưa ứng dụng vào container.
- Volume là cách lưu trữ dữ liệu bền vững, không bị mất khi container tắt hoặc xóa.
- Docker Network giúp các container liên lạc với nhau an toàn, dễ kiểm soát, đặc biệt hữu ích trong kiến trúc microservices.
Volume giữ dữ liệu. Network kết nối container. Cả hai là thành phần không thể thiếu khi xây dựng ứng dụng thực tế với Docker.
Tham khảo: Docker: Accelerated Container Application Development