This page looks best with JavaScript enabled

Tìm hiểu và sử dụng docker (P5)

 ·  ☕ 8 min read  ·  🐉 Edisc
Toàn bộ series này được tham khảo từ hai nguồn chính: XuanThuLabChanelDockerDoc. 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.
    docker struct
    Ả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

1
docker stats

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)
Share on

Edisc
WRITTEN BY
Edisc
Cyber Security Engineer

 
What's on this Page