Docker cho Người Mới: Container Hóa Ứng Dụng To-Do List Đơn Giản
Container giống như hộp lồng cơm chứa code - đóng gói mọi thứ ứng dụng cần để chạy ở bất cứ đâu. Trong hướng dẫn này, chúng ta sẽ Docker hóa một ứng dụng Node.js to-do list cơ bản. Không cần kinh nghiệm Docker trước đó!
Những Gì Bạn Sẽ Học
- Cách tạo
Dockerfile
(công thức cho container). - Cách build Docker image (hộp cơm đóng gói).
- Cách chạy container ( thưởng thức hộp cơm).
Yêu Cầu Cần Có
- Cài Docker Desktop (cho macOS/Windows) hoặc Docker Engine (cho Linux).
- Hiểu biết cơ bản về terminal.
- Cài IDE (
môi trường phát triển tích hợp
), ví dụ Visual Studio Code
Nếu chưa biết về những thứ này, xem lại hướng dẫn trước của tôi
Bước 1: Tạo Ứng Dụng To-Do List
Đầu tiên, tạo ứng dụng Node.js đơn giản. Tạo thư mục todo-app
(hoặc tên khác, ví dụ docker-todo
) với hai file:
package.json
{
"name": "todo-app",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.18.2"
}
}
app.js
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Welcome to My To-Do List! 📝');
});
app.listen(port, () => {
console.log(`To-do app running at http://localhost:${port}`);
});
Ứng dụng này dùng Express.js để hiển thị thông điệp chào mừng.
Bước 2: Tạo Dockerfile
Dockerfile
là công thức hướng dẫn Docker build ứng dụng. Tạo file này trong thư mục project:
# Dùng image Node.js chính thức (như mượn một nhà bếp đã sẵn sàng)
FROM node:18
# Thiết lập thư mục làm việc trong container
WORKDIR /app
# Copy file package trước (giúp Docker cache dependencies)
COPY package*.json ./
# Cài dependencies (như mở túi tạp hóa)
RUN npm install
# Copy toàn bộ code ứng dụng
COPY . .
# Khai báo port ứng dụng dùng
EXPOSE 3000
# Khởi chạy ứng dụng (như bật lò nướng)
CMD ["npm", "start"]
Lưu Ý Chính:
COPY package*.json ./
đặt trướcCOPY . .
để tối ưu Docker layer caching.EXPOSE 3000
chỉ mang tính thông tin, nó không publish port ( ta sẽ xử lý sau).
Cấu trúc thư mục project của bạn sẽ như thế này:
Bước 3: Build Docker Image
Mở terminal trong thư mục todo-app
và chạy:
docker build -t todo-app:v1 .
-t todo-app:v1
đặt tên (todo-app
) và phiên bản (v1
) cho image.- Dấu
.
chỉ định Docker dùng thư mục hiện tại.
Thành công sẽ hiển thị:
Successfully built abc123xyz
Successfully tagged todo-app:v1
Bước 4: Chạy Container
Khởi chạy container ở chế độ detached (chạy nền):
docker run -d -p 3060:3000 --name my-todo-container todo-app:v1
- Thay
my-todo-container
bằng tên bạn muốn. -d
: Chế độ detached (giữ terminal tự do).-p 3060:3000
: Nối kết port 3060 máy bạn sang port 3000 container.--name
: Đặt tên container để dễ quản lý.
Kết quả nhận được:
Bước 5: Kiểm Tra Ứng Dụng
Mở trình duyệt truy cập http://localhost:3060
. Bạn sẽ thấy:
Ứng dụng tuy đơn giản nhưng giúp bạn hiểu nguyên lý build Docker image - đừng chê nhé!
Kiểm tra container đang chạy: (nếu dùng headless method)
docker ps
Bước 6: Dọn Dẹp
Dừng và xóa container khi xong: (nếu dùng headless method)
docker stop my-todo-container
docker rm my-todo-container
Hoặc xóa container qua nút tương tác trong Docker Desktop.
Mẹo Xử Lý Lỗi
- Xung Đột Port: Đổi port host nếu
3060
bận (vd:-p 3070:3000
). - Thiếu File: Kiểm tra lại file
package.json
vàapp.js
trong thư mục. - Không Tìm Thấy Image: Build lại với
docker build -t todo-app:v1 .
.
Tóm lược cách Docker hoạt động
- Dockerfile = Công thức
- Image = Hộp lồng cơm(immutable).
- Container = Khui hộp cơm ra ăn.
- Docker Hub = Cửa hàng tạp hóa có sẵn nhiều loại công thức.
Tiếp theo
- Thêm nhiều tính năng vào to-do app (ví dụ, lưu trữ task trong file JSON) - nếu bạn rảnh~
- Push image của bạn lên Dockerr Hub để chia sẻ nó~ - Nếu mà có bao giờ bạn build được cái gì đó hay ho~
- Học
docker compose
để chạy ứng đụng multi-container.
Mẹo cuối: Chạy lệnh docker system prune
định kỳ để dọn dẹp những images và containers không dùng.
Giờ bạn đã Dockerired app đầu tiên của mình rồi đó! 🐳
Gặp lại bạn vào post sau!