.## 1. Giới thiệu
Khi thiết lập môi trường phát triển trên Ubuntu, những tình huống bạn nghĩ “tạm thời cài Docker thôi” ngày càng trở nên phổ biến. Các ứng dụng web, xử lý batch, cơ sở dữ liệu thử nghiệm, middleware thử nghiệm… Nếu bạn phải cài đặt chúng thủ công mỗi lần, sẽ tốn rất nhiều thời gian và công sức chỉ để chuẩn bị môi trường.
Đây là lúc công nghệ ảo hoá container Docker trở nên vô cùng hữu ích. Với Docker, bạn có thể quản lý không chỉ ứng dụng mà còn tất cả các thư viện và cấu hình cần thiết dưới dạng một “image”. Khi Docker đã được cài đặt trên Ubuntu, bạn có thể dễ dàng:
- Khởi chạy một môi trường phát triển mới trong vài phút
- Đảm bảo mọi thành viên trong nhóm có thể tái tạo hành vi trong cùng một môi trường
- Tái tạo một môi trường giống như production trên máy cục bộ một cách dễ dàng
Những lợi ích này có thể được tận hưởng với ít nỗ lực.
Ngược lại, đối với những người mới dùng Docker, có rất nhiều điểm khó khăn thường gặp:
- Không biết quy trình cài đặt nào thực sự đúng
- Không hiểu sự khác biệt giữa kho lưu trữ mặc định của Ubuntu và kho lưu trữ chính thức của Docker
- Gặp lỗi quyền do nhầm lẫn khi nào nên dùng
sudo
Khi bạn tìm kiếm “ubuntu install docker”, sẽ thấy rất nhiều bài viết liệt kê dãy lệnh dài, nhưng chúng thường không giải thích tại sao các bước đó cần thiết hoặc điều gì đánh dấu một cài đặt hoàn chỉnh.
- 1 2. Điều kiện tiên quyết và Chuẩn bị
- 2 3. Cài đặt Docker
- 3 4. Quyền người dùng và chạy Docker mà không cần sudo
- 4 5. Kiểm Tra Khởi Động và Hoạt Động
- 5 6. Cài Đặt và Sử Dụng Docker Compose
- 6 7. Các cân nhắc về bảo mật và vận hành
- 6.1 7-1. Nhóm docker có quyền “gần như root”
- 6.2 ● Các điểm cần lưu ý
- 6.3 7-2. Xem xét Docker không có quyền root (Tùy chọn nâng cao)
- 6.4 7-3. Dọn dẹp các Image và Container không sử dụng
- 6.5 7-4. Tránh sử dụng thẻ “latest” trong môi trường sản xuất
- 6.6 7-5. Sử dụng Image gốc chính thức trong Dockerfile
- 6.7 7-6. Cẩn thận với việc phơi bày mạng và cổng
- 6.8 7-7. Quản lý log khi xảy ra lỗi
- 7 8. Các vấn đề thường gặp và khắc phục
1-1. Mục tiêu của Bài viết này
Bài viết này hướng tới những độc giả muốn cài Docker trên Ubuntu, và bao gồm các điểm chính sau:
- Quy trình hiện đang phổ biến để cài Docker trên Ubuntu
- Một phương pháp cài đặt dễ quản lý hơn bằng kho lưu trữ chính thức
- Cách chạy lệnh
dockermà không cầnsudo - Kiểm tra sau cài đặt và các lệnh cơ bản thiết yếu
- Giới thiệu về các công cụ thường dùng như Docker Compose
Thay vì chỉ liệt kê các lệnh, hướng dẫn này giải thích tại sao mỗi bước lại cần thiết, giúp bạn duy trì môi trường dễ dàng hơn trong tương lai.
1-2. Đối tượng và Điều kiện tiên quyết
Bài viết này dành cho những người đọc có các tiêu chí sau:
- Hiểu các thao tác cơ bản trên Ubuntu (mở terminal, dùng lệnh
apt, v.v.) - Là nhà phát triển hoặc kỹ sư mới muốn thử Docker lần đầu
- Đang cân nhắc chuyển các môi trường thử nghiệm hiện có sang container
Kiến thức quản trị Linux nâng cao không bắt buộc. Miễn là bạn thoải mái gõ lệnh trong terminal, hướng dẫn này sẽ đủ cho bạn.
1-3. Cấu trúc Bài viết và Cách Đọc
Bài viết sẽ tiến hành theo thứ tự sau:
- Kiểm tra các điều kiện tiên quyết
- Các phương pháp cài đặt (kho lưu trữ chính thức / dựa trên script)
- Cài đặt quyền và kiểm tra
- Cài đặt Docker Compose
- Xử lý sự cố và các bước tiếp theo
Bạn có thể đọc toàn bộ từ đầu đến cuối, hoặc nếu Docker đã được cài sẵn, chỉ cần tập trung vào các phần “Quyền” hoặc “Compose”.
2. Điều kiện tiên quyết và Chuẩn bị
Việc cài Docker bản thân nó khá đơn giản, nhưng tùy vào phiên bản Ubuntu hoặc môi trường hiện có, có một số điểm cần kiểm tra trước. Phần này tóm tắt các điều kiện tiên quyết và chuẩn bị cần thiết để cài đặt diễn ra suôn sẻ.
2-1. Các phiên bản Ubuntu được hỗ trợ
Docker hoạt động trên nhiều phiên bản Ubuntu, nhưng các bản phát hành LTS (Long Term Support) sau đây là được sử dụng phổ biến nhất:
- Ubuntu 22.04 LTS (Được khuyến nghị)
- Ubuntu 20.04 LTS
- Ubuntu 24.04 LTS (Mới nhất)
Các bản LTS cung cấp độ ổn định lâu dài, rất thích hợp để duy trì môi trường phát triển dựa trên Docker.
Các bản không phải LTS (như 23.10) cũng có thể dùng được, nhưng trong môi trường chuyên nghiệp thường ưu tiên các phiên bản LTS.
2-2. Các gói Docker đã được cài sẵn
.Ubuntu’s default repository includes a package called docker.io. However, this is not the official Docker package provided by Docker Inc., and updates tend to lag behind. Therefore, installing Docker from the official repository is strongly recommended.
Ubuntu’s default repository includes a package called docker.io. However, this is not the official Docker package provided by Docker Inc., and updates tend to lag behind. Therefore, installing Docker from the official repository is strongly recommended.
First, check and remove any existing Docker-related packages if necessary:
sudo apt remove docker docker.io containerd runc
If the message indicates that nothing is installed, no action is required.
2-3. Cập nhật APT và Cài đặt Các Gói Yêu cầu
Before adding Docker’s official repository, update APT and install required tools:
sudo apt update
sudo apt install -y ca-certificates curl gnupg
These tools are required to add Docker’s GPG key and repository securely.
2-4. Xác minh Quyền Quản trị (sudo)
Docker installation requires sudo privileges. If your account does not have sudo access, switch to an administrator account or request permission.
You can verify sudo access with the following command:
sudo -v
If you are prompted for a password and the command succeeds, you are ready to proceed.
2-5. Kiểm tra Kết nối Mạng
Installing Docker requires access to external repositories, so an active internet connection is mandatory. In corporate or proxy environments, GPG key retrieval may fail due to access restrictions.
In such cases, consult your network administrator regarding proxy settings or allowlist configurations.
2-6. Chọn Phương pháp Cài đặt
There are three main ways to install Docker:
- Cài đặt qua kho lưu trữ Docker chính thức (Được khuyến nghị)
- Sử dụng script cài đặt
get.docker.com(Nhanh và dễ dàng) - Tải xuống và cài đặt thủ công các gói Docker .deb (Trường hợp đặc biệt)
This article focuses primarily on the official repository method, which is the most common and easiest to maintain.
3. Cài đặt Docker
Now let’s install Docker on Ubuntu. Although multiple installation methods exist, this guide focuses on the official Docker repository method, which is the most reliable and widely used in production environments.
This method allows stable upgrades via apt upgrade, making it ideal for long-term use.
3-1. Thêm Kho lưu trữ Docker Chính thức (Được khuyến nghị)
First, register the official GPG key provided by Docker and add Docker’s repository to APT.
Once this is configured correctly, you can avoid accidentally installing the outdated docker.io package from Ubuntu’s default repository.
3-1-1. Đăng ký Khóa GPG
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
/etc/apt/keyrings/là vị trí lưu trữ khóa được khuyến nghị cho Ubuntu 22.04 trở lên--dearmorchuyển đổi khóa sang định dạng nhị phân
This step allows APT to trust the official Docker repository.
3-1-2. Thêm Kho lưu trữ
Next, add Docker’s repository to APT’s source list.
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Các điểm quan trọng:
$(. /etc/os-release && echo $VERSION_CODENAME)tự động chèn mã tên mã Ubuntu đúng (ví dụjammyhoặcfocal)- Chỉ thêm kho lưu trữ ổn định
3-1-3. Cập nhật Thông tin Kho lưu trữ
After adding the repository, update the APT index.
sudo apt update
At this point, docker-ce (Docker Engine) should appear as an installable package.
3-2. Cài đặt Docker Engine
Now install the main Docker packages.
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Vai trò của các gói:
.
- docker-ce : Lõi Docker Engine
- docker-ce-cli : Giao diện dòng lệnh Docker
- containerd.io : Runtime container cốt lõi được Docker sử dụng
- docker-buildx-plugin : Các tính năng xây dựng nâng cao như build đa nền tảng
- docker-compose-plugin : Docker Compose V2 (lệnh
docker compose)
Sau khi cài đặt, daemon Docker sẽ tự động khởi động.
3-3. Xác minh việc cài đặt
Kiểm tra trạng thái runtime của Docker bằng lệnh sau:
sudo systemctl status docker
Nếu bạn thấy active (running), Docker đang hoạt động bình thường.
Nhấn q để thoát khỏi chế độ xem trạng thái.
3-4. Tùy chọn: Cài đặt bằng script để tiện lợi
Docker cũng cung cấp một script cài đặt “tất cả trong một”.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Ưu điểm:
- Ít lệnh hơn và thiết lập nhanh chóng
- Thích hợp cho các môi trường đơn giản hoặc tạm thời
Nhược điểm:
- Khó kiểm soát phiên bản
- Thường không được khuyến khích cho môi trường production hoặc sử dụng lâu dài
Mặc dù tiện lợi cho người mới bắt đầu, bài viết này ưu tiên tính bảo trì và do đó tập trung vào phương pháp cài đặt từ kho chính thức.
3-5. Lưu ý cho các bản phát hành Ubuntu mới nhất (ví dụ: 24.04)
Ngay sau khi Ubuntu ra bản phát hành lớn, kho chính thức của Docker có thể chưa hỗ trợ đầy đủ phiên bản mới.
Trong những trường hợp này, hãy kiểm tra các mục sau:
- Vị trí và định dạng khóa GPG có khớp với các yêu cầu hiện hành không
VERSION_CODENAMEcó được Docker hỗ trợ chính thức không- Không có lỗi chữ ký nào xuất hiện khi chạy
apt update
Nếu hỗ trợ bị trì hoãn, việc tạm thời sử dụng script get.docker.com có thể là một giải pháp tạm thời thực tế.
4. Quyền người dùng và chạy Docker mà không cần sudo
Sau khi cài đặt Docker, bạn có thể muốn bắt đầu sử dụng lệnh docker ngay lập tức. Tuy nhiên, theo mặc định, bạn phải đặt tiền tố sudo cho mọi lệnh.
Hành vi này được thiết kế có chủ đích vì lý do bảo mật, nhưng lại gây bất tiện cho việc phát triển hàng ngày hoặc học tập. Để giải quyết, bạn có thể thêm người dùng của mình vào nhóm docker, cho phép thực thi các lệnh Docker mà không cần sudo.
4-1. Tại sao chạy không cần sudo lại quan trọng
Trên Ubuntu, daemon Docker (dockerd) chạy với quyền root.
Do đó, việc tạo hoặc xóa container bằng lệnh docker thường yêu cầu quyền root.
Nhóm docker được tạo ra để đáp ứng yêu cầu này.
- Người dùng thuộc nhóm này có thể truy cập trực tiếp daemon Docker
- Điều này cho phép các lệnh như
docker runmà không cầnsudo - Cấu hình này gần như là bắt buộc cho môi trường phát triển
Lưu ý rằng nhóm docker thực chất cấp các quyền gần như root, vì vậy cần thận trọng khi sử dụng trong môi trường chia sẻ.
(Đối với máy tính cá nhân hoặc WSL2, thường không có vấn đề.)
4-2. Thêm người dùng hiện tại vào nhóm docker
Thêm người dùng đang đăng nhập vào nhóm docker:
sudo usermod -aG docker $USER
Lệnh này sẽ thêm người dùng vào nhóm. Tuỳ chọn -aG có nghĩa là append to group (thêm vào nhóm).
4-3. Áp dụng thay đổi
Thay đổi thành viên nhóm sẽ có hiệu lực sau khi bạn đăng xuất và đăng nhập lại.
Để áp dụng ngay lập tức, bạn cũng có thể chạy:
newgrp docker
Lệnh này sẽ khởi động một phiên shell mới với quyền của nhóm docker đã được áp dụng.
4-4. Xác minh việc chạy không cần sudo
Bây giờ thử Docker mà không dùng sudo:
docker run hello-world
Kết quả thành công:
- Hello from Docker!
- Image đã được tải xuống và thông báo được hiển thị
Nếu gặp lỗi, hãy kiểm tra các mục sau:
- Bạn đã đăng xuất và đăng nhập lại sau khi thay đổi thành viên nhóm chưa?
- Đường dẫn
/usr/bin/dockercó đang được sử dụng không? - Daemon Docker có đang chạy không (
systemctl status docker)?
4-5. Các cân nhắc bảo mật (Quan trọng)
Nhóm docker cung cấp các quyền mạnh mẽ, thực chất tương đương với quyền root.
- Đọc bất kỳ tệp nào
- Gắn kết thư mục host vào container
- Thực hiện các thao tác mạng
- Kiểm soát hệ thống ở mức socket Docker
.Đây là cách chấp nhận được cho các hệ thống cá nhân, nhưng việc quản lý người dùng là rất quan trọng trên các máy chủ chia sẻ.
Trong những trường hợp như vậy, bạn có thể cân nhắc Docker không có quyền root (rootless Docker), được thảo luận trong các phần sau.
5. Kiểm Tra Khởi Động và Hoạt Động
Sau khi cài đặt Docker và cấu hình quyền, bước tiếp theo là xác minh Docker hoạt động đúng.
Phần này giải thích cách kiểm tra trạng thái dịch vụ Docker và thực sự chạy các container.
5-1. Kiểm Tra Trạng Thái Daemon Docker
Đầu tiên, xác nhận Docker đang chạy đúng trong nền.
sudo systemctl status docker
Các chỉ số trạng thái chính:
- active (running) → Hoạt động bình thường
- inactive → Không chạy (phải khởi động thủ công)
- failed → Lỗi cấu hình hoặc phụ thuộc
Nếu trạng thái là inactive hoặc failed, hãy khởi động Docker bằng lệnh sau:
sudo systemctl start docker
Để đảm bảo Docker tự động khởi động khi hệ điều hành khởi động:
sudo systemctl enable docker
5-2. Xác Minh Hoạt Động Bằng Container hello-world
Cách phổ biến nhất để xác minh việc cài đặt Docker là chạy image hello-world chính thức.
docker run hello-world
Lệnh này thực hiện các hành động sau:
- Tải image từ Docker Hub nếu chưa có sẵn trên máy cục bộ
- Khởi chạy một container từ image đó
- Hiển thị thông báo kiểm tra và thoát
Nếu thành công, bạn sẽ thấy đầu ra tương tự như dưới đây:
Hello from Docker!
This message shows that your installation appears to be working correctly.
Nếu thông báo này xuất hiện, Docker đã được cài đặt và hoạt động đúng.
5-3. Thử Các Lệnh Docker Cơ Bản
Sau khi xác nhận hoạt động cơ bản, hãy thử một số lệnh Docker thường dùng.
5-3-1. Liệt Kê Các Image Docker
docker images
Lệnh này hiển thị danh sách các image đã được tải về cục bộ. Nếu hello-world xuất hiện, mọi thứ đang hoạt động như mong đợi.
5-3-2. Kiểm Tra Các Container Đang Chạy
docker ps
Lệnh này liệt kê các container hiện đang chạy.
(Container hello-world sẽ thoát ngay lập tức và thường không xuất hiện.)
Để hiển thị cả các container đã dừng:
docker ps -a
5-3-3. Chạy Một Ví Dụ Image Chính Thức
Để thử một máy chủ web Nginx đơn giản:
docker run -d -p 8080:80 nginx
-d→ Chạy ở chế độ nền-p→ Ánh xạ cổng 8080 trên máy chủ tới cổng 80 trong container
Mở http://localhost:8080 trong trình duyệt để xem trang Nginx mặc định.
5-4. Dừng và Xóa Các Container
Bạn có thể dừng một container đang chạy bằng lệnh sau:
docker stop <container-id>
Để xóa một container:
docker rm <container-id>
Để xóa các image không còn dùng tới:
docker rmi <image-id>
Hãy nhớ rằng các phụ thuộc tuân theo thứ tự container → image → volume, vì vậy hãy xóa chúng một cách cẩn thận.
5-5. Nguyên Nhân Thường Gặp Khi Gặp Lỗi
● Lỗi Quyền
Got permission denied while trying to connect to the Docker daemon socket
→ Người dùng chưa được thêm vào nhóm docker
● Daemon Docker Không Chạy
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
→ Khởi động Docker bằng systemctl start docker
● Vấn Đề Mạng Ngăn Cản Việc Tải Image
→ Kiểm tra cài đặt proxy, cấu hình DNS, hoặc các hạn chế mạng
● Gói docker.io Cũ Vẫn Được Cài Đặt
→ Gỡ bỏ hoàn toàn và cài lại Docker từ kho chính thức
6. Cài Đặt và Sử Dụng Docker Compose
Một công cụ thiết yếu để làm việc với Docker ở quy mô lớn là Docker Compose.
Các ứng dụng web hiện đại thường bao gồm nhiều thành phần như cơ sở dữ liệu, bộ nhớ đệm, worker và máy chủ web. Việc quản lý chúng riêng lẻ bằng các lệnh docker run nhanh chóng trở nên không thực tế.
Docker Compose cho phép bạn định nghĩa nhiều cấu hình container trong một file duy nhất và quản lý chúng cùng nhau, khiến nó trở thành một trong những công cụ được sử dụng rộng rãi nhất trong phát triển thực tế.
markdown.### 6-1. Xác minh việc cài đặt Docker Compose V2
Khi cài đặt Docker từ kho chính thức, Docker Compose được cài đặt tự động dưới dạng plugin.
Xác minh việc cài đặt bằng lệnh sau:
docker compose version
Nếu cài đặt thành công, bạn sẽ thấy đầu ra tương tự như:
Docker Compose version v2.x.x
Nếu bạn gặp lỗi như docker: 'compose' is not a docker command, hãy cài đặt plugin thủ công:
sudo apt install docker-compose-plugin
6-2. Lợi ích của Docker Compose
Các ưu điểm chính của Docker Compose bao gồm:
- Quản lý thống nhất nhiều container (khởi động, dừng, khởi động lại)
- Cấu hình dưới dạng mã , đảm bảo môi trường có thể tái tạo
- Dễ dàng chia sẻ các thiết lập ứng dụng, API và cơ sở dữ liệu
- Khởi chạy môi trường phát triển chỉ với một lệnh
docker compose up
Điều này khiến Docker Compose gần như không thể thiếu cho việc phát triển ứng dụng.
6-3. Cấu trúc cơ bản của tệp cấu hình Compose
Docker Compose sử dụng tệp có tên docker-compose.yml (hoặc compose.yaml) để định nghĩa các service.
Lấy một ví dụ tối thiểu, tạo một cấu hình đơn giản để khởi chạy Nginx.
services:
web:
image: nginx:latest
ports:
- "8080:80"
Chạy lệnh sau trong thư mục chứa tệp:
docker compose up -d
Nginx sẽ khởi động ở chế độ nền. Truy cập http://localhost:8080 trong trình duyệt để xác nhận.
6-4. Ví dụ: Cấu hình đa container (Web + Database)
Sức mạnh thực sự của Compose được thể hiện khi quản lý nhiều container đồng thời.
Ví dụ, chạy một ứng dụng web cùng với MySQL có thể được cấu hình như sau:
services:
app:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
Giải thích:
depends_onđảm bảo cơ sở dữ liệu khởi động trước ứng dụngvolumeslưu trữ dữ liệu của cơ sở dữ liệu- Nhiều service được quản lý trong một tệp YAML duy nhất
Đây là một mẫu rất thực tiễn cho môi trường phát triển.
6-5. Các lệnh Docker Compose thường dùng
Các lệnh này hữu ích để ghi nhớ:
| Command | Description |
|---|---|
docker compose up -d | Start containers in the background |
docker compose down | Stop and remove containers and networks |
docker compose build | Build images using Dockerfile |
docker compose ps | List containers managed by Compose |
docker compose logs -f | View logs (optionally per service) |
Sử dụng Compose cho phép bạn tái tạo các môi trường giống hệt nhau nhiều lần, rất phù hợp cho phát triển nhóm.
6-6. Các trường hợp sử dụng đề xuất cho Compose trong phát triển
- Thiết lập môi trường cục bộ chỉ bằng một lệnh
- Kiểm thử trong môi trường gần với môi trường production
- Khởi chạy các dịch vụ kết hợp như cơ sở dữ liệu, cache và hàng đợi tin nhắn
- Lưu trữ dữ liệu bằng volumes
- Quản lý cấu hình bằng các biến môi trường
.env - Hỗ trợ kiến trúc microservice phức tạp
Khi bạn đã quen với Docker và Compose, thời gian thiết lập môi trường giảm đáng kể,
độ hiệu quả phát triển được cải thiện mạnh mẽ.
7. Các cân nhắc về bảo mật và vận hành
Docker là một công cụ cực kỳ mạnh mẽ và tiện lợi, nhưng “được container hoá” không đồng nghĩa tự động với “bảo mật”.
Khi sử dụng Docker thường xuyên trên Ubuntu, có một số điểm quan trọng về bảo mật và vận hành mà bạn cần nắm rõ.
Phần này sắp xếp các kiến thức thiết yếu để vận hành Docker một cách an toàn và ổn định, ngay cả với người mới bắt đầu.
7-1. Nhóm docker có quyền “gần như root”
Nhóm docker được cấu hình ở trên thực tế cấp quyền rất mạnh.
Người dùng thuộc nhóm docker có thể vận hành hệ điều hành chủ thông qua socket Docker, điều này tương đương với quyền root.
● Các điểm cần lưu ý
- Không thêm người dùng tùy ý vào nhóm docker trên các máy chủ chia sẻ
- Hiểu rõ các hệ quả, không chỉ vì tiện lợi “không cần sudo”
- Trong các tổ chức có chính sách bảo mật nghiêm ngặt, có thể cần sự chấp thuận của quản trị viên
answer.Đây hiếm khi là vấn đề trên các máy Ubuntu cá nhân hoặc máy tính phát triển, nhưng cần có sự đánh giá cẩn thận trên các máy chủ sản xuất.
7-2. Xem xét Docker không có quyền root (Tùy chọn nâng cao)
Docker cung cấp một tính năng gọi là chế độ không có quyền root,
cho phép daemon Docker chạy dưới tài khoản người dùng thường thay vì root.
Ưu điểm:
- Giảm đáng kể rủi ro đặc quyền của hệ điều hành máy chủ
- Cho phép sử dụng Docker an toàn hơn trong các môi trường có yêu cầu bảo mật nghiêm ngặt
Nhược điểm:
- Một số tính năng mạng bị hạn chế
- Cấu hình phức tạp hơn đối với người mới bắt đầu
- Hành vi có thể khác so với Docker tiêu chuẩn
Chế độ không có quyền root không cần thiết cho hầu hết các trường hợp phát triển,
nhưng có thể là một lựa chọn khả thi trong các môi trường doanh nghiệp hoặc tập trung vào tuân thủ.
7-3. Dọn dẹp các Image và Container không sử dụng
Theo thời gian, Docker có thể tiêu tốn một lượng lớn không gian đĩa mà bạn không nhận ra.
Các container, image và volume không sử dụng có thể tích tụ và dễ dàng vượt quá 100 GB.

● Các lệnh để xóa các tài nguyên không sử dụng
Xóa các image không dùng
docker image prune
Xóa container và mạng cùng lúc
docker system prune
Dọn dẹp mạnh mẽ (cẩn thận khi sử dụng)
docker system prune -a
Tùy chọn -a sẽ xóa tất cả các image không dùng, vì vậy hãy sử dụng nó một cách thận trọng.
7-4. Tránh sử dụng thẻ “latest” trong môi trường sản xuất
Mặc dù các thẻ như nginx:latest tiện lợi trong quá trình phát triển, chúng không được khuyến nghị cho môi trường sản xuất.
Lý do:
- Phiên bản chính xác phía sau
latestkhông được đảm bảo - Các bản cập nhật bất ngờ có thể gây lỗi thời gian chạy
- Mất khả năng tái tạo dẫn đến triển khai không ổn định
Cách tiếp cận được đề xuất: Ghim phiên bản một cách rõ ràng
Ví dụ:
image: nginx:1.25
Ghim phiên bản một cách rõ ràng là quy tắc cơ bản cho các môi trường sản xuất.
7-5. Sử dụng Image gốc chính thức trong Dockerfile
Khi tạo Dockerfile, hãy tuân theo các hướng dẫn sau:
- Ưu tiên các image chính thức (image thư viện)
- Tránh các image do các tác giả không xác định hoặc không đáng tin cậy duy trì
- Khi sử dụng các image hệ điều hành nhẹ như Alpine, kiểm tra trạng thái hỗ trợ lỗ hổng bảo mật
Các image không đáng tin cậy có thể chứa phần mềm độc hại.
Ngay cả trong môi trường phát triển, cũng nên tránh chúng càng nhiều càng tốt.
7-6. Cẩn thận với việc phơi bày mạng và cổng
Khi các container mở cổng trên hệ điều hành máy chủ,
chúng có thể trở nên truy cập được từ bên ngoài hệ thống.
Biện pháp phòng ngừa:
- Tránh các ánh xạ
-p 80:80không cần thiết - Đối với sử dụng cục bộ, chỉ ràng buộc vào localhost, ví dụ
-p 127.0.0.1:8080:80 - Kết hợp với cài đặt tường lửa như UFW
- Đối với môi trường sản xuất, sử dụng reverse proxy (như Nginx) để tăng cường bảo mật
Quản lý cổng đặc biệt quan trọng trên các máy chủ VPS hoặc máy chủ Ubuntu dựa trên đám mây.
7-7. Quản lý log khi xảy ra lỗi
Log của Docker có thể xem bằng lệnh sau:
docker logs <container-name>
Khối lượng log lớn có thể nhanh chóng tiêu tốn không gian đĩa,
vì vậy hãy cân nhắc cấu hình driver log và xoay vòng log.
8. Các vấn đề thường gặp và khắc phục
Mặc dù Docker là một công cụ mạnh mẽ, các lỗi không mong muốn vẫn có thể xảy ra trên Ubuntu do sự khác biệt môi trường hoặc cấu hình sai.
Phần này tóm tắt các vấn đề phổ biến và giải pháp của chúng, từ cấp độ người mới đến trung cấp.
8-1. Không thể kết nối tới Docker Daemon
● Thông báo lỗi
Cannot connect to the Docker daemon at unix:///var/run/docker.sock.
● Nguyên nhân và giải pháp
- Docker daemon chưa chạy :
sudo systemctl start docker - Thay đổi nhóm docker chưa được áp dụng : Đăng xuất và đăng nhập lại, hoặc chạy
newgrp docker - Vấn đề quyền với /var/run/docker.sock : Đảm bảo người dùng thuộc nhóm docker
8-2. Lỗi Permission Denied
● Lỗi điển hình
Got permission denied while trying to connect to the Docker daemon socket
● Giải pháp
Nguyên nhân hầu như luôn là thiếu cấu hình nhóm docker.
sudo usermod -aG docker $USER
Sau đó đăng xuất và đăng nhập lại.
8-3. Lỗi GPG Khi Thêm Kho APT
● Ví dụ lỗi
NO_PUBKEY XXXXXXXX
hoặc
The following signatures couldn't be verified
● Nguyên nhân và cách khắc phục
- Khóa GPG chưa được đăng ký đúng cách
- curl thất bại do hạn chế mạng
Đăng ký lại khóa bằng cách:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Sau đó chạy lại sudo apt update.
8-4. Xung Đột Gán Cổng
● Ví dụ lỗi
Bind for 0.0.0.0:80 failed: port is already allocated.
● Nguyên nhân
- Cổng đã được một tiến trình khác trên máy chủ sử dụng
- Một container Docker khác đang dùng cùng cổng
● Giải pháp
Kiểm tra tiến trình đang sử dụng cổng:
sudo lsof -i -P -n | grep :80
Kiểm tra các container đang chạy:
docker ps
Thay đổi ánh xạ cổng:
-p 8080:80
8-5. Lỗi Tải Ảnh
● Nguyên nhân phổ biến
- Hạn chế mạng (môi trường doanh nghiệp)
- Vấn đề cấu hình DNS
- Truy cập Docker Hub bị chặn
● Giải pháp
- Thay đổi máy chủ DNS (ví dụ: 1.1.1.1 hoặc 8.8.8.8)
- Kiểm tra cấu hình proxy
- Sử dụng VPN nếu môi trường yêu cầu
8-6. Lỗi Hết Dung Lượng Ổ Đĩa
● Thông báo điển hình
no space left on device
● Khắc phục
Xóa các tài nguyên không sử dụng:
docker system prune -a
Xem lại các image, container và volume:
docker images
docker ps -a
docker volume ls
Hết dung lượng ổ đĩa là một trong những vấn đề vận hành Docker phổ biến nhất.



