1
Tổng quan về Docker
Docker có nghĩa là nhân viên bốc xếp ở bến cảng, nhiệm vụ của
anh ta là đưa các container chứa hàng hóa từ các phương tiện vận chuyển khác lên
tàu và ngược lại.
Quan sát tình huống thực tế trên bến cảng (nếu không có
container – thùng chứa hàng tiêu chuẩn):
– Với rất nhiều loại hàng hóa khác nhau, cần phải sắp xếp
hàng hóa sao cho hợp lý? ví dụ các loại hạt nên đặt cạnh nhau, các loại máy móc
nên đặt cạnh nhau, đồ dễ vỡ đặt ở đâu thì an toàn.
– Với rất nhiều phương tiện để vận chuyển, và nhiều cách thức
lưu kho, làm thế nào để lựa chọn phương tiện/hình thức vận chuyển nhanh và hợp
lý?
Với các
yêu cầu trên, nhân viên bốc xếp sẽ có rất nhiều lựa
chọn, như ma trận dưới đây:
Giải pháp của nhân viên bốc xếp là sử dụng các thùng chứa
chuẩn, gọi là các container, bỏ hàng hóa cần vận chuyển vào container. Khi đó
việc sắp xếp/vận chuyển hàng hóa sẽ nhanh và đơn giản hơn nhiều.
Quan sát trong môi trường lập trình, lập trình viên (developer)
và người quản trị hệ thống (sysadmin) cũng gặp bài toán giống với nhân viên bốc
xếp.
Hình sau thể hiện sự phức tạp của môi trường lập trình:
Trong môi trường lập trình, với rất nhiều chồng công nghệ, dịch
vụ, thư viện; chúng có thể làm việc được với nhau không? với rất nhiều môi trường
phần cứng, thiết bị, server; có thể dễ dàng di chuyển phần mềm đang chạy trên
môi trường này tới môi trường khác được không?
Lập trình viên và người quản trị hệ thống lại có một ma trận
các lựa chọn:
Giải pháp của lập trình viên là sử dụng các thùng chứa chuẩn,
gọi là các container, bỏ các chồng công nghệ, dịch vụ, thư viện, cần sử dụng vào
container. Khi đó việc thiết lập môi trường lập trình, di chuyển, chạy ứng dụng
sẽ nhanh và đơn giản hơn nhiều.
Với giải pháp của sử dụng docker, lập trình viên sẽ không
còn phải tốn nhiều thời gian cho việc lựa chọn, thiết lập môi trường và chạy
các ứng dụng trên các môi trường khác nhau nữa, mà tập trung vào việc lập
trình, giải quyết các bài toán chuyên môn.
1.1
Docker là gì?
Docker
là một nền tảng cho lập trình viên (developers) và người quản trị hệ thống (sysadmin)
để phát
triển, triển khai và chạy ứng dụng với container. Nó cho phép tạo các môi trường
độc lập và tách biệt để khởi chạy và phát triển ứng dụng và môi trường này được
gọi là container. Khi cần triển khai (deploy) lên bất kỳ server nào chỉ cần chạy
container của Docker thì ứng dụng của bạn sẽ được khởi chạy ngay lập tức.
Để dễ hình dung về hoạt động của docker, quan sát hình ở
trên. Bạn sẽ thấy vai trò của docker khá giống với vai trò của hypervisor trong
giải pháp máy ảo. Nghĩa là docker là hạ tầng nằm trên hệ điều hành, hạ tầng này
cho phép bạn tạo ra một “phân hệ” hay một cái “máy tính mini” (gọi là container)
chạy độc lập với hệ điều hành và với phần cứng. Như vậy, vai trò của container
gần giống với vai trò của một máy ảo (virtual machine).
Từ hình trên, dễ thấy trong môi trường docker, để có được môi
trường lập trình và chạy ứng dụng (App1, Bins/Libs) thì không cần phải có máy ảo/hệ
điều hành máy ảo (Guest OS). Điều này giúp việc cài đặt hạ tầng, môi trường lập
trình, chạy ứng dụng sẽ đơn giản, và nhanh hơn.
1.2
Cài Docker trên Windows 10:
1.2.1
Kích hoạt Hyper-V
– Sao lại phải kích hoạt Hyper-V? vì Docker có nhiều giải
pháp để hoạt động, trong đó có giải pháp dùng luôn hạ tầng Hyper-V.
– Mở PowerShell với quyền Administrator, gõ lệnh sau:
Enable-WindowsOptionalFeature -Online -FeatureName
Microsoft-Hyper-V –All
1.2.2
Cài đặt Docker
– Tải gói cài đặt Docker về máy (chọn bản Stable)
https://hub.docker.com/editions/community/docker-ce-desktop-windows/
– Sau khi tải gói cài đặt về máy, tiến hành cài đặt Docker
– Sau khi cài đặt xong, trong PowerShell gõ lệnh docker --version, nếu hiển thị phiên bản
của Docker là việc cài đặt đã hoàn thành.
Ví dụ:
PS C:\Users\Maxsys> docker --version
Docker version 19.03.12, build 48a66213fe
1.3
Thao tác với image và container
1.3.1
Các thành phần của một hệ thống Docker
Một hệ thống
Docker thường gồm bốn thành phần sau :
– Image
– Container
– Registry
– Engine
Image
Image là một gói
thực thi, chứa bên trong là tất cả những gì cần thiết, liên quan để chạy ứng dụng
như mã nguồn, các thư viện, thành phần thực thi lệnh (runtime), các biến môi
trường và các tập tin cấu hình liên quan.
Dùng lệnh docker images để kiểm tra các image hiện
đang có trên Docker, dưới đây là ý nghĩa của các cột khi hiển thị.
– REPOSITORY: tên của image
– TAG: phiên bản của image
– IMAGE ID: mã định danh của image
– CREATED: ngày tạo image
– SIZE: kích thước của image
Container
Container là một
thể hiện (instance) đang chạy, được khởi tạo từ Image.
Registry
Các image có thể
được lưu trong một kho, gọi là Registry, kho này có thể lưu trên mạng
Vào trang https://hub.docker.com/, bấm vào mục Explore để xem các image hiện
đang có trong registry trên mạng.
Engine
Engine là phần mềm
Docker, cho phép tạo, lưu và chạy các image/container
Lưu ý:
– Một lệnh trong
Docker luôn bắt đầu là docker tiếp
theo là các chỉ dẫn cụ thể.
– Dùng tham số --help
sau mỗi lệnh, để xem các hướng dẫn về một lệnh bất kì.
1.3.2
Xem và tải image bằng PowerShell
Có thể tìm kiếm các image bằng lệnh trên PowerShell, dùng lệnh
docker search <tên image>.
Ví dụ: docker search
mongodb
Để tải một image về máy, sử dụng lệnh docker pull <tên image:phiên bản>.
Ví dụ: docker pull
mongo sẽ tải image mongo về máy với phiên bản mặc định (thường có tên là latest,
là bản mới nhất).
Để lấy phiên bản cụ thể (ví dụ 4.4.0) dùng lệnh sau: docker pull mongo:4.4.0
Muốn dừng việc tải image về máy bấm tổ hợp phím Ctrl + C.
1.3.3
Xóa một image trong docker
Như đã biết để xem
các image đang có, dùng lệnh docker
images
Để xóa một image, dùng lệnh docker image rm <tên image> (rm là viết tắt của remove).
1.3.4
Tạo và thao tác với container
Container chính là một thể hiện (instance) hay là một bản
đang chạy của một image, khi đã có image, để tạo container, dùng lệnh docker run <tham số><tên image:phiên
bản>.
Ví dụ: docker run –it ubuntu:latest
Xem thêm các tham số ở đây: https://docs.docker.com/engine/reference/run/
Ghi chú: ở ví dụ trên ubuntu:latest là TAG của một image, có
thể thay thế TAG bằng IMAGE ID. Khi đó lệnh tạo container sẽ có dạng: docker run –it 4e2eef94cd6b. Khi gõ lệnh,
không cần viết đầy đủ giá trị của IMAGE ID, mà chỉ cần nhập 1, 2, hoặc 3 kí tự
đầu tiên, mục đích là để phân biệt được với các IMAGE ID đang có trong docker.
Khi container ubuntu được tạo ra, sẽ có dấu nhắc lệnh của ubuntu,
ví dụ:
root@8d3f56721c1b:/#
Nhập vào lệnh để kiểm tra một số thông tin của ubuntu, ví dụ:
root@8d3f56721c1b:/#cat
/etc/*release
Để xem các container đang chạy trên docker, dùng lệnh docker ps (ps là viết tắt của process
status)
Để tắt một container, trong cửa sổ dòng lệnh của container
đang chạy, gõ lệnh exit. Ví dụ: root@8d3f56721c1b:/#
exit
Để xem tất cả các container (đang chạy hoặc không), dùng lệnh:
docker ps -a
Để chạy lại một container, sử dụng lệnh docker start <tên container> hoặc docker start <một phần ID của
container>
Để chuyển cửa sổ điều khiển (PowerShell) vào container đang
chạy (ví dụ Ubuntu), sử dụng lệnh: docker
attach <tên hoặc một phần ID của container>. Ví dụ: docker attach 8d
Muốn chuyển từ giao diện của Ubuntu về lại PowerShell (mà
không tắt Ubuntu), sử dụng tổ hợp phím Ctrl + P + Q.
Khi đứng ở dòng lệnh PowerShell mà muốn tắt một container (không
cần phải truy cập vào container đang chạy), thì dùng lệnh sau: docker stop <tên hoặc một phần id của
container>.
Khi đứng ở dòng lệnh PowerShell, muốn chạy một lệnh của một
container, (ví dụ lệnh ls của Ubuntu) thì dùng lệnh sau:
docker exec <tên container> <tên lệnh muốn container thực thi>
Xóa container
docker container rm <tên
hoặc một phần ID>
Ví dụ:
docker container rm 8d
1.3.5
Chuyển container thành image
Sau khi có container, thực hiện các cài đặt và cấu hình cần
thiết cho container. Để lưu container thành một image, sử dụng lệnh commit.
Muốn commit một container, thì container phải ở trạng thái dừng
(exited).
Cú pháp của lệnh commit:
docker commit <tên
của container muốn commit> <tên của image sẽ được tạo ra><:tên
phiên bản>
Ví dụ:
docker commit 8d
ubuntu:v1
1.3.6 Xuất image ra một tập tin
Để chia sẻ một image cho người khác, có thể
lưu image thành một tập tin, với cú pháp sau:
docker save --output <tên
tập tin><tên hoặc ID của image>
Ví dụ:
docker save --output
ubuntu.rar 70
Tập tin sẽ được tạo ra trong thư mục hiện tại (thư mục thể
hiện trên đường dẫn dòng lệnh). Ví dụ:
C:\\Users\TenUser.
1.3.7 Tạo image từ một tập tin
Để tạo image từ một
tập tin (ví dụ ubuntu.rar), sử dụng lệnh sau:
docker load –i <tên
của tập tin>
Ví dụ: docker load -i
ubuntu.rar
Đặt tên và phiên bản cho image vừa tạo:
docker tag <ID của
image> <tên mới:phiên bản>
Ví dụ: docker tag 70
newimages:v2
Xem thêm: Danh sách bài học