2. Cài đặt Docker
Mục lục
- 1. Docker for Windows (DfW)
- 2. Docker for Mac (DfM)
- 3. Cài Docker trên Linux
- 4. Cài Docker trên Windows Server 2016
Biết vì sao container ra đời và Docker là ai rồi — giờ mới là lúc thực sự có Docker chạy trên máy. Có rất nhiều cách và rất nhiều nơi để cài Docker — Windows, Mac, Linux, trên cloud, on-premises, ngay trên laptop cá nhân; cài thủ công, cài bằng script, cài bằng wizard... Đừng để con số đó làm bạn ngợp — nhìn chung tất cả đều dễ. Chương này đi qua 4 cách cài phổ biến nhất: Docker for Windows, Docker for Mac, cài trên Linux (server), và cài trên Windows Server 2016.
Các bước và output lệnh dưới đây phản ánh đúng quy trình tại thời điểm sách gốc phát hành (2017, Docker bản 17.05/17.03) — giao diện cài đặt Docker Desktop và cấu trúc trang docker.com hiện tại đã thay đổi khá nhiều so với mô tả này. Nên đọc phần này để nắm khái niệm (Docker for Windows/Mac chạy daemon trong 1 Linux VM ẩn, sự khác biệt CE/EE, cách verify cài đặt...) hơn là làm theo từng bước y hệt để cài Docker mới nhất.
1. Docker for Windows (DfW)
Docker for Windows là sản phẩm đóng gói sẵn từ Docker, Inc. — có bộ cài (installer) mượt, dựng sẵn 1 môi trường Docker single-engine trên desktop/laptop Windows 10 64-bit.
Vài điểm cần lưu ý:
- Đây là bản Community Edition (CE), không nhắm tới workload production.
- Có thể có độ trễ tính năng (feature-lag) so với công nghệ mới nhất, vì Docker, Inc. ưu tiên ổn định trước, tính năng sau với sản phẩm desktop này.
Tổng hợp lại: cài đặt nhanh gọn, dễ dùng, nhưng không dành cho production.
Yêu cầu trước khi cài (prerequisite)
- Windows 10 Pro / Enterprise / Education (bản cập nhật November 2015 trở lên, build 10586+).
- Phải là hệ điều hành 64-bit.
- Tính năng Hyper-V và Containers phải được bật trong Windows.
- Hỗ trợ ảo hóa phần cứng (hardware virtualization) phải được bật trong BIOS.
Các bước cài đặt
- Bật tính năng Hyper-V và Containers: chuột phải nút Start → Apps and Features → Programs and Features → Turn Windows features on or off → tick chọn Hyper-V và Containers → OK. Có thể cần khởi động lại máy. (Tính năng Containers chỉ khả dụng từ bản Windows 10 Anniversary Update — build 14393 — trở lên.)
- Vào
www.docker.com, chọn Get Docker → Windows trong mục Desktop → Download from Docker Store (Docker Store sau này đã sáp nhập vào Docker Hub, xem Nguồn tham khảo) → chọn 1 trong các link tải (có cả bản stable và bản edge, bản edge có tính năng mới hơn nhưng có thể chưa ổn định). - Chạy file
InstallDocker.msivừa tải, đi theo wizard, nhập quyền admin cục bộ để hoàn tất. Docker sẽ tự khởi động như 1 system service, xuất hiện icon cá voi Moby Dock trên khay hệ thống (notification tray).
Sau khi cài xong, mở Command Prompt hoặc PowerShell và thử:
C:\> docker version
# Output minh họa
Client: Docker Engine - Community
Version: 17.06.0-ce
OS/Arch: windows/amd64
Server: Docker Engine - Community
Engine:
Version: 17.06.0-ce
OS/Arch: linux/amd64
(Output minh họa — cấu trúc và tên field đúng theo lệnh thật, số version cụ thể chỉ mang tính ví dụ.)
Kết quả mặc định cho thấy phần Client chạy OS/Arch: windows/amd64, nhưng phần Server lại chạy OS/Arch: linux/amd64 — vì mặc định daemon Docker được cài bên trong 1 Linux VM nhẹ chạy trên Hyper-V. Ở chế độ mặc định này, bạn chỉ chạy được Linux container trên Docker for Windows.
💡 Hình dung: container luôn cần cắm vào đúng "ổ điện" Linux kernel mới chạy được. Windows và macOS không có sẵn loại ổ điện đó, nên Docker phải giấu 1 bộ chuyển đổi điện áp phía sau — chính là Linux VM ẩn — để container vẫn cắm vào và chạy bình thường. Linux server thì đã có sẵn đúng ổ điện đó, nên cắm thẳng, không cần bộ chuyển đổi nào cả.
Muốn chạy Windows container gốc, chuột phải icon cá voi trên khay hệ thống, chọn Switch to Windows containers..., hoặc chạy lệnh tương đương từ dòng lệnh:
C:\Program Files\Docker\Docker>dockercli -SwitchDaemon
Lệnh này chạy ngầm, không in output gì ra màn hình — cách duy nhất để xác nhận đã chuyển thành công là chạy lại docker version và nhìn giá trị OS/Arch phần Server. Sau khi chuyển, docker version sẽ hiện phần Server chạy OS/Arch: windows/amd64 — nghĩa là daemon giờ chạy trực tiếp trên kernel Windows, và từ giờ chỉ chạy được Windows container.
Kiểm tra channel đang chạy (stable/edge) bằng dockercli -Version (nằm ở C:\Program Files\Docker\Docker). Các lệnh Docker thông thường khác — docker info, docker --version, docker-compose --version, docker-machine --version, notary version — đều hoạt động bình thường sau khi cài, và dùng để xác nhận từng thành phần (Docker Engine, Docker Compose, Docker Machine, Notary CLI) đã cài đúng, kèm version cụ thể của mỗi thành phần.
2. Docker for Mac (DfM)
Docker for Mac cũng là sản phẩm đóng gói sẵn từ Docker, Inc., dựa trên bản Community Edition — không cần biết gì về kernel engineering, không cần hack phức tạp gì để chạy Docker trên Mac. Nếu từng biết tới boot2docker, Docker for Mac chính là phiên bản mượt mà, đơn giản, ổn định hơn hẳn mà bạn từng mong muốn boot2docker trở thành.
Cũng giống Docker for Windows, Docker for Mac không chạy Docker Engine trực tiếp trên kernel Darwin của macOS — phía sau, daemon Docker chạy bên trong 1 Linux VM nhẹ, rồi expose daemon/API đó ra môi trường Mac 1 cách liền mạch. Vì bản chất vẫn là Docker chạy trên Linux, nó chỉ chạy được container Linux — nhưng đó cũng chính là nơi phần lớn "hành động" của container diễn ra nên không phải vấn đề lớn.
Docker for Mac dùng HyperKit để hiện thực 1 hypervisor cực nhẹ (HyperKit dựa trên hypervisor xhyve, chạy trên Hypervisor.framework của macOS), tận dụng thêm tính năng từ DataKit, và chạy 1 bản Linux distro được tinh chỉnh riêng tên Moby, dựa trên nền Alpine Linux.
Các bước cài đặt
- Vào
www.docker.com→ Get Docker → Mac trong mục Desktop → Download from Docker Store (nay đã là Docker Hub) → chọn link tải (stable hoặc edge). - Mở file
Docker.dmgvừa tải, kéo-thả icon cá voi Moby Dock vào thư mục Applications. - Mở Applications, double-click icon Docker để khởi động (có thể cần xác nhận vì app tải từ internet).
- Nhập password để installer tạo các thành phần cần quyền cao hơn (như networking).
- Docker daemon khởi động — icon cá voi hoạt hình xuất hiện trên status bar, ngừng hoạt hình khi daemon khởi động xong. Click vào icon để restart daemon, check update, hoặc mở UI.
Sau khi cài, mở terminal và thử:
$ docker version
# Output minh họa
Client: Docker Engine - Community
Version: 17.06.0-ce
OS/Arch: darwin/amd64
Server: Docker Engine - Community
Engine:
Version: 17.06.0-ce
OS/Arch: linux/amd64
Experimental: true
(Output minh họa — cấu trúc và tên field đúng theo lệnh thật, số version cụ thể chỉ mang tính ví dụ.)
Tương tự Windows, phần Server hiện OS/Arch: linux/amd64 (daemon chạy trong Linux VM ẩn), còn phần Client là app Mac chạy trực tiếp trên kernel Darwin (OS/Arch: darwin/amd64). Nếu đang chạy channel edge, output còn hiện Experimental: true.
Chạy thêm docker info để xem thống kê container/image hiện có. Docker for Mac cũng cài kèm Docker Engine (client + daemon), Docker Compose, Docker Machine, và Notary CLI — verify bằng:
$ docker --version
$ docker-compose --version
$ docker-machine --version
$ notary version
# Output minh họa (mỗi dòng ứng với đúng 1 lệnh gọi phía trên, theo thứ tự)
Docker version 17.06.0-ce, build 02c1d87
docker-compose version 1.14.0, build c7bdf9e
docker-machine version 0.12.0, build 2929ea9
notary version 0.5.0 (sha1: 26cbf51 go1.8.1 linux/amd64)
(Output minh họa — số version cụ thể chỉ mang tính ví dụ.)
3. Cài Docker trên Linux
Cài Docker trên Linux là kiểu cài phổ biến nhất, và khá dễ — khó khăn thường gặp nhất chỉ là khác biệt nhỏ giữa các distro (Ubuntu vs CentOS...). Ví dụ dưới đây dùng Ubuntu nhưng cũng chạy được trên CentOS và các bản fork upstream/downstream của cả hai. Không quan trọng máy Linux là server vật lý trong data center riêng, ở nửa vòng trái đất trên public cloud, hay chỉ là 1 VM trên laptop — miễn máy chạy Linux và truy cập được https://get.docker.com.
Trước khi cài cần chọn edition: Community Edition (CE) — miễn phí (dùng trong ví dụ này), hoặc Enterprise Edition (EE) — giống CE nhưng kèm hỗ trợ thương mại và quyền truy cập các sản phẩm khác như Docker Trusted Registry, Universal Control Plane. Cách chia 2 bản này chỉ đúng trong giai đoạn sách được viết — mảng Enterprise sau đó đã tách khỏi Docker, Inc. (xem Nguồn tham khảo).
Nên đảm bảo hệ thống đã cập nhật đủ package và bản vá bảo mật mới nhất trước khi cài.
Các bước cài đặt
- Mở shell trên máy Linux.
- Dùng
wgetgọi shell script cài Docker CE:
$ wget -qO- https://get.docker.com/ | sh
# Output minh họa (rút gọn)
+ sh -c apt-get update -qq >/dev/null
+ sh -c apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c 'apt-get install -y -qq docker-ce >/dev/null'
Client: Docker Engine - Community
Version: 24.0.7
Server: Docker Engine - Community
Engine:
Version: 24.0.7
If you would like to use Docker as a non-privileged user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker your-user
(Output minh họa — rút gọn, các bước cài package thật sự dài hơn nhiều; số version cụ thể chỉ mang tính ví dụ.)
Script này do chính Docker, Inc. duy trì và vẫn còn hoạt động, nhưng chỉ khuyến nghị dùng cho test/dev — với hệ thống production, Docker khuyến nghị cài qua package manager theo hướng dẫn chính thức từng distro (xem Nguồn tham khảo).
- Nên chỉ dùng non-root user khi làm việc với Docker — thêm user vào group
dockercục bộ:
$ sudo usermod -aG docker <tên-user>
$ cat /etc/group | grep docker
docker:x:999:<tên-user>
Nếu đang đăng nhập bằng chính user vừa thêm, cần logout rồi login lại để quyền group có hiệu lực.
- Verify cài đặt:
$ docker --version
$ docker info
# Output minh họa (rút gọn)
Docker version 24.0.7, build afdd53b
Client:
Context: default
Debug Mode: false
Server:
Containers: 0
Images: 0
Server Version: 24.0.7
Storage Driver: overlay2
Kernel Version: 5.15.0-91-generic
Operating System: Ubuntu 22.04.3 LTS
Architecture: x86_64
CPUs: 2
Total Memory: 3.822GiB
Docker Root Dir: /var/lib/docker
Registry: https://index.docker.io/v1/
(Output minh họa — rút gọn, cấu trúc và tên field đúng theo lệnh thật, số liệu cụ thể chỉ mang tính ví dụ.)
docker info trả về thông tin chi tiết: số container/image hiện có, kernel version, hệ điều hành, kiến trúc CPU, tổng RAM, Docker root dir (/var/lib/docker), chế độ debug, registry mặc định...
Nếu quy trình trên không hợp với distro đang dùng, có thể vào trang Docker Docs, chọn đúng distro để theo hướng dẫn chính thức (thường dùng package manager, nhiều bước hơn cách get.docker.com ở trên).
⚠️ Lưu ý: nếu cài Docker từ nguồn khác ngoài repository chính thức, có thể vô tình cài phải bản fork tùy biến riêng của vendor/distro — không tương thích ngược lên project Docker gốc. Nếu không chủ đích làm vậy, các bản vá/sửa lỗi từ vendor có thể không bao giờ được merge ngược về project chính thức, và những cài đặt kiểu này sẽ không được Docker, Inc. hay đối tác hỗ trợ thương mại chính thức.
4. Cài Docker trên Windows Server 2016
3 bước chính: cài tính năng Windows Containers, cài Docker, verify cài đặt.
Trước tiên đảm bảo hệ thống đã cập nhật mới nhất (dùng lệnh sconfig, chọn option 6 để cài update — có thể cần restart).
Bước 1 — Cài tính năng Containers
Chuột phải nút Start → Programs and Features (mở Server Manager) → Dashboard → Add Roles and Features → đi qua wizard tới trang Features → tick Containers → hoàn tất wizard (có thể cần restart).
Bước 2 — Cài Docker (qua PowerShell)
> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
> Install-Package -Name docker -ProviderName DockerMsftProvider
# Output minh họa
Name Version Source Summary
---- ------- ------ -------
Docker 17.06.0-ce DockerDefault Contains Docker EE...
(Output minh họa — cấu trúc và tên cột đúng theo lệnh thật, số version cụ thể chỉ mang tính ví dụ.)
Xác nhận cài package khi được hỏi. Sau khi cài xong, restart hệ thống.
Bước 3 — Verify
> docker version
> docker info
# Output minh họa (rút gọn)
Client: Docker Engine - Enterprise
Version: 17.06.2-ee-6
OS/Arch: windows/amd64
Server: Docker Engine - Enterprise
Engine:
Version: 17.06.2-ee-6
OS/Arch: windows/amd64
(Output minh họa — cấu trúc và tên field đúng theo lệnh thật, số version cụ thể chỉ mang tính ví dụ; docker info trả về thêm rất nhiều dòng chi tiết khác, không liệt kê hết ở đây.)
docker version hiện cả Client và Server đều chạy OS/Arch: windows/amd64 (vì đây là bản EE chạy trực tiếp trên Windows Server, không qua Linux VM như bản desktop). Sau bước này, Docker đã sẵn sàng để bắt đầu chạy Windows container.
Danh sách lệnh chính
| Lệnh | Công dụng |
|---|---|
docker version | Xem version + kiến trúc (OS/Arch) của cả Client và Server — cách nhanh nhất để biết daemon đang chạy trực tiếp trên kernel hay qua VM ẩn |
docker info | Xem thông tin chi tiết hệ thống: số container/image, kernel version, OS, RAM, Docker root dir... |
docker --version / docker-compose --version / docker-machine --version / notary version | Verify từng thành phần đã cài đúng, kèm số version cụ thể |
dockercli -SwitchDaemon (Windows) | Chuyển qua lại giữa chế độ Linux container và Windows container trên Docker for Windows |
dockercli -Version (Windows) | Kiểm tra channel đang chạy (stable/edge) |
wget -qO- https://get.docker.com/ | sh (Linux) | Script cài Docker CE nhanh, dùng thay cho cài qua package manager thủ công |
sudo usermod -aG docker <user> (Linux) | Thêm user vào group docker để chạy lệnh Docker không cần sudo |
Install-Package -Name docker -ProviderName DockerMsftProvider (Windows Server, PowerShell) | Cài Docker EE trên Windows Server qua package provider |
Theo kinh nghiệm vận hành thực tế, dù đang cài trên nền tảng nào, việc đầu tiên nên làm ngay sau khi cài xong luôn là chạy docker version/docker info để xác nhận daemon sống và biết chính xác mình đang chạy Linux container hay Windows container — rất nhiều lỗi "container không chạy được" ban đầu thực chất chỉ là nhầm chế độ này.
Cài xong rồi thì bên trong Docker Engine thực chất gồm những gì, và điều gì xảy ra phía sau mỗi lần gõ docker container run? Đó là chủ đề phần tiếp theo.
Nguồn tham khảo
Nguồn gốc: Bài viết lấy cảm hứng từ sách "Docker Deep Dive" — tác giả Nigel Poulton (bản phát hành version 4, 3/10/2017), Part 1: The Big Picture Stuff — chapter 3 "Installing Docker". Nội dung được viết lại theo cách hiểu riêng, không sao chép nguyên văn hay dịch sát nguyên bản. Muốn đọc bản đầy đủ hoặc ủng hộ tác giả, có thể mua sách tại leanpub.com/dockerdeepdive.
Đính chính/cập nhật (fact-check):
- HyperKit (Docker for Mac) dựa trên hypervisor xhyve (không phải "xhive") — port của bhyve lên macOS, chạy trên Hypervisor.framework — moby/hyperkit
- Docker Store đã sáp nhập vào Docker Hub — 2019, Docker Blog — The New Docker Hub
- Script cài đặt
get.docker.comvẫn do Docker, Inc. duy trì, nhưng chính thức khuyến nghị chỉ dùng cho test/dev, không dùng cho production — docker/docker-install - Mảng Enterprise của Docker (Docker Trusted Registry, Universal Control Plane, Docker Engine Enterprise) đã được bán cho Mirantis — 11/2019, Mirantis press release