Cách quản lí và Kiểm soát Docker Container với dry trên Ubuntu 16.04
Cách quản lí và Kiểm soát Docker Container với dry trên Ubuntu 16.04
Mở đầu
dry là một ứng dụng terminal đơn giản được xây dựng để hoạt động với các Docker container và các image. Sử dụng dry loại bỏ việc lặp đi lặp lại các lệnh Docker Engine và cung cấp một giao diện dòng lệnh khác thay thế cho Docker CLI.
dry có khả năng khởi động hoặc dừng container một cách nhanh chóng, an toàn, xóa triệt để các Docker image, giám sát các tiến trình trên container liên tục trên thời gian thực, và truy cập ouput của các lệnh info
, inspect
, history
, và log
trong Docker một cách dễ dàng.
Hầu hết các lệnh có thể được thực hiện thông qua Docker Engine CLI có thể được thực thi dễ dàng trong dry, với các hành vi và kết quả tương tự. Chức năng bổ sung của dry, Docker Swarm, cung cấp một cách hiệu quả để theo dõi và quản lý các thiết lập của những multi-host container.
Trong bài viết này, ta sẽ cài dry và khám phá một số tính năng của nó:
- Tương tác với Docker container, image và network
- Giám sát Docker container
- Tương tác với các node và dịch vụ của Docker Swarm
Yêu cầu
- Một Ubuntu 16.04 server với một sudo non-root use. Tham khảo bài viết Thiết lập ban đầu cho server dùng Ubuntu 16.04
- Docker được cài đặt theo các bước trong bài viết Cách Cài đặt và Sử dụng Docker trên Ubuntu 16.04
- Một vài Docker container đang chạy được kết nối với nhau qua mạng để test quá trình cài đặt.
- Để lấy ví dụ cho bài viết, ta sẽ sử dụng cài đặt của WordPress và PHPMyAdmin (không có các bước tùy chọn với thư mục gốc) từ bài viết Cách Cài đặt Wordpress và PhpMyAdmin với Docker Compose trên Ubuntu 14.04
- Hoặc bạn có thể dùng bản cài đặt container của riêng mình nếu muốn.
Bước 1 — Cài dry
Đầu tiên ta cần cài dry trên Docker server. Gói nhị phân mới nhất của dry nằm trên trang phát hành GitHub của dry.
Tải bản mới nhất của dry-linux-amd64
ở thời điểm bài viết là v0.9-beta.3
wget https://github.com/moncho/dry/releases/download/v0.9-beta.3/dry-linux-amd64
Tiếp theo dịch chuyển file dry-linux-amd64
đến/usr/local/bin/dry
.
sudo mv dry-linux-amd64 /usr/local/bin/dry
/usr/local/bin
là đường dẫn chuẩn cho các file nhị phân cho các chương trình của server. Việc chuyển file nhị phân của dry đến địa chỉ này cũng cho phép ta sử dụng giao diện dòng lệnh của dry on từ bất cứ đâu trên server.
Thay đổi quyền sở hữu của file nhị phân thành chmod
để cài nó.
sudo chmod 755 /usr/local/bin/dry
Kiểm tra xem dry
đã sử dụng được chưa với cờ -v
.
dry -v
Bạn sẽ thu được phiên bản của dry:
Version Details Output
dry version 0.9-beta.2, build d4d7a789
Bước 2 — Thao tác với Docker Containers
Chạy dry để áp dụng các lệnh điều khiển của nó đến terminal.
dry
Phía trên cùng của bảng điều khiển có thông tin về máy chủ và bản Docker được cài trên nó, như phiên bản Docker, phiên bản Docker Engine API, server được kích hoạt Docker- Swarm ở chế độ worker hay manager, cùng hostname và các tài nguyên hiện có trên server.
Phía dưới là danh sách các phím điều khiển của dry:
Navigation key options
[H]:Help [Q]:Quit | [F1]:Sort [F2]:Toggle Show Containers [F5]:Refresh [%]:Filter |
[m]:Monitor mode [2]:Images [3]:Networks [4]:Nodes [5]:Services | [Enter]:Commands
Bạn có thể bấm F5
bất cứ lúc nào để refresh dry khi xảy ra lỗi.
Mặc định khi bạn khởi động dry, danh sách Containers
sẽ được hiển thị.
Nếu đang sử dụng gói container Wordpress, MariaDB, và PHPMyAdmin được đề cập đến trong phần yêu cầu, bạn sẽ thấy 3 container đó được liệt kê:
Dùng các phím mũi tên để chọn container Wordpress rồi bấm ENTER
.
Một vài thông tin về container sẽ được hiển thị bên trên màn hình, như thông tin về cổng, liên kết mạng, và địa chỉ IP của container :
Wordpress Container Statistics
Container Name: wordpress_wordpress_1 ID: f67f9914b57e Status: Up 13 minutes Image: wordpress Created: About an hour ago Command: docker-entrypoint.sh apache2-foreground Port mapping: 0.0.0.0:8080->80/tcp Network Name: bridge IP Address: 172.17.0.3 Labels 6
Bạn sẽ có những tùy chọ sau với một container:
Fetch logs
, giống với lệnhdocker logs
của Docker Engine. Tùy chọn này có ích trong việc debug và phát hiện lỗi bên trong container.Kill container
, dùng để ngừng container gặp lỗi.Remove container
, dùng để xóa các containers không cần thiết một cách sạch sẽ.
Cảnh báo: Lệnh Kill container
và Remove Container
được thực hiện ngay lập tức và không có câu hỏi xác nhận thực hiện lệnh, nên hãy thận trọng.
Inspect container
, giống với lệnhdocker container inspect
.Restart
, giúp ngừng và khởi động lại container. Lựa chọn này rất tiện lợi vì thao tác nhanh hơn nhiều so với lệnh Docker Engine giúp restart hoặc truy vấn trạng thái của một container.Show image history
, liệt kê danh sách các lệnh ta đã dùng để build image của containe. Các "tầng" được sinh ra trong quá trình build image và là kết quả của các lệnh trong Dockerfile. Với tùy chọn này, ta có thể biết chính xác container đã được tạo dựa trên Docker image gốc như thế nào.Stats + Top
, bao gồm các thông tin như tình trạng sử dụng CPU, tổng bộ nhớ, lưu lượng dữ liệu vào ra.... Nó cũng bao gồm một danh sách các tiến trình đang chạy, tương tự với kết quả của lệnhtop
.Stop
, dừng một container. Bạn có thể bấmF2
đổi container trên danh sáchContainers
để thêm vàocurrently stopped and active
, sau đó bạn có thể restart một container với tùy chọnRestart
t.
Bấm ESC
để trở lại mục root Containers
của bảng điều khiển. Giờ ta sẽ chuyển qua mục Images
.
Bước 3 — Tương tác với Docker Image
Từ mục Containers
, bấm 2
để chuyển sang mục Images
.
Mục này cho phép ta thực hiện dễ dàng hơn lệnh docker image inspect
. dry cso một vài phím tắt như sau:
CTRL+D
tương đương vớiRemove Dangling
."dangling volumes” đề cập đến các container volume không còn được sử dụng bởi bất cứ container nào. Trong Docker CLI, nó tương đương với lệnhdocker volume rm
được thực hiện với cờdangling=true
và data volume cần xóa.CTRL+E
tương đương vớiRemove
, tương đương với lệnhdocker rmi
, cho phép gỡ bỏ image khi không có container nào được tạo từ nó đang chạy.CTRL+F
tương đương vớiForce Remove
, cho phép bạn bắt buộc xóa một image, giống với lệnhdocker rmi --force
.I
tương đương vớiHistory
, hiển thị dữ liệu giống tùy chọnShow Image History
trong mụcContainers
.
Bước 4 — Tương tác với Docker Network
Bấm 3
để vào mục Networks
.
Mục này lí tưởng cho việc kiểm tra các liên kết và cấu hình mạng cho Docker container.
Bạn có thể xóa mạng cho Docker bằng CTRL+E
, tuy nhiên bạn không thể gỡ những gói Docker network mặc định như bridge
. Giả sử nếu cố xóa gói này, bạn sẽ thấy output như sau:
Output
. . .
"Containers": {
"34f8295b39b7c3364d9ceafd4e96194f210f22acc41d938761e1340de7010e05": {
"Name": "wordpress_wordpress_db_1",
"EndpointID": "68370df8a13b92f3dae2ee72ff769e5bdc00da348ef3e22fa5b8f7e9e979dbd5",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"e7105685e0e6397fd762949e869095aa4451a26cdacdad7f5e177bde52819c4a": {
"Name": "wordpress_wordpress_1",
"EndpointID": "44ea3a133d887c5352b8ccf70c94cda9f05891b2db8b99a95096a19d4a504e16",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
},
"e7d65c76b50ff03fc50fc374be1fa4bf462e9454f8d50c89973e1e5693eef559": {
"Name": "wordpress_phpmyadmin_1",
"EndpointID": "7fb1b55dd92034cca1dd65fb0c824e87a9ba7bbc0860cd3ed34744390d670b78",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
}},
. . .
Các mục của output trên cho biết địa chỉ IP và địa chỉ MAC của container. Từ đây ta có thể thấy tất cả container đều là thành viên của mạng bridge
và có thể giao tiếp với nhau, biếu hiện cho mạng container đang hoạt động bình thường.
Dùng phím ESC
để đóng ouput.
Bước 5 — Giám sát Docker Container
Press the M
key for a quick condensed overview of all of your running containers on the current server/host. This screen can be accessed from any of the root sections of dry, like Containers
, Images
, and Networks
.
Portions of this information are listed elsewhere in the program (such as inside the Stats + Top
container options) but this view provides a central location for information on all containers, which allows you to monitor the entire stack. This is useful when managing larger quantities of containers.
Press Q
to exit the dashboard. From here, we'll set up dry with Docker Swarm.
Bước 6 — Cài đặt dry trên Trình quản lí cụm Docker Swarm (Không bắt buộc)
Từ máy tính của bạn, dùng lệnh docker-machine
để SSH vào một node trong cụm, ở đây là node-1
.
docker-machine ssh node-1
Dùng lệnh curl
để cài dry qua đoạn script nhị phân với lệnh:
curl -sSf https://moncho.github.io/dry/dryup.sh | sh
Đoạn mã script nhị phân sẽ tự động được chuyển đến /usr/local/bin
:
Output
dryup: Moving dry binary to its destination dryup: dry binary was copied to /usr/local/bin, now you should 'sudo chmod 755 /usr/local/bin/dry'
Thay đổi quyền truy cập gói với lệnh:
sudo chmod 755 /usr/local/bin/dry
Chạy dry.
dry
Phía trên bên phải mục Containers
, dòng trạng thái Swarm
và Node role
sẽ được hiển thị các giá trị:
Output
Swarm: active
Node role: manager
Nodes: 3
Bước 7 — Tương tác với các Node của Docker Swarm (Không bắt buộc)
Từ mục Containers
, bấm 4
để chuyển sang mục Nodes
.
Mục này cho ta biết một vài thông số của các node, như vai trò (manager hay worker),trạng thái, và tính khả dụng.
Dùng các phím mũi tên để chọn node-2
, rồi bấm ENTER
. Bạn sẽ thấy một vài tác vụ riêng biệt trên node:
Trong dịch vụ webserver
, node-2
giữ 2 trong số 5 container được kết nối. Các tiến trình cho thấy CURRENT STATE
của hai container là "ACTIVE", và chúng đã chạy trong bao lâu. Việc đánh số các container của bạn phụ thuộc vào worker node đanh chứa container đó, được đề cập đến trong lệnh Docker serverice
Trở lại mục Nodes
bằng cách bấm ESC
.
Một việc cần làm với Docker Swarm là thay đổi trạng thái hay tính khả dụng của các node. Chọn node-1
rồi bấm CTRL+A
để Set Availability
:
Output
Changing node availability, please type one of ('active'|'pause'|'drain')
Gõ drain
rồi bấm ENTER
.
Tùy chọn này ngăn một node nhận những lệnh khác từ Swarm cluster manager, được sử dụng cho việc bảo trì. Sử dụng drain cũng khiển trình quản lí node chạy một bản sao của node đó trên một node riêng biệt được thiết lập để hoạt động trong thời gian node drain được bảo trì.
Bạn sẽ thấy thông báo sau xuất hiện:
Output
Node iujfrchorop9mzsjswrclzcmb availability is now drain
Thay đổi này cũng tác động lên cột AVAILABILITY
.
Để kích hoạt lại node-2
, chọn nó rồi bấm CTRL+A
để vào lại Set Availability
. Lần này gõ active
rồi bấm ENTER
.
Output
Docker daemon: update wrclzcmb is now active
Tùy chọn pause
mà ta không dùng tới ở đây có tác dụng tạm dừng các xử lí trong container của node đó đến khi nó được active
trở lại.
Bước 8 — Tương tác với Dịch vụ Docker Swarm (Không bắt buộc)
Bấm 5
để xem mục Services
của dry.
Ta mới chỉ thiết lập một dịch vụ là webserver
, nhằm mục đích nhân bản ( chẳng hạn tạo container mới) khi cần thiết với số lượng tối đa là 5. Hình trên cho thấy cả 5/5
bản sao đã được kích hoạt, cùng một vài thông số khác
Ta có thể dùng dry để xem nhiều thông tin hơn về dịch vụ. Bấm ENTER
sau khi chọn dịch vụ webserver
:
Bạn có thể thấy có 7 tác vụ được liệt kê, mặc dù tối đa chỉ có 5, do Docker Swarm đã tạo thêm hai tác vụ khác từ bước 7 khi ta chuyển node-2
về chế độ drain.
Bạn cũng có thể dùng dry để thay đổi số lượng tối đa của các bản sao. Bấm ESC
để trở lại mục Services
rồi bấm CTRL+S
sau khi chọn vào webserver
:
Output
Scale service. Number of replicas?
Trong hoàn cảnh này, mở rộng dịch vụ này sẽ có ích để đáp ứng mọi nhu cầu cho các tài nguyên bổ sung do lưu lượng truy cập web tăng. Tăng số tác vụ lên 8
rồi bấm ENTER
.
Xác nhận lệnh:
Output
Docker daemon: update v6gbc1ms0pi scaled to 8 replicas
Bạn có thể thấy Services
hiển thị 8/8
bản sao
Nếu muốn xóa một dịch vụ, bấm CTRL+R
:
Output
About to remove the selected service. Do you want to proceed? y/N
Bấm Q
để thoát khỏi dry.
Tổng kết
Hướng dẫn này đã giúp bạn thiết lập dry trên một Docker host và trình quản lý cụm Docker Swarm, làm quen với các chức năng của dry như tương tác với Docker container, image, với mạng lưới các container cũng như các node và dịch vụ của Docker Swarm.