Docker Image và Docker Hub là gì?
1. Giới thiệu
Trong quá trình triển khai và quản lý ứng dụng bằng Docker, Docker Image và Docker Hub là hai thành phần quan trọng giúp việc đóng gói, lưu trữ và triển khai ưng dựng trở lên nhanh chóng, và thuật tiện hơn.
Docker Image là một mẫu đóng gói sẵn các thành phần cần thiết để chạy ứng dụng, bao gồm mã nguồn, thư viện và môi trường thực thi. Từ một Docker image, chúng ta có thể tạo ra nhiều Docker container.
Docker Hub là nền tảng lữu trữ và chia sẻ Docker Image trực tuyến, cho phép người dùng tìm kiếm, tải xuống và sử dụng các image có sẵn như Nginx, MySQL, Ubuntu và Redis.
Trong bài viết này, chúng ta sẽ cùng tìm hiểu Docker Image và Docker Hub là gì, cách hoạt động cũng như thực hành các lệnh cơ bản để tải, quản lý và sử dụng Docker Image trên máy chủ Linux.
2. Docker Image là gì
Docker Image là một bản đóng gói chứa những thành phần cần thiết để chạy một ứng dụng, chẳng hạn như mã nguồn, thư viện, môi trường runtime và cấu hình mặc định.
Ví dụ, bạn muốn triển khai một website sử dụng Nginx. Thay vì cài đặt Nginx trực tiếp lên VPS, bạn có thể sử dụng Docker Image của Nginx để tạo một container chạy web server.

Docker Image và Docker Container khác nhau như thế nào?
| Docker Image | Docker container |
| Là bản đóng gói ứng dụng | Là môi trường chạy được tạo từ image |
| Không thay đổi trực tiếp khi chạy | Có trạng thái và dữ liệu ghi riêng |
| Dùng để tạo container | Dung để thực thi ứng dụng |
| Có thể lưu trên Docker Hub | Chạy trên máy có Docker Engine |
Ví dụ:
- Docker image giống như bộ cài đặt ứng dụng.
- Docker Container giống như một ứng dụng đang được cài đặt và chạy từ bộ cài đặt đó.
Một Docker Image có thể tạo ra nhiều container độc lập.
3. Docker Hub là gì?
Docker Hub là dịch vụ lưu trữ và phân phối Docker Image trực tuyến do Docker cung cấp.
Website chính thức: Docker Hub

Docker Hub cho phép người dùng tìm kiếm, tải xuống, lưu trữu và chia sẻ Docker Image.
Ví dụ: Khi bạn muốn triển khai Nginx, MySQL, Resdis hoặc WordPress, bạn có thể tìm Imgae phù hợp trên Docker Hub thay vì tự xây dựng mọi thứ từ đầu.
Docker image phổ biến:
| Image | Công dụng |
| Nginx | Web Server |
| mysql | Quản trị cơ sở dữ liệu |
| redis | Cache và lưu trữu dữ liệu |
| wordpress | Website WordPress |
| ubuntu | Môi trường ubuntu |
| node | Chạy ứng dụng node.js |
Docker Image và Docker Hub hoạt động như thế nào?
Quy trình hoạt động:
- Tìm Docker Image trên Docker Hub.
- Sử dụng docker pull để tải image về máy.
- Sử dụng docker run để tạo và chạy container.
- Docker Engine sử dụng image đã tải để khởi tạo môi trường và chạy ứng dụng.

4. Tải Docker Image từ Docker Hub
Bước 1: Cài Docker
Nếu VPS bạn chưa cài Docker bạn có thể tham khảo tài liệu dưới đây
Hướng Dẫn Cài Đặt Docker và Docker Compose Trên Ubuntu 24.04
Bước 2: Tìm Docker Image Nginx
vNode Tutorial
docker search nginx
Lệnh này tìm kiếm các image liên quan đến Nginx trên Docker Hub.
Bạn sẽ thấy thông tin như tên image, mô tả và trạng thái image chính thức.

Bước 3: Tải Docker Image
vNode Tutorial
docker pull nginx:latest
Giải thích:
- docker: Công cụ dòng lệnh Docker.
- pull: Tải image từ registry.
- nginx: Tên image
- latest: Tag của image.
Lưu ý: Latest không đảm bảo là phiên bản phần mềm mới nhất theo số phiên bản. Khi triển khai production, nên chọn tag phiên bản cụ thể và kiểm thư trước khi cập nhật.

Bước 4: Kiểm tra Docker Image đã tải
vNode Tutorial
docker images
Giải thích:
| Thông số | Ý nghĩa |
| REPOSITORY | Tên image |
| TAG | Nhãn phiên bản |
| IMAGE ID | Mã định danh image |
| CREATED | Thời điểm tạo image |
| SIZE | Dung lượng image |

Bước 5: Xem thông tin chi tiết thông tin image
vNode Tutorial
docker image inspect nginx:latest
Lệnh này hiện thị cấu hình và metadata của image dưới dạng JSON.
Bạn cũng có thể xem layer tạo nên image:
vNode Tutorial
docker history nginx:latest
Bước 6: Xóa Docker Image
vNode Tutorial
docker rmi nginx:latest
Nếu image đang được một container sử dụng, Docker có thể không cho xóa. Bạn cần kiểm tra container liên quan trước khi thực hiện.

5. Tạo Docker Container và image
Bước 1: Tạo container Nginx
vNode Tutorial
docker run -d --name web-nginx -p 8080:80 nginx:latest
Giải thích:
| Tham số | Chức năng |
| docker run | Tạo và chạy container |
| -d | Chạy ở chế độ nền |
| –name web-nginx | Đặt tên container |
| -p 8080:80 | Ánh xạ cổng 8080 đến mấy chủ cổng 80 cuat container |
| nginx:latest | Image sử dụng |
Nếu image chưa có trên máy, Docker sẽ tự động tải image từ registry được cấu hình.

Bước 2: Kiểm tra container
vNode Tutorial
docker ps

Bước 3: Truy cập vào website
Truy cập: http://IP-VPS:8080
Thay IP-VPS thành IP VPS của bạn

Bước 4: Xem log container
vNode Tutorial
docker logs web-nginx
Theo dõi log liên tục:
vNode Tutorial
docker logs -t web-nginx
Nhấn Ctrl+C để thoát khỏi chế độ theo dõi log.
Bước 5: Dừng và khởi động container
Dừng container:
vNode Tutorial
docker stop web-nginx
Khởi động lại:
vNode Tutorial
docker start web-nginx
Xóa container:
vNode Tutorial
docker stop web-nginx docker rm web-nginx
Đến đây bạn đã hoàn thành quá trình tải Docker Image và triển khai một ứng dụng web bằng Docker Container.
6. Tự tạo Docker Image bằng Dockerfile
Bước 1: Tạo thư mục dự án
vNode Tutorial
mkdir docker-image-lab cd docker-image-lab
Bước 2: Tạo file website
Tạo file index.html
vNode Tutorial
cat > index.html <<'EOF'
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<title>Docker Image Lab</title>
</head>
<body>
<h1>Xin chào Docker!</h1>
<p>Website đang chạy bằng Docker Image tự tạo.</p>
</body>
</html>
EOFBước 3: Tạo Dockerfile
Trong thư mục dự án, tạo file tên chính xác là Dockerfile (Không có phần mở rộng)
vNode Tutorial
cat > Dockerfile <<'EOF' FROM nginx:stable-alpine COPY index.html /usr/share/nginx/html/index.html EXPOSE 80 EOF
Giải thích các câu lệnh:
-
FROM: Sử dụng image Nginx làm nền tảng.
-
COPY: Sao chép file HTML từ máy tính vào image.
-
EXPOSE: Khai báo ứng dụng sử dụng cổng 80. Lệnh này không tự mở cổng ra ngoài.
Cấu trúc thư mục:
docker-image-lab/
├── Dockerfile
└── index.html
Bước 4: Build Docker Image
vNode Tutorial
docker build -t my-website:v1 .
Trong đó:
- build: Tạo image từ file Dockerfile.
- -t: Đặt tên và tag cho image.
- my-website: Tên image.
- v1: Phiên bản image.
- .: Sử dụng thư mục hiện tại làm build context.

Bước 5: Kiểm tra image
vNode Tutorial
docker images
Bạn sẽ thấy image my-website với tag v1.

Bước 6: Chạy website
vNode Tutorial
docker run -d --name my-web -p 8080:80 my-website:v1

Truy cập: http://IP_VPS:8080. Thay IP_VPS thành IP VPS của bạn.
Nếu website hiển thị dòng chữ Xin chào Docker!, bạn đã tự build Docker Image thành công.

7. Đẩy Docker Image lên Docker Hub
Bước 1: Đăng ký Docker Hub
Mở trình duyệt và truy cập Docker Hub. Đăng ký hoặc đăng nhập tài khoản Docker Hub.

Bước 2: Tạo Repository trên Docker Hub
Trên giao diện Docker Hub:
Chọn Repositories

Chọn create a repository

Nhập tên repository là my-website => Chọn Public để có thể tải image công khai => Nhấn Create

Bước 3: Đăng nhập Docker Hub từ VPS
Quay lại Terminal SSH trên VPS:
vNode Tutorial
docker login
Docker có thể yêu cầu bạn xác thực bằng trình duyệt thông qua mã thiết bị.
Quay lại Terminal VPS, Docker sẽ hiển thị Login Succeeded.

Bạn cũng có thể đăng nhập bằng username:
vNode Tutorial
docker login -u YOUR_USERNAME
Thay YOUR_NAME bằng username Docker Hub của bạn. Nếu được yêu cầu mật khẩu, Nếu sử dụng Personal Access Token.
Bước 4: Đặt tag cho Docker image
Hiện tại image trên VPS của bạn là:
vNode Tutorial
my-website:v1
Để đẩy lên Docker Hub, bạn cần gắn tên repository thuộc tài khoản của mình:
vNode Tutorial
docker tag my-website:v1 YOUR_NAME/my-website:v1
Ví dụ nếu username là hatt0904:
vNode Tutorial
docker tag my-website:v1 hatt0904/my-website:v1
Kiểm tra:

Bạn sẽ thấy hai tên image cùng tham chiếu đến một Image ID
Bước 5: Đẩy image lên Docker Hub
vNode Tutorial
docker push YOUR_NAM/my-website:v1
Ví dụ:
vNode Tutorial
docker push hatt0904/my-website:v1
Sau khi push thành công, truy cập Docker Hub trên trình duyệt, mở repository my-website và kiểm tra tag v1.

Kết luận
Qua bài hướng dẫn trên, chúng ta đã tìm hiểu được các khái niệm cơ bản về Docker Image và Docker Hub, đồng thời thực hành các thao tác như tìm kiếm, tải xuống, quản lý và tự xây dựng Docker Image bằng Dockerfile.
Bên cạnh đó, chúng ta cũng đã thực hành tạo Docker Container để chạy website Nginx, đăng nhập Docker Hub và đẩy Docker Image tự tạo lên repository để lưu trữ và chia sẻ.
Việc sử dụng Docker Image và Docker Hub giúp quá trình đóng gói, quản lý và triển khai ứng dụng trở nên đơn giản, nhanh chóng và thuận tiện hơn, đặc biệt khi cần triển khai ứng dụng trên nhiều máy chủ khác nhau.
