Thứ Năm, 26 tháng 10, 2023

5.Tra cứu thông tin image và giám sát các container trong Docker

  • Cấu trúc container
  • Truy vấn thông tin
  • Docker stats
  • Tự chạy container bị dừng

Các thành phần tạo nên Container

Những phần trước bạn đã biết tạo và chạy container (kể cả việc dừng, khởi động lại, xóa ... container), giờ tìm hiểu chi tiết hơn một chút về Docker Container. Một số khái niệm mô tả hoạt động của Docker

  • Container: đó là một hộp kín để ứng dụng hoạt động. Mỗi container đều được tạo dựa trên một image (image đó chứa đủ cấu hình, thành phần dữ liệ). Khi bạn chạy một container xuất phát sừ một image, có một lớp (layer) được phép ghi thêm vào trên đỉnh của image (vậy container = image + layer được phép ghi). Sau đó, khi bạn lưu container này thành image mới (lệnh docker commit), một lớp image mới được thêm vào vào.
  • Image: như là ảnh chụp lại các cấu hình của container. Một image luôn ở trạng thái chỉ đọc, mọi thứ muốn thay đổi đều phải lưu ở tầng trên cùng (được phép ghi) của container, và tầng này có thể lưu lại để tạo image mới (thêm layer vào image cũ) và nó lại thành trạng thái chỉ đọc. Với quy trình như vậy, mỗi image đều phụ thuộc vào một hoặc nhiều image cha.
  • Platform Image : là một image mà nó không có image cha. Những image loại này cchuwas các biến môi trường, các gói, tiện ích để ưng dụng ảo hóa chạy, nó cũng chỉ đọc.
  • Registry là kho chứa các image, nơi chi sẻ, tải về các image.
  • Dockerfile một file cấu hình với cấu trúc để sinh ra images. Sử dụng file Dockerfile là cách tự động hóa việc tạo, chạy, sử dụng các container.
Hinh ảnh image
Hình ảnh container
Với hình ảnh trên, bạn có thể thấy hình thành cấu trúc như sau:
  • Xuất phát từ một Platform Image, chạy thành container, vậy đang hoạt động với cấu trúc gồm tầng Platform Image + tầng được phép ghi. Lúc này thêm các thành phần vào tầng được ghi, rồi commit thành image mới. Ở image mới này, tầng được phép ghi lưu thành một tầng chỉ đọc tên image1.
  • Quy trình như vậy bạn có thể tạo thành nhiều tầng image khác nhau. Mỗi tầng này là chỉ đọc, chỉ có container đang chạy có tầng được phép ghi.
  • Truy vấn thông tin về Image và Container

    Lệnh docker history - lịch sử

    Lệnh này để 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 như sau

    docker history name_or_id_of_image

    Ví dụ image có 91d

    docker inspect 91d
    
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    91dadee7afee        3 weeks ago         /bin/sh -c #(nop)  CMD ["mysqld"]               0B
                        3 weeks ago         /bin/sh -c #(nop)  EXPOSE 3306 33060            0B
                        3 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B
                        3 weeks ago         /bin/sh -c ln -s usr/local/bin/docker-entryp…   34B
                        3 weeks ago         /bin/sh -c #(nop) COPY file:1667e4be6bef3129…   6.53kB
                        3 weeks ago         /bin/sh -c #(nop) COPY dir:478f098f3681084f7…   1.22kB
                        3 weeks ago         /bin/sh -c #(nop)  VOLUME [/var/lib/mysql]      0B
                        3 weeks ago         /bin/sh -c {   echo mysql-community-server m…   362MB
                        3 weeks ago         /bin/sh -c echo "deb http://repo.mysql.com/a…   56B
                        3 weeks ago         /bin/sh -c #(nop)  ENV MYSQL_VERSION=8.0.15-…   0B
                        3 weeks ago         /bin/sh -c #(nop)  ENV MYSQL_MAJOR=8.0          0B
                        3 weeks ago         /bin/sh -c set -ex;  key='A4A9406876FCBD3C45…   27.8kB
                        3 weeks ago         /bin/sh -c apt-get update && apt-get install…   44.8MB
                        3 weeks ago         /bin/sh -c mkdir /docker-entrypoint-initdb.d    0B
                        3 weeks ago         /bin/sh -c set -x  && apt-get update && apt-…   4.44MB
                        3 weeks ago         /bin/sh -c #(nop)  ENV GOSU_VERSION=1.7         0B
                        3 weeks ago         /bin/sh -c apt-get update && apt-get install…   10.2MB
                        3 weeks ago         /bin/sh -c groupadd -r mysql && useradd -r -…   329kB
                        3 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B
                        3 weeks ago         /bin/sh -c #(nop) ADD file:5ea7dfe8c8bc87ebe…   55.3MB
    
    

    Lệnh docker inspect

    Để có được thông tin chi tiết về một image, container nào đó sử dụng đến lệnh docker inspect, lệnh này trả về thông tin về đối tượng cần truy vấn dưới dạng JSON. Cú pháp như sau:

    docker inspect name_or_id_of_image_container

    Tham số name_or_id_of_image_container là tên hoặc ID của container hoặc Imgage. Ví dụ đang có container với tên c-php (hoặc ID là c4dd6ecd43b4), để truy vấn thông tin chi tiết về nó gõ

    docker inspect c-php
    Hoặc
    docker inspect c4dd6ecd43b4

    Kết quả thông tin có dạng (rất dài, đây chỉ là đoạn ngắn):

    [
    {
        "Id": "c4dd6ecd43b48d47653fed19bc7fea483c378f807bf08b6fda42ac7b7d35fcff",
        "Created": "2019-03-26T11:53:16.624300355Z",
        "Path": "docker-php-entrypoint",
        "Args": [
            "php-fpm"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 3313,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2019-03-27T01:41:53.107218Z",
            "FinishedAt": "2019-03-27T01:06:17.752159487Z"
        },
    ....
    

    Lệnh docker diff

    Lệnh docker diff để kiểm tra xem một container từ lúc nó được tạo ra đến giờ hệ thống file/thư mục thay đổi như thế nào. Cú pháp lệnh

    docker diff container-name-or-id

    Kết quả liệt kê ra danh sách trên từng dòng những thư mục, file có sự thay đổi. Tiền tố đầu dòng có thể là A (thêm vào add), D (bị xóa đi delete) hoặc C (được được cập nhật - change).

    Ví dụ:

    docker diff c-php
    
    C /etc
    A /etc/nanorc
    C /etc/alternatives
    A /etc/alternatives/pico
    A /etc/alternatives/editor
    C /home
    A /home/phpcode
    C /usr
    C /usr/share
    C /usr/share/doc-base
    A /usr/share/doc-base/nano-faq
    A /usr/share/doc-base/nano
    C /usr/share/doc
    A /usr/share/doc/nano
    

    Lệnh docker logs

    Để đọc thông tin log của container (mà không phải vào terminal của container) thì dùng tới lệnh docker logs, cú pháp cơ bản như sau:

    docker logs container-name-or-id

    Ví dụ container có tên là c-php (với id là c4dd6ecd43b4):

    docker logs c-php
    # hoặc
    docker logs c4dd6ecd43b4
    
    172.18.0.3 -  26/Mar/2019:16:52:44 +0000 "GET /index.php" 200
    172.18.0.3 -  26/Mar/2019:16:53:03 +0000 "GET /index.php" 200
    172.18.0.3 -  26/Mar/2019:16:53:07 +0000 "GET /wp-login.php" 302
    172.18.0.3 -  26/Mar/2019:16:53:07 +0000 "GET /wp-login.php" 200
    172.18.0.3 -  26/Mar/2019:16:53:11 +0000 "GET /index.php" 200
    172.18.0.3 -  27/Mar/2019:00:11:39 +0000 "GET /index.php" 200
    172.18.0.3 -  27/Mar/2019:00:11:54 +0000 "GET /index.php" 200
    [27-Mar-2019 00:58:04] NOTICE: Terminating ...
    [27-Mar-2019 01:41:53] NOTICE: fpm is running, pid 1
    [27-Mar-2019 01:41:53] NOTICE: ready to handle connections
    

    Bạn có thể đưa vào một số tùy chọn sau của lệnh:

    • --tail n chỉ hiện thị n dòng cuối
    • -f hoặc --follow với tham số này, nếu container đang chạy nó sẽ tự động hiện thị thêm log mới nếu container phát sinh log. Ngắt giám sát log nhấn CTRL+C

    Đo lường thông tin container với docker stats

    Lệnh docker stats giám sát theo thời gian thực một số lại lượng sử dụng bởi container gồm: CPU, bộ nhớ, và lưu lượng mạng, số tiến trình. Cú pháp lệnh như sau:

    docker stats container1, container2 ...

    Ví dụ:

    docker status c-php
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    c4dd6ecd43b4        c-php               0.02%               20.74MiB / 1.952GiB   1.04%               2.86MB / 1.55MB     27.3MB / 0B         3
    

    Docker tự khởi động Container nếu Container bị dừng

    Triển khai một ứng dụng, container nào đó bạn muốn đảm bảo nó được Docker khởi động lại nếu bị dừng vì lý do nào đó thì khi tạo container bằng lệnh docker run cần thiết lập chính sách khởi động của container với tham số --restart=always

    Ví dụ, ở phần trước container máy chủ MySQL tạo lại có chính sách này:

    docker run -it --network www-net --name c-mysql -h mysql \
            -v "/mycode/db":/var/lib/mysql1 -e MYSQL_ROOT_PASSWORD=abc123 \
            --restart=always mysql
    =============================
    Website không bao giờ chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
    =============================
    Nếu bạn muốn tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ kinh nghiệm, thủ tục, quy trình, bí kíp thực chiến mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
    - CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
    - Chi tiết tham khảo:
    https://bit.ly/oaz_w
    =============================
    2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
    - Oracle cơ bản: https://bit.ly/admin1_1200
    - Linux: https://bit.ly/linux_1200
    =============================
    KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
    📧 Mail: binhoracle@gmail.com
    ☎️ Mobile/Zalo: 0902912888
    👨 Facebook: https://www.facebook.com/BinhOracleMaster
    👨 Inbox Messenger: https://m.me/101036604657441 (profile)
    👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
    👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
    👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
    👨 Website: https://www.tranvanbinh.vn
    👨 Blogger: https://tranvanbinhmaster.blogspot.com
    🎬 Youtube: https://www.youtube.com/@binhguru
    👨 Tiktok: https://www.tiktok.com/@binhguru
    👨 Linkin: https://www.linkedin.com/in/binhoracle
    👨 Twitter: https://twitter.com/binhguru
    👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
    👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

    =============================
    oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

    ĐỌC NHIỀU

    Trần Văn Bình - Oracle Database Master