Toàn bộ series này được tham khảo từ hai nguồn chính: XuanThuLabChanel và DockerDoc. Em xin chân thành cảm ơn sự cống hiến của các tác giả của những kênh nói trên.❤️❤️❤️
Tra cứu thông tin Image, Container và giám sát hoạt động container Docker
Các thành phần tạo nên Container
Chúng ta đã thảo luận về các khái niệm căn bản của docker ở bải trước, sau đây là những khái niệm trên dưới góc nhìn của tác giả.
Container
: là một hộp kín để ứng dụng hoạt động. Mỗi container được tạo dựa trên một image
. Khi chạy một container xuất phát từ một image, có một lớp (layer) được phép ghi thêm vào trên đỉnh của image. Do đó có thể xem: container = images + layer cho phép ghi
. Và khi muốn lưu container này lại thành image mới, ta dùng lệnh docker commit
.
Image
: như một ảnh chụp lại các cấu hình của container. Một image ở trạng thái chỉ đọc, mọi thứ thay đổi chỉ được thay đổi ở tầng trên cùng (được phép ghi) của container. Khi dùng lệnh docker commit
, tầng này sẽ trở thành trạng thái chỉ đọc. Do đó, có thể thấy mỗi image đều phụ thuộc vào một hoặc nhiều image cha.
platform Image
: Nó là image, nhưng nó không có image cha, giống như bộ khung xương của một chú khủng long. Nó chứa các biến môi trường, các tiện ích để ứng dụng ảo hóa chạy.
Registry
là kho chứa các image, nơi chia sẻ, tải về các image.
Dockerfile
là một file cấu hình với cấu trúc sinh ra image, nó giúp tự động hóa việc tạo, chạy, sử dụng các container.
Ảnh trên cho thấy, docker bắt đầu với Platform Image để chứa các biến môi trường cần thiết để chạy. Trong quá trình container thực thi sẽ tiến hành cài đặt, bổ sung cấu hình, Layered Images 1
, Layered Images 2
là images của container sau khi thực hiện lệnh docker commit
và nó ở trạng thái chỉ đọc.
docker image history
Dùng để truy vấn thông tin lịch sử các thao tác để hình thành nên một image. Cú pháp:
1
|
docker image history image_name
|
Khi chạy, ta được kết quả như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
❯ docker image history php:8.1.0alpha1-fpm-buster
IMAGE CREATED CREATED BY SIZE COMMENT
65167ddfe773 3 days ago /bin/sh -c #(nop) CMD ["php-fpm"] 0B
<missing> 3 days ago /bin/sh -c #(nop) EXPOSE 9000 0B
<missing> 3 days ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B
<missing> 3 days ago /bin/sh -c set -eux; cd /usr/local/etc; if… 26.6kB
<missing> 3 days ago /bin/sh -c #(nop) WORKDIR /var/www/html 0B
<missing> 3 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-php-e… 0B
<missing> 3 days ago /bin/sh -c docker-php-ext-enable sodium 17B
<missing> 3 days ago /bin/sh -c #(nop) COPY multi:6dfba8f7e64bd54… 6.75kB
<missing> 3 days ago /bin/sh -c set -eux; savedAptMark="$(apt-m… 104MB
<missing> 3 days ago /bin/sh -c #(nop) COPY file:ce57c04b70896f77… 587B
<missing> 3 days ago /bin/sh -c set -eux; savedAptMark="$(apt-m… 12.5MB
<missing> 3 days ago /bin/sh -c #(nop) ENV PHP_SHA256=131a81ef9e… 0B
<missing> 3 days ago /bin/sh -c #(nop) ENV PHP_URL=https://downl… 0B
<missing> 3 days ago /bin/sh -c #(nop) ENV PHP_VERSION=8.1.0alph… 0B
<missing> 3 days ago /bin/sh -c #(nop) ENV GPG_KEYS=528995BFEDFB… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ENV PHP_LDFLAGS=-Wl,-O1 -… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ENV PHP_CPPFLAGS=-fstack-… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ENV PHP_CFLAGS=-fstack-pr… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ENV PHP_EXTRA_CONFIGURE_A… 0B
<missing> 4 weeks ago /bin/sh -c set -eux; mkdir -p "$PHP_INI_DIR… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ENV PHP_INI_DIR=/usr/loca… 0B
<missing> 4 weeks ago /bin/sh -c set -eux; apt-get update; apt-g… 227MB
<missing> 4 weeks ago /bin/sh -c #(nop) ENV PHPIZE_DEPS=autoconf … 0B
<missing> 4 weeks ago /bin/sh -c set -eux; { echo 'Package: php… 46B
<missing> 4 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ADD file:7362e0e50f30ff454… 69.3MB
|
Qua dữ kiện trên ta biết từ thao tác cơ sở đã trải qua những bước nào để có thể tạo thành image php
docker inspect
Lệnh này trả về thông tin của image dưới dạng JSON
1
|
docker inspect image_name/id
|
Lệnh này liệt kê tất cả các thông tin về image, ví dụ sau đây là một phần thông tin về các lớp layer của image php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:02c055ef67f5904019f43a41ea5f099996d8e7633749b6e606c400526b2c4b33",
"sha256:d2252dfd3726823303a8f54483e10f3ed7959f33ba63ea3a19bd0fc46587bc8f",
"sha256:6c63b3f282cb455ac2e456fb99cdceab42a876603b54cc97087c17b9999b780b",
"sha256:8e859e616115511355eadb05cbdcf86333434621f77c3ac80c410257ea39f115",
"sha256:363c2d4617a0df71a4d53f484a522caa9f2f02ba1271c7f7b4ceb524c5bac61a",
"sha256:c66c7f1f8019ed243ea38cb9ca384135cfeb3cda372de18deece786702c0c582",
"sha256:d87b1d289a070d7d2503bfedb8263ff5431423cd9eca8e577ce93d2e74392315",
"sha256:7d973749b6e2ff44d90f4df11576a27388c317f99400b746e8d8c021a747c91f",
"sha256:d5677f1776e8f36c5ba0cd40ff850a2e1ce919e22019bb76529ce6102c7b89ab",
"sha256:1cce6b181873aeb25ca52478d8f6c6b1c66213689085cc7a89e229ea045abd24"
]
},
|
Bên cạnh đó, lệnh này còn có thể tra cứu thông tin chi tiết của container, chúng ta chỉ cần thay tên/id của image thành tên/id của container để tra cứu thông tin chi tiết của container.
docker diff
Như đã nói ở trên, một container được sinh ra từ một platform image
, sau khi docker chạy, cài đặt, chỉnh sửa, thay đổi cấu trúc bên trong rồi commit
lại thành những layer. Để xem những thay đổi của cấu trúc thư mục bên trong từ thời điểm tạo ra đến thời điểm hiện tại, ta dùng lệnh docker diff
. Cú pháp:
1
|
docker diff container_id/name
|
Ví dụ, ta kiểm tra từ lúc tạo ra cho đến thời điểm hiện tại, cấu trúc thư mục bên trong container c-php
đã thay đổi như thế nào:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
❯ docker diff c-php
C /home
A /home/SharedData
C /usr
C /usr/local
C /usr/local/lib
C /usr/local/lib/php
C /usr/local/lib/php/extensions
C /usr/local/lib/php/extensions/no-debug-non-zts-20201009
A /usr/local/lib/php/extensions/no-debug-non-zts-20201009/mysqli.so
A /usr/local/lib/php/extensions/no-debug-non-zts-20201009/pdo_mysql.so
C /usr/local/etc
C /usr/local/etc/php
C /usr/local/etc/php/conf.d
A /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini
A /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini
C /usr/local/include
C /usr/local/include/php
C /usr/local/include/php/ext
A /usr/local/include/php/ext/mysqli
A /usr/local/include/php/ext/mysqli/php_mysqli_structs.h
A /usr/local/include/php/ext/mysqli/mysqli_mysqlnd.h
|
ở đây kí tư C
thể hiện rằng thư mục đó đã được cập nhật, còn A
là thư mục đó vừa được thêm vào.
docker log
Khi container hoạt động, dấu vết hoạt động của nó được ghi vào hệ thống log của container. Để kiểm tra log của container, chúng ta dùng lệnh:
1
|
docker logs container_name/id
|
Ví dụ ta kiểm tra log của c-php xem trong quá trình hoạt động nó đã ghi những gì:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
❯ docker logs c-php
[11-Jun-2021 07:15:23] NOTICE: fpm is running, pid 1
[11-Jun-2021 07:15:23] NOTICE: ready to handle connections
172.23.0.4 - 11/Jun/2021:07:16:07 +0000 "POST /wp-admin/setup-config.php" 500
[11-Jun-2021 07:17:34] NOTICE: Finishing ...
[11-Jun-2021 07:17:34] NOTICE: exiting, bye-bye!
[11-Jun-2021 07:17:35] NOTICE: fpm is running, pid 1
[11-Jun-2021 07:17:35] NOTICE: ready to handle connections
172.23.0.4 - 11/Jun/2021:07:17:42 +0000 "POST /wp-admin/setup-config.php" 500
172.23.0.4 - 11/Jun/2021:07:17:48 +0000 "POST /wp-admin/setup-config.php" 500
172.23.0.4 - 11/Jun/2021:07:17:53 +0000 "GET /index.php" 302
172.23.0.4 - 11/Jun/2021:07:17:53 +0000 "GET /wp-admin/setup-config.php" 200
172.23.0.4 - 11/Jun/2021:07:17:58 +0000 "GET /wp-admin/setup-config.php" 200
172.23.0.4 - 11/Jun/2021:07:18:19 +0000 "POST /wp-admin/setup-config.php" 500
172.23.0.4 - 11/Jun/2021:07:22:34 +0000 "POST /wp-admin/setup-config.php" 500
172.23.0.4 - 11/Jun/2021:07:22:43 +0000 "GET /index.php" 302
172.23.0.4 - 11/Jun/2021:07:22:43 +0000 "GET /wp-admin/setup-config.php" 200
172.23.0.4 - 11/Jun/2021:07:23:32 +0000 "GET /wp-admin/setup-config.php" 200
172.23.0.4 - 11/Jun/2021:07:24:31 +0000 "POST /wp-admin/setup-config.php" 500
172.23.0.4 - 11/Jun/2021:07:26:46 +0000 "POST /wp-admin/setup-config.php" 500
172.23.0.4 - 11/Jun/2021:07:36:12 +0000 "POST /wp-admin/setup-config.php" 500
172.23.0.4 - 11/Jun/2021:10:39:55 +0000 "GET /index.php" 302
172.23.0.4 - 11/Jun/2021:10:39:55 +0000 "GET /wp-admin/setup-config.php" 200
172.23.0.4 - 11/Jun/2021:10:39:59 +0000 "GET /wp-admin/setup-config.php" 200
172.23.0.4 - 11/Jun/2021:10:40:43 +0000 "POST /wp-admin/setup-config.php" 500
172.23.0.4 - 11/Jun/2021:11:16:52 +0000 "POST /wp-admin/setup-config.php" 500
[11-Jun-2021 11:19:58] NOTICE: Finishing ...
[11-Jun-2021 11:19:58] NOTICE: exiting, bye-bye!
[11-Jun-2021 11:20:00] NOTICE: fpm is running, pid 1
[11-Jun-2021 11:20:00] NOTICE: ready to handle connections
172.23.0.4 - 11/Jun/2021:11:20:05 +0000 "POST /wp-admin/setup-config.php" 500
172.23.0.4 - 11/Jun/2021:11:20:09 +0000 "GET /index.php" 302
172.23.0.4 - 11/Jun/2021:11:20:09 +0000 "GET /wp-admin/setup-config.php" 200
172.23.0.4 - 11/Jun/2021:11:22:19 +0000 "GET /wp-admin/setup-config.php" 200
172.23.0.4 - 11/Jun/2021:11:22:43 +0000 "POST /wp-admin/setup-config.php" 500
[11-Jun-2021 11:27:42] NOTICE: Finishing ...
[11-Jun-2021 11:27:42] NOTICE: exiting, bye-bye!
[14-Jun-2021 02:55:15] NOTICE: fpm is running, pid 1
[14-Jun-2021 02:55:15] NOTICE: ready to handle connections
|
Trường hợp log quá dài, ta có thể chỉ định số dòng kiểm tra bằng cách thêm option --tail so_dong
1
2
3
4
5
6
7
8
9
10
11
|
❯ docker logs --tail 10 c-php
[11-Jun-2021 11:20:00] NOTICE: ready to handle connections
172.23.0.4 - 11/Jun/2021:11:20:05 +0000 "POST /wp-admin/setup-config.php" 500
172.23.0.4 - 11/Jun/2021:11:20:09 +0000 "GET /index.php" 302
172.23.0.4 - 11/Jun/2021:11:20:09 +0000 "GET /wp-admin/setup-config.php" 200
172.23.0.4 - 11/Jun/2021:11:22:19 +0000 "GET /wp-admin/setup-config.php" 200
172.23.0.4 - 11/Jun/2021:11:22:43 +0000 "POST /wp-admin/setup-config.php" 500
[11-Jun-2021 11:27:42] NOTICE: Finishing ...
[11-Jun-2021 11:27:42] NOTICE: exiting, bye-bye!
[14-Jun-2021 02:55:15] NOTICE: fpm is running, pid 1
[14-Jun-2021 02:55:15] NOTICE: ready to handle connections
|
Để kiểm tra log theo thời gian thực khi docker đang chạy, ta thêm tùy chọn -f
vào:
1
|
docker logs -f container_name/id
|
docker stats
Khi container đang chạy, nó có sử dụng các tài nguyên của hệ thống, để giám sát mức độ sử dụng tài nguyên, ta sử dụng cú pháp:
1
|
docker stats container_name/id
|
khi dùng
mặc định, nó sẽ giám sát toàn bộ container đang chạy trên hệ thống
Process
docker top
1
|
docker top docker_name/id
|
Dùng để xem thông tin về tiến trình (process) của docker, bao gồm PID (process Id) và PPID (Parent Process Id).
Chúng ta còn có thể xem thông tin về các tiến trình ở dạng cây:
1
|
pstree -c -p -A $(pgrep dockerd)
|