Chào bạn, dưới đây là hướng dẫn chi tiết từng bước để bạn có thể làm chủ Docker, từ việc cài đặt trên các nền tảng phổ biến như Windows 11 và Ubuntu 22.04, cho đến việc triển khai một cụm ứng dụng hoàn chỉnh sử dụng Docker Compose.
1. Triển Khai Docker trên Windows 11 và Ubuntu 22.04
Việc cài đặt Docker là bước đầu tiên và quan trọng nhất. Dưới đây là hướng dẫn cho hai hệ điều hành phổ biến:
Trên Windows 11:
Docker Desktop là cách dễ dàng nhất để có Docker trên Windows. Nó tích hợp WSL 2 (Windows Subsystem for Linux) để mang lại trải nghiệm tốt nhất.
- Yêu cầu hệ thống:
- Windows 11 phiên bản 64-bit: Home, Pro, Enterprise, hoặc Education.
- Bật tính năng ảo hóa trong BIOS/UEFI.
- Ít nhất 4GB RAM.
- Các bước cài đặt:
- Tải Docker Desktop: Truy cập trang web chính thức của Docker (https://www.docker.com/products/docker-desktop/) và tải về trình cài đặt cho Windows. Lưu ý xem bản OS của bạn là 64 hay 32 và chọn cho phù hợp.
- Chạy trình cài đặt: Mở file
.exevừa tải về. Trong quá trình cài đặt, hãy chắc chắn rằng bạn đã chọn tùy chọn “Use WSL 2 instead of Hyper-V”. - Khởi động lại máy tính: Sau khi cài đặt hoàn tất, khởi động lại máy tính của bạn.
- Khởi động Docker Desktop: Docker Desktop sẽ tự động khởi động sau khi bạn đăng nhập lại. Biểu tượng cá voi Docker sẽ xuất hiện trên thanh tác vụ.
- Kiểm tra cài đặt: Mở PowerShell hoặc Command Prompt và gõ lệnh sau:
- docker –version
Trên Ubuntu 22.04:
Trên Linux, chúng ta sẽ cài đặt Docker Engine từ kho lưu trữ chính thức của Docker.
- Các bước cài đặt:
- Cập nhật hệ thống: “
sudo apt update && sudo apt upgrade -y“ - Cài đặt các gói cần thiết: “
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common“ - Thêm Docker’s official GPG key: “
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg“ - Thêm kho lưu trữ Docker: “
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null“ - Cài đặt Docker Engine: “
sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io“ - Thêm người dùng hiện tại vào nhóm
docker(để không cầnsudomỗi khi chạy lệnh docker): “sudo usermod -aG docker ${USER}"–>Bạn cần đăng xuất và đăng nhập lại để thay đổi này có hiệu lực. - Kiểm tra cài đặt:
docker --version
- Cập nhật hệ thống: “
2 .Dùng Portainer Enterprise để quản lý các Host (Bài này mình làm trên Ubuntu)
- Tạo một volume để lưu trữ dữ liệu của Portainer:
- docker volume create portainer_data
- Chạy Portainer Server:
- docker run -d -p 8000:8000 -p 9443:9443 –name portainer –restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data_portainer/portainer-ce:latest
p 9443:9443: Port cho giao diện web HTTPS.-p 8000:8000: Port cho tunnel (không cần thiết trong trường hợp này nhưng nên có).-v /var/run/docker.sock...: Cho phép Portainer quản lý Docker trên chính host này.
- Kết nối hai Host trong Portainer:
- Mở trình duyệt và truy cập vào giao diện Portainer trên máy Ubuntu:
https://<IP_CUA_MAY_UBUNTU>:9443. - Tạo tài khoản admin lần đầu đăng nhập.
- Trong giao diện chính, chọn Environments -> Add environment.
- Chọn Docker Standalone và nhấn Start Wizard.
- Chọn Agent. Đặt tên cho môi trường (ví dụ:
Docker-Windows) và nhập địa chỉ IP của máy Windows vào ô Environment URL (ví dụ:<IP_CUA_MAY_WINDOWS>:9001). - Nhấn Connect. Giờ đây bạn có thể chuyển đổi giữa hai môi trường (local Ubuntu và remote Windows) từ menu của Portainer.
- Mở trình duyệt và truy cập vào giao diện Portainer trên máy Ubuntu:
- docker run -d -p 8000:8000 -p 9443:9443 –name portainer –restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data_portainer/portainer-ce:latest
- Tạo một Registry Local (Ví dụ ở đây Nginx).
- Bước 1: Chạy Registry Local
- Đầu tiên, bạn cần khởi chạy một container từ image
registrychính thức. Container này sẽ hoạt động như một máy chủ lưu trữ các image Docker của riêng bạn.- docker run -d -p 5000:5000 –restart=always –name local-registry registry:2
- Bước 2: Lấy và Tag Image Nginx
- Bây giờ, bạn cần một image để đẩy lên registry vừa tạo. Chúng ta sẽ sử dụng image Nginx chính thức từ Docker Hub.
- Kéo (pull) image Nginx về máy: (Tự động kéo từ trang chủ docker về)
- docker pull nginx:latest
- Tag lại image:
- Để đẩy một image lên registry local, bạn cần “tag” (gắn thẻ) nó với một cái tên mới theo định dạng
[địa_chỉ_registry]/[tên_image]. Vì registry đang chạy trên chính máy của bạn (localhost) ở port 5000, địa chỉ sẽ làlocalhost:5000. - Chạy lệnh sau để tag lại image
nginx:latest: - docker tag nginx:latest localhost:5000/my-nginx
nginx:latest: Image gốc.localhost:5000/my-nginx: Tên mới của image, trỏ đến registry local của bạn.my-nginxlà tên bạn tự đặt.
- Để đẩy một image lên registry local, bạn cần “tag” (gắn thẻ) nó với một cái tên mới theo định dạng
- Bước 3: Đẩy (Push) Image lên Registry Local
- Khi đã tag xong, bạn chỉ cần đẩy image với tên mới này lên registry.
- docker push localhost:5000/my-nginx
- Nếu lệnh chạy thành công, bạn sẽ thấy output cho thấy các layer của image đang được đẩy lên
- Khi đã tag xong, bạn chỉ cần đẩy image với tên mới này lên registry.
- Bước 4: Kiểm tra lại 🧐
- Để chắc chắn rằng image đã được lưu trữ thành công trên registry local, bạn có thể thực hiện các bước sau:
- Xóa các image Nginx khỏi bộ nhớ cache của Docker trên máy:
docker rmi nginx:latest docker rmi localhost:5000/my-nginx - Kéo (pull) lại image từ chính registry local của bạn:
docker pull localhost:5000/my-nginx - Chạy container từ image vừa kéo về để xác nhận:
docker run --rm -d -p 8081:80 --name test-nginx localhost:5000/my-nginx
- Xóa các image Nginx khỏi bộ nhớ cache của Docker trên máy:
- Bây giờ, hãy mở trình duyệt và truy cập vào
http://localhost:8081. Nếu bạn thấy trang chào mừng của Nginx, điều đó có nghĩa là bạn đã tạo thành công registry local và đã đẩy/kéo image Nginx từ đó một cách thành công! 🎉
- Để chắc chắn rằng image đã được lưu trữ thành công trên registry local, bạn có thể thực hiện các bước sau:
- Đầu tiên, bạn cần khởi chạy một container từ image
- Bước 1: Chạy Registry Local
- Viết Dockerfile và triển khai dự án Shopping-Cart (Java Spring Boot)
- ## Phần 0: Chuẩn bị Môi trường (Bạn chỉ cần làm 1 lần) 🛠️
Cài đặt Java Development Kit (JDK)
https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html
Sử dụng edit và biên dịch bằng Visual Core.
Cài đặt Docker Desktop for Windows
Tạo tài khoản Docker Hub (tự tạo và đăng nhập docker hub).
## Phần 1: Tạo dự án Spring Boot “Shopping Cart” Đơn giản 🏗️
Bước 1: Truy cập https://start.spring.io/
Bước 2: Cấu hình dự án như sau:Bạn có thể tạo dự án Spring Boot bằng cách sử dụng Spring Initializr, chọn các dependencies như:
Spring Web
Spring Data JPA
H2 Database (hoặc MySQL/PostgreSQL nếu bạn muốn dùng cơ sở dữ liệu khác)
Spring Boot DevTools (tùy chọn)
Bước 2: Nhấn nút GENERATE. Một file .zip sẽ được tải về.
Bước 3: Giải nén file shopping-cart.zip ra một thư mục nào đó.
Bước 4: Mở VS Code, chọnFile > Open Folder...và chọn thư mụcshopping-cartbạn vừa giải nén.
· Bước 5: Mở VS Code, chọnFile > Open Folder...và chọn thư mụcshopping-cartbạn
## Phần 2: Viết “Bản thiết kế” – Dockerfile 📝
1. Viết Dockerfile ⚙️
Tạo Dockerfile trong thư mục gốc của dự án Spring Boot:
# Bước 1: Chọn image nền từ Docker Hub
FROM openjdk:17-jdk-slim
# Bước 2: Thiết lập thư mục làm việc trong container
WORKDIR /app
# Bước 3: Sao chép file JAR của Spring Boot vào container
COPY target/shopping-cart-0.0.1-SNAPSHOT.jar app.jar
# Bước 4: Mở cổng cho container (thường Spring Boot chạy trên cổng 8080)
EXPOSE 8080
# Bước 5: Chạy ứng dụng Spring Boot khi container khởi động
ENTRYPOINT [“java”, “-jar”, “app.jar”]
· Giải thích các bước:
FROM openjdk:17-jdk-slim: Sử dụng OpenJDK 17 là môi trường chạy Java.
WORKDIR /app: Thiết lập thư mục làm việc là /app.
COPY target/shopping-cart-0.0.1-SNAPSHOT.jar app.jar: Sao chép file JAR đã build vào container.
EXPOSE 8080: Mở cổng 8080 cho ứng dụng Spring Boot.
ENTRYPOINT [“java”, “-jar”, “app.jar”]: Chạy file JAR khi container bắt đầu.
2.Xây dựng ứng dụng Spring Boot:
Chạy lệnh sau trong terminal để tạo file JAR từ mã nguồn:
./mvnw clean package
3. Đóng gói Image 📦
docker build -t hoatrancntt/shopping-cart:latest .
4.Kiểm tra images đã build –dùng lên : docker images.
5: Public Docker Image lên Docker Hub 
- ## Phần 0: Chuẩn bị Môi trường (Bạn chỉ cần làm 1 lần) 🛠️
5. Viết Dockerfile và triển khai dự án Shopping-Cart (Java Spring Boot)
– Viết Dockerfile và triển khai dự án Shopping-Cart dùng Java sprint boost trên:
+ Viết Dockerfile
+ Đóng gói image
+ Public image lên docker hub
+ Docker Linux
– Triển khai một cụm docker-compose đầy đủ:
+ Backup end
+ Frond end
+ Health check
5.1 Cấu trúc dự án (ví dụ)
Tạo dự án trên https://start.spring.io:
- Project: Maven
- Language: Java
- Spring Boot: 3.x+
- Dependencies:
- Spring Web
- Spring Boot DevTools
- Spring Boot Actuator
shopping-cart/
├── backend/
│ ├── Dockerfile
│ └── target/shopping-cart-0.0.1-SNAPSHOT.jar
├── frontend/
│ ├── Dockerfile
│ └── build/
├── docker-compose.yml
5.2 Viết Dockerfile cho Backend (Spring Boot)
–> Sau khi tải file từ spring.io –> giải nén –> coppy vào backend.
Trong backend tạo Dockerfile
FROM eclipse-temurin:17-jdk-alpine
WORKDIR /app
COPY target/shopping-cart-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT [“java”, “-jar”, “app.jar”]
5.3 Build & Push Image lên Docker Hub
cd backend
./mvnw clean package -DskipTests
docker build -t yourdockerhubusername/shopping-cart-backend:latest .
5.4 Push lên docker Hub
docker login
docker push yourdockerhubusername/shopping-cart-backend:latest
5.6 Phần Frontend.
frontend/Dockerfile
FROM nginx:alpine
COPY build/ /usr/share/nginx/html
EXPOSE 80
Build & Push
cd frontend
docker build -t yourdockerhubusername/shopping-cart-frontend:latest .
docker push yourdockerhubusername/shopping-cart-frontend:latest
5.7 Tạo docker-compose.yml
version: ‘3.8’
services:
backend:
image: yourdockerhubusername/shopping-cart-backend:latest
container_name: shopping-backend
ports:
– “8080:8080”
healthcheck:
test: [“CMD”, “curl”, “-f”, “http://localhost:8080/actuator/health”]
interval: 30s
timeout: 10s
retries: 3
volumes:
– backend-data:/app/data
restart: always
frontend:
image: yourdockerhubusername/shopping-cart-frontend:latest
container_name: shopping-frontend
ports:
– “80:80”
depends_on:
backend:
condition: service_healthy
restart: always
volumes:
backend-data:
5.8 Chạy Docker Compose
docker-compose up -d
5.9 Kiểm tra & Health Check
Truy cập:
http://localhost:8080→ Backend Spring Boothttp://localhost→ Frontend Reacthttp://localhost:8080/actuator/health→ Health check