Hướng dẫn Cài đặt và Sử dụng Docker trên Ubuntu

Ngày đăng: July 17, 2025

Ubuntu

description image

Bài viết này sẽ hướng dẫn bạn cách cài đặt Docker trên server Ubuntu. Nếu bạn muốn triển khai ứng dụng Docker trên một server trực tiếp với một cú click.

Điều kiện tiên quyết

Để theo dõi bài hướng dẫn này, bạn cần:

  • Một server Ubuntu được thiết lập theo hướng dẫn Ubuntu initial server setup, bao gồm người dùng không phải root có quyền sudo và firewall.
  • Một tài khoản trên Docker Hub nếu bạn muốn tạo và đẩy các image lên Docker Hub, như sẽ hướng dẫn ở Bước 7 và 8.

Bước 1 — Cài đặt Docker

Gói cài đặt Docker có trong kho Ubuntu chính thức có thể không phải là phiên bản mới nhất. Để đảm bảo lấy được phiên bản mới nhất, ta sẽ cài Docker từ kho chính thức của Docker. Cách làm là thêm nguồn gói mới, thêm khóa GPG của Docker để xác thực gói tải xuống, sau đó cài đặt gói đó.

Trước tiên, cập nhật danh sách gói hiện có:

sudo apt update

Tiếp theo, cài đặt các gói tiền đề để apt có thể sử dụng gói qua HTTPS:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

Sau đó thêm khóa GPG cho kho chính thức của Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Thêm kho Docker vào nguồn APT:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

Giờ kho gói sẽ được cập nhật thêm các gói Docker từ repo mới.

Kiểm tra chắc chắn sẽ cài từ kho Docker thay vì kho Ubuntu mặc định:

apt-cache policy docker-ce

Bạn sẽ thấy đầu ra kiểu như:

docker-ce:
  Installed: (none)
  Candidate: 5:19.03.9~3-0~ubuntu-focal
  Version table:
     5:19.03.9~3-0~ubuntu-focal 500
        500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages

Lưu ý docker-ce chưa được cài, phiên bản sẵn cài là bản từ Docker repository cho Ubuntu (focal).

Sau cùng, cài Docker:

sudo apt install docker-ce

Docker sẽ được cài, daemon sẽ được khởi động và kích hoạt khởi chạy cùng hệ thống. Kiểm tra trạng thái:

sudo systemctl status docker

Bạn sẽ thấy kết quả cho thấy dịch vụ đang chạy, ví dụ:

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 24321 (dockerd)
      Tasks: 8
     Memory: 46.4M
     CGroup: /system.slice/docker.service
             └─24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Cài Docker mang đến không chỉ daemon mà còn cả tiện ích dòng lệnh docker. Bài viết sẽ hướng dẫn sử dụng docker ở các bước cạnh sau.


Bước 2 — Thực thi lệnh Docker không cần sudo (Tùy chọn)

Mặc định, lệnh docker chỉ được chạy bởi user root hoặc user trong nhóm docker (nhóm này được tự động tạo khi cài Docker). Nếu bạn chạy lệnh docker không kèm sudo hoặc không trong nhóm docker, sẽ nhận được thông báo lỗi:

docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

Để không cần gõ sudo mỗi lần chạy lệnh docker, thêm user của bạn vào nhóm docker:

sudo usermod -aG docker ${USER}

Để nhóm mới có hiệu lực, đăng xuất rồi đăng nhập lại hoặc chạy:

su - ${USER}

Bạn sẽ được yêu cầu nhập mật khẩu.

Xác nhận user đã vào nhóm docker:

groups

Kết quả ví dụ:

sammy sudo docker

Nếu muốn thêm user khác vào nhóm docker, chạy:

sudo usermod -aG docker username

Các bước sau giả định bạn đang chạy lệnh docker dưới user nằm trong nhóm docker. Nếu không, nhớ thêm sudo trước lệnh.


Bước 3 — Sử dụng lệnh Docker

Lệnh docker gồm chuỗi tùy chọn, lệnh con và tham số. Cú pháp:

docker [option] [command] [arguments]

Để xem các lệnh con có thể dùng:

docker

Từ Docker 19, danh sách lệnh con gồm:

attach      Kết nối chuẩn input, output, error tới container đang chạy
build       Xây dựng image từ Dockerfile
commit      Tạo image mới từ thay đổi container
cp          Sao chép file/thư mục giữa container và hệ thống
create      Tạo container mới
diff        Kiểm tra thay đổi trong filesystem của container
events      Lấy sự kiện real-time từ server
exec        Chạy lệnh trong container đang chạy
export      Xuất filesystem container ra tar archive
history     Hiển thị lịch sử image
images      Liệt kê các image
import      Nhập filesystem từ tarball
info        Hiển thị thông tin tổng quan Docker
inspect     Thông tin chi tiết về Docker objects
kill        Dừng một hoặc nhiều container
load        Tải image từ tar archive hoặc STDIN
login       Đăng nhập Docker registry
logout      Đăng xuất Docker registry
logs        Lấy logs container
pause       Tạm dừng tiến trình trong container
port        Liệt kê ánh xạ port của container
ps          Liệt kê container
pull        Tải image từ registry
push        Đẩy image lên registry
rename      Đổi tên container
restart     Khởi động lại container
rm          Xóa container
rmi         Xóa images
run         Chạy lệnh trong container mới
save        Lưu images ra tar archive
search      Tìm kiếm image trên Docker Hub
start       Khởi động container đã dừng
stats       Hiển thị thống kê tài nguyên container
stop        Dừng container
tag         Tạo tag image
top         Hiển thị tiến trình container đang chạy
unpause     Tiếp tục tiến trình container
update      Cập nhật cấu hình container
version     Hiển thị phiên bản Docker
wait        Chờ container dừng, trả về exit code

Để xem tùy chọn của một lệnh con:

docker docker-subcommand --help

Để xem thông tin hệ thống Docker:

docker info

Bài viết sẽ tiếp tục với thao tác làm việc với images.


Bước 4 — Làm việc với Docker Image

Container Docker xây dựng từ Docker images. Mặc định, Docker tải các images từ Docker Hub, một registry do Docker quản lý. Ai cũng có thể lưu trữ images tại đây, nên hầu hết ứng dụng và bản phân phối Linux đều có images tại đó.

Kiểm tra có thể truy cập và tải image từ Docker Hub:

docker run hello-world

Đầu ra cho thấy Docker đang hoạt động đúng:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Ban đầu Docker không tìm thấy image hello-world cục bộ, nên tải image từ Docker Hub. Sau khi tải xong, Docker tạo container từ image và chạy ứng dụng, xuất thông báo.

Bạn có thể tìm kiếm images trên Docker Hub dùng lệnh search:

docker search ubuntu

Kết quả liệt kê images phù hợp. Cột OFFICIAL ghi dấu [OK] nếu image được Docker chính thức hỗ trợ.

Để tải image ubuntu:

docker pull ubuntu

Bạn sẽ thấy thông báo tải về:

Using default tag: latest
latest: Pulling from library/ubuntu
d51af753c3d3: Pull complete
fc878cd0a91c: Pull complete
6154df8ff988: Pull complete
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Sau khi tải, chạy container từ image bằng lệnh run. Nếu chưa có image, Docker sẽ tự tải trước khi chạy container.

Xem các images đã tải:

docker images

Ví dụ:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              1d622ef86b13        3 weeks ago         73.9MB
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB

Images dùng để chạy containers có thể được chỉnh sửa và tạo mới, rồi đẩy lên Docker Hub hoặc registry khác.


Bước 5 — Chạy một Docker Container

Container hello-world trong bước trước chạy và thoát sau khi xuất thông báo. Container có thể tương tác, vì chúng giống máy ảo nhưng nhẹ và tiết kiệm hơn.

Ví dụ, chạy container Ubuntu mới nhất với shell tương tác:

docker run -it ubuntu

Dấu nhắc lệnh sẽ thay đổi thành:

root@d9b100f2f636:/#

ID container (ví dụ d9b100f2f636) bạn sẽ dùng để quản lý container sau.

Bạn có thể chạy lệnh bên trong container, ví dụ cập nhật gói:

apt update

Sau đó cài ứng dụng, ví dụ Node.js:

apt install nodejs

Sau khi cài, kiểm tra version Node.js:

node -v

Hiển thị:

v10.19.0

Các thay đổi bên trong container chỉ áp dụng cho container đó.

Thoát container bằng lệnh:

exit

Bước 6 — Quản lý Docker Container

Sau khi dùng Docker một thời gian, bạn sẽ có nhiều container đang chạy và đã dừng.

Xem container đang chạy:

docker ps

Kết quả:

CONTAINER ID        IMAGE               COMMAND             CREATED

Bạn đã tạo 2 container: hello-world và ubuntu. Cả hai đều không chạy nhưng vẫn tồn tại.

Xem tất cả container (đang chạy và dừng):

docker ps -a

Kết quả ví dụ:

1c08a7a0d0e4        ubuntu              "/bin/bash"         2 minutes ago       Exited (0) 8 seconds ago                       quizzical_mcnulty
a707221a5f6c        hello-world         "/hello"            6 minutes ago       Exited (0) 6 minutes ago                       youthful_curie

Xem container mới nhất:

docker ps -l

Ví dụ:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
1c08a7a0d0e4        ubuntu              "/bin/bash"         2 minutes ago       Exited (0) 40 seconds ago                       quizzical_mcnulty

Khởi chạy container đã dừng:

docker start 1c08a7a0d0e4

Xem trạng thái:

docker ps

Dừng container:

docker stop quizzical_mcnulty

Xóa container không cần nữa (tìm ID hoặc tên bằng docker ps -a):

docker rm youthful_curie

Bạn có thể tạo container với tên tuỳ chọn bằng --name hoặc tự xoá container khi dừng với --rm. Xem docker run --help để biết thêm.

Container có thể chuyển thành image dùng để tạo container mới.


Bước 7 — Commit thay đổi trong Container thành Docker Image

Khi bạn chạy Docker image, bạn có thể tạo, sửa, xóa file như máy ảo. Thay đổi chỉ áp dụng cho container. Khi xoá container bằng docker rm, thay đổi sẽ mất.

Phần này hướng dẫn cách lưu trạng thái container thành image mới.

Sau khi cài Node.js trong container Ubuntu, bạn có container khác với image gốc. Bạn có thể tái sử dụng container này để tạo image mới.

Commit thay đổi thành image mới:

docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

-m là mô tả commit, giúp nhớ thay đổi gì; -a là tác giả. container_id là ID container; repository thường là username Docker Hub.

Ví dụ với user sammy và container ID d9b100f2f636:

docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

Sau commit, image mới sẽ nằm ở máy bạn.

Liệt kê images:

docker images

Ví dụ:

REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
sammy/ubuntu-nodejs   latest              7c1f35226ca6        7 seconds ago       179MB
...

Trong ví dụ, ubuntu-nodejs là image mới, tạo từ image Ubuntu gốc trên Docker Hub. Kích thước phản ánh thay đổi (đã cài NodeJS).

Bạn cũng có thể tạo image từ Dockerfile để tự động cài phần mềm, nhưng phần đó ngoài phạm vi bài này.

Tiếp theo là chia sẻ image vừa tạo.


Bước 8 — Push Docker Image lên Docker Repository

Bước tiếp theo sau khi tạo image là chia sẻ với bạn bè, hoặc đẩy lên Docker Hub hoặc registry khác. Để đẩy image lên, bạn cần tài khoản ở đó.

Phần này hướng dẫn đẩy image lên Docker Hub. Nếu muốn tạo registry riêng, xem hướng dẫn cài registry riêng trên Ubuntu.

Đăng nhập Docker Hub:

docker login -u docker-registry-username

Bạn nhập mật khẩu để xác thực.

Lưu ý: Nếu username Docker registry khác với user tạo image, bạn cần tag image lại:

docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

Sau đó, đẩy image:

docker push docker-registry-username/docker-image-name

Ví dụ đẩy image ubuntu-nodejs cho user sammy:

docker push sammy/ubuntu-nodejs

Quá trình có thể mất thời gian, khi xong bạn sẽ thấy:

The push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
...

Image sẽ xuất hiện trên trang dashboard Docker Hub.

Nếu gặp lỗi chưa đăng nhập:

unauthorized: authentication required

Hãy đăng nhập lại với docker login rồi thử đẩy lại.

Bây giờ bạn có thể kéo image này trên máy khác:

docker pull sammy/ubuntu-nodejs

Docker và Docker Compose

Docker cho phép xây dựng và chạy container đơn lẻ, nhưng quản lý multi-container phức tạp với Docker thuần túy có thể rườm rà. Docker Compose giải quyết vấn đề này.

Docker Compose là công cụ định nghĩa và chạy các ứng dụng nhiều container qua file YAML. Thay vì chạy nhiều container riêng biệt cho web server, database và cache tầng, bạn định nghĩa trong docker-compose.yml rồi chạy với:

docker-compose up

Hướng dẫn chi tiết cách dùng Docker Compose trên Ubuntu có tại tutorial của DigitalOcean.

Feature Docker CLI Docker Compose
Usage Vận hành container đơn Orchestration nhiều container
Configuration Lệnh CLI File cấu hình YAML
Dependency handling Thủ công Tự động liên kết dịch vụ
Best use case Thử nghiệm container riêng Phát triển và staging đa container

Khắc phục sự cố thường gặp khi cài đặt Docker

Vấn đề: docker: command not found

Fix: Docker CLI không có trong PATH, cài lại hoặc đảm bảo /usr/bin có trong PATH.

sudo apt install docker-ce docker-ce-cli containerd.io

Vấn đề: Không thể kết nối tới Docker daemon

Fix: Docker chưa chạy hoặc user chưa thuộc nhóm docker.

sudo systemctl start docker
sudo usermod -aG docker $USER

Đăng xuất và đăng nhập lại.

Vấn đề: Lỗi GPG key hoặc repository

Fix: Nếu lỗi key hoặc repo, tham khảo tài liệu chính thức của Docker về khóa GPG và repo mới nhất. Nếu dùng Ubuntu 22.04, dùng hướng dẫn riêng cho phiên bản này. Có thể dùng Ansible để cài đặt tự động tránh lỗi.


Docker Desktop trên Ubuntu (Beta)

Docker Desktop đã hỗ trợ beta cho Linux, bao gồm Ubuntu. Nó cung cấp GUI, Docker Engine và hỗ trợ Kubernetes.

Cài Docker Desktop:

sudo apt install ./docker-desktop-<version>-<arch>.deb

Xem tài liệu chính thức Docker Desktop cho Linux để biết yêu cầu và link tải.

Lưu ý: Docker Desktop thích hợp cho phát triển, trên server nên dùng Docker CE.


Cài đặt Docker bằng Dockerfile

Bạn có thể tự động cài Docker bằng Dockerfile như sau:

FROM ubuntu:20.04

RUN apt-get update && \
    apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release && \
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
    add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" && \
    apt-get update && \
    apt-get install -y docker-ce docker-ce-cli containerd.io

Bạn cũng có thể dùng Ansible để tự động cài và cấu hình Docker, tiện cho nhiều máy hoặc duy trì cấu hình đồng nhất.


Gỡ cài đặt Docker trên Ubuntu

Xóa Docker hoàn toàn:

sudo apt purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

Nếu bạn đã thêm user vào nhóm docker, có thể xóa nhóm:

sudo groupdel docker

Nhớ sao lưu dữ liệu quan trọng trước khi gỡ bỏ.


Câu hỏi thường gặp (FAQ)

1. Cách tốt nhất để cài đặt Docker trên Ubuntu là gì?

Cách tốt nhất là dùng repo chính thức của Docker. Bạn đầu cập nhật package index, cài các gói tiền đề, thêm khóa GPG và repo ổn định, rồi cài Docker Engine và các thành phần liên quan. Cách này giúp bạn có phiên bản mới nhất, vá lỗi và cập nhật bảo mật.

2. Tôi có cần sudo để chạy lệnh Docker không?

Mặc định Docker cần quyền root, nên phải dùng sudo trước mỗi lệnh. Bạn có thể thêm user vào nhóm docker để chạy mà không cần sudo. Lệnh:

sudo usermod -aG docker $USER

Rồi đăng xuất và đăng nhập lại.

3. Làm thế nào để kiểm tra Docker có chạy đúng hay không?

Bạn dùng:

docker info

để xem thông tin tổng quan. Hoặc:

docker run hello-world

Nếu chạy thành công hiển thị thông báo chào mừng Docker.

4. Tôi có thể cài đặt một phiên bản cụ thể của Docker không?

Có, bạn dùng:

apt-cache madison docker-ce

để xem các phiên bản. Rồi cài:

sudo apt install docker-ce=<VERSION_STRING>

Phiên bản này giúp giữ ổn định hoặc tương thích với dự án cũ.

5. Sự khác nhau giữa Docker và Docker Compose là gì?

Docker chạy container đơn lẻ. Docker Compose quản lý ứng dụng đa container qua file YAML, giúp xây dựng, cấu hình và chạy các dịch vụ liên kết phức tạp dễ dàng hơn.

6. Làm thế nào để gỡ Docker khỏi hệ thống?

Xem mục "How to Uninstall Docker on Ubuntu".

7. Docker Desktop có sẵn cho Ubuntu không, và tôi có nên dùng nó không?

Docker Desktop có bản beta cho Linux, có giao diện GUI, kèm Docker Engine và Kubernetes. Phù hợp cho phát triển, không nên dùng trên server production. Dùng Docker CE cho server là tốt hơn.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời