hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Docker
Giám sát, theo dõi lịch sử/trạng thái container

Giám sát, theo dõi lịch sử/trạng thái container

  • 04-10-2024
  • Toanngo92
  • 0 Comments

Mục lục

    • Các Thành Phần Cấu tạo Docker Container
    • 1. Container
    • 2. Image
    • 3. Platform Image
    • 4. Registry
    • 5. Dockerfile
  • Truy vấn thông tin về Image và Container
  • Truy vấn thông tin chi tiết của đối tượng trong Docker
    • Cú pháp cơ bản:
    • Ví dụ sử dụng:
    • Thông tin trả về (output) sẽ bao gồm:
  • Theo dõi sự khác biệt (thay đổi) giữa file system của một container đang chạy
    • Cú pháp:
    • Ví dụ sử dụng:
    • Kết quả (output) ví dụ:
    • Giải thích các ký tự trong kết quả:
    • Công dụng:
  • Xem nhật ký hoạt động container
    • Cú pháp:
    • Các tùy chọn phổ biến:
    • Ví dụ sử dụng:
    • Công dụng:
  • Giám sát và đo lường thông tin về hiệu suất của các container
    • Cú pháp:
    • Kết quả (output) ví dụ:
    • Giải thích các cột:
    • Các tùy chọn hữu ích:
    • Công dụng:
  • Tự động khởi động lại container khi bị dừng/ngắt
    • Các tùy chọn --restart phổ biến:
    • Ví dụ khởi động container với tùy chọn --restart:
    • Kiểm tra trạng thái khởi động lại của container:
    • Tóm tắt:

Các Thành Phần Cấu tạo Docker Container

Để hiểu rõ cách hoạt động của Docker Container, chúng ta cần nắm vững các thành phần cơ bản tạo nên Docker Container.

1. Container

Container là một đơn vị độc lập, nơi ứng dụng và các thành phần của nó được chạy. Nó hoạt động như một “hộp kín” bao gồm toàn bộ các tệp cấu hình, dữ liệu và môi trường cần thiết cho ứng dụng. Mỗi container được tạo ra từ một image. Khi container được khởi chạy, một lớp layer có thể ghi được (writeable layer) sẽ được thêm vào trên đỉnh của image. Điều này cho phép container có thể ghi thêm dữ liệu trong quá trình hoạt động mà không ảnh hưởng đến image gốc.

Container có thể dễ dàng được lưu trữ dưới dạng image mới thông qua lệnh docker commit, lúc này lớp ghi được sẽ được lưu thành một lớp mới trong image.

2. Image

Image trong Docker là một bản sao “đóng băng” của ứng dụng và các cấu hình cần thiết. Image luôn ở trạng thái chỉ đọc (read-only), và để thực hiện bất kỳ thay đổi nào, Docker sẽ tạo ra một lớp ghi được trên container đang chạy. Khi lớp này được lưu lại, nó sẽ trở thành một image mới với cấu trúc thêm một lớp (layer) mới.

Điều này giúp Docker dễ dàng quản lý và chia sẻ các phiên bản khác nhau của ứng dụng một cách hiệu quả, đồng thời tối ưu hóa không gian lưu trữ bằng cách tái sử dụng các lớp không thay đổi của các image.

3. Platform Image

Platform Image là loại image không có image cha. Đây là image nền tảng chứa các thành phần như biến môi trường, gói phần mềm và tiện ích cần thiết để ứng dụng chạy trong môi trường ảo hóa. Giống như các image khác, platform image cũng ở trạng thái chỉ đọc.

Những platform image phổ biến có thể kể đến là Alpine, Debian, hoặc Ubuntu—chúng cung cấp một hệ điều hành nhẹ và tối giản để bắt đầu xây dựng ứng dụng.

4. Registry

Registry là kho lưu trữ các image Docker. Đây là nơi chia sẻ và tải về các image từ cộng đồng. Docker Hub là registry chính thức của Docker, tuy nhiên, các tổ chức cũng có thể xây dựng registry riêng để lưu trữ và quản lý các image của mình.

Sử dụng registry giúp dễ dàng chia sẻ image giữa các nhóm phát triển hoặc môi trường triển khai khác nhau, tạo ra một luồng làm việc nhanh chóng và linh hoạt hơn.

5. Dockerfile

Dockerfile là một tệp cấu hình chứa các lệnh để tự động tạo image. Thay vì phải thực hiện các thao tác thủ công để cài đặt và cấu hình container, bạn có thể sử dụng Dockerfile để tự động hóa quy trình này.

Dockerfile có cấu trúc rõ ràng và dễ đọc, bao gồm các lệnh như FROM (chọn image gốc), RUN (chạy các lệnh trong quá trình tạo image), và COPY (sao chép tệp từ hệ thống máy chủ vào container). Điều này giúp việc tạo, triển khai và cập nhật các image trở nên đơn giản và hiệu quả hơn.

Cấu trúc Docker

Truy vấn thông tin về Image và Container

Truy vấn thông tin lịch sử:

docker history name_or_id_of_image

Ví dụ:

docker history nginx

Output:

IMAGE           CREATED         CREATED BY                                      SIZE        COMMENT
sha256:c7b7d163e666   2 days ago      /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon of…   7.19kB     
sha256:2d9f7bc24c59   2 days ago      /bin/sh -c #(nop)  EXPOSE 80                        0B         
sha256:58af7db34356   2 days ago      /bin/sh -c #(nop)  STOPSIGNAL SIGTERM               0B         
sha256:ed46e1aa8872   2 days ago      /bin/sh -c #(nop)  CMD ["sh" "-c" "nginx -g 'daem…   0B         
sha256:b25f5a0f55f1   2 days ago      /bin/sh -c mkdir -p /var/log/nginx && chown -R ng…   14.5MB     
sha256:f2cc5edc34ef   2 days ago      /bin/sh -c #(nop) COPY file:3a39d107ec827f1cc29f4…   135B       
sha256:be8662bc0011   2 days ago      /bin/sh -c #(nop)  ENV NGINX_VERSION=1.19.10        0B         
sha256:24302f7cf5b1   2 days ago      /bin/sh -c #(nop)  LABEL maintainer=NGINX Docker …   0B         
sha256:3058ab8b93d8   2 weeks ago     /bin/sh -c apt-get update && apt-get install -y n…   54.3MB     
sha256:4ae46518db0c   2 weeks ago     /bin/sh -c apt-get update && apt-get install -y c…   23.4MB     
sha256:85d6cde2e28d   4 weeks ago     /bin/sh -c #(nop)  CMD ["bash"]                     0B         
sha256:d1d60b3e6782   4 weeks ago     /bin/sh -c apt-get update && apt-get install -y s…   12.5MB     
sha256:8e674ad76bd5   4 weeks ago     /bin/sh -c #(nop)  MAINTAINER Nginx Developers <n…   0B         
sha256:8c697c71199b   6 weeks ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]                0B         
sha256:1575c5f63d3d   6 weeks ago     /bin/sh -c apt-get update && apt-get install -y s…   123MB      

Truy vấn thông tin chi tiết của đối tượng trong Docker

Lệnh docker inspect dùng để hiển thị thông tin chi tiết về đối tượng Docker, bao gồm container, image, volume hoặc network. Kết quả trả về dưới dạng JSON chứa rất nhiều thông tin về cấu hình và trạng thái của đối tượng được chỉ định.

Cú pháp cơ bản:

docker inspect <name_or_id>

Trong đó:

  • <name_or_id>: là tên hoặc ID của container, image, volume hoặc network mà bạn muốn xem thông tin chi tiết.

Ví dụ sử dụng:

  1. Inspect một container:
docker inspect my_container

Lệnh này sẽ trả về thông tin chi tiết của container có tên là my_container, bao gồm:

  • Các cấu hình mạng (IP address, ports).
  • Các biến môi trường (environment variables).
  • Thông tin về mount (volumes).
  • Trạng thái của container (đang chạy hoặc đã dừng).
  1. Inspect một image:
docker inspect nginx

Lệnh này trả về thông tin về image nginx, bao gồm:

  • Các lớp (layers) của image.
  • Các lệnh được thực thi khi container từ image này khởi chạy.
  • Thông tin về kích thước, checksum của image.
  1. Inspect một volume:
docker inspect my_volume

Lệnh này cung cấp chi tiết về volume my_volume, bao gồm:

  • Đường dẫn nơi volume được mount trên hệ thống.
  • Các container sử dụng volume này.
  1. Inspect một network:
docker inspect my_network

Lệnh này sẽ cung cấp chi tiết về network my_network, bao gồm:

  • Các container được kết nối vào network này.
  • Các cấu hình liên quan đến bridge, IP ranges, gateways, v.v.

Thông tin trả về (output) sẽ bao gồm:

  • ID: Mã định danh duy nhất của đối tượng.
  • Created: Thời gian tạo đối tượng.
  • Path: Đường dẫn của lệnh hoặc tệp lệnh được sử dụng khi tạo container.
  • Args: Các tham số được truyền vào lệnh đó.
  • State: Trạng thái hiện tại của container.
  • Mounts: Các volume hoặc thư mục được mount vào container.
  • NetworkSettings: Cấu hình mạng của container (như địa chỉ IP, port mapping).
  • Và nhiều thông tin khác nữa.

Lệnh docker inspect rất hữu ích khi bạn muốn tìm hiểu sâu hơn về cách một container, image, volume hoặc network hoạt động và được cấu hình.

Theo dõi sự khác biệt (thay đổi) giữa file system của một container đang chạy

Lệnh docker diff dùng để hiển thị sự khác biệt (thay đổi) giữa file system của một container đang chạy hoặc đã dừng và file system ban đầu từ image mà container đó được tạo ra.

Cụ thể, lệnh này sẽ liệt kê các tệp và thư mục đã bị:

  • Thay đổi.
  • Thêm mới.
  • Xóa đi trong quá trình container chạy.

Cú pháp:

docker diff <container_name_or_id>

Trong đó:

  • <container_name_or_id>: là tên hoặc ID của container mà bạn muốn xem các thay đổi.

Ví dụ sử dụng:

  1. Kiểm tra sự thay đổi của container:
docker diff my_container

Lệnh này sẽ hiển thị danh sách các thay đổi trong hệ thống tệp của container có tên là my_container.

Kết quả (output) ví dụ:

C /etc/hosts
A /new_file.txt
D /old_file.txt

Giải thích các ký tự trong kết quả:

  • C: Thay đổi (Change) — tệp hoặc thư mục đã bị thay đổi.
  • A: Thêm mới (Add) — tệp hoặc thư mục mới đã được thêm vào.
  • D: Xóa (Delete) — tệp hoặc thư mục đã bị xóa khỏi hệ thống file của container.

Công dụng:

  • Giúp kiểm tra những gì đã thay đổi trong container khi bạn chạy các lệnh hoặc thực hiện các thao tác bên trong container.
  • Theo dõi các thay đổi tệp khi phát triển hoặc thử nghiệm ứng dụng trong container.

Xem nhật ký hoạt động container

Lệnh docker logs được sử dụng để xem các log (nhật ký) của một container Docker. Những log này chứa thông tin về đầu ra tiêu chuẩn (stdout) và đầu ra lỗi (stderr) của container, giúp bạn theo dõi và gỡ lỗi ứng dụng đang chạy bên trong container.

Cú pháp:

docker logs <container_name_or_id>

Trong đó:

  • <container_name_or_id>: là tên hoặc ID của container mà bạn muốn xem log.

Các tùy chọn phổ biến:

  • -f (follow): Hiển thị log theo thời gian thực. Giống như tail -f, bạn có thể xem log liên tục khi container vẫn đang chạy. docker logs -f <container_name_or_id>
  • --tail: Giới hạn số dòng log được hiển thị. docker logs --tail 100 <container_name_or_id> Ví dụ này chỉ hiển thị 100 dòng log cuối cùng.
  • --since: Chỉ hiển thị log kể từ một thời điểm cụ thể. docker logs --since "2023-10-01" <container_name_or_id> Hiển thị log từ ngày 1/10/2023.
  • --until: Hiển thị log cho đến một thời điểm cụ thể. docker logs --until "2023-10-01T12:00" <container_name_or_id> Ví dụ này sẽ hiển thị log trước 12 giờ trưa ngày 1/10/2023.
  • --timestamps: Hiển thị các log kèm theo dấu thời gian. docker logs --timestamps <container_name_or_id>
  • --details: Hiển thị thêm chi tiết về log nếu có.

Ví dụ sử dụng:

  1. Xem log của một container: docker logs my_container
  2. Xem log theo thời gian thực: docker logs -f my_container
  3. Hiển thị 50 dòng log cuối cùng: docker logs --tail 50 my_container

Công dụng:

  • Theo dõi đầu ra của ứng dụng chạy trong container.
  • Gỡ lỗi ứng dụng khi có sự cố xảy ra.
  • Kiểm tra các thông báo lỗi hoặc thông tin hữu ích từ container.

Giám sát và đo lường thông tin về hiệu suất của các container

Lệnh docker stats được sử dụng để giám sát và đo lường thông tin về hiệu suất của các container đang chạy, bao gồm các chỉ số như CPU, bộ nhớ, băng thông mạng và lưu lượng I/O (Input/Output).

Cú pháp:

docker stats [OPTIONS] [container_name_or_id]

Nếu không chỉ định container cụ thể, lệnh này sẽ hiển thị thông tin hiệu suất của tất cả các container đang chạy.

Kết quả (output) ví dụ:

CONTAINER ID   NAME          CPU %     MEM USAGE / LIMIT   MEM %     NET I/O           BLOCK I/O   PIDS
d9b100f2f636   my_container  2.53%     25.5MiB / 2GiB      1.27%     1.2kB / 2.5kB     0B / 0B     12

Giải thích các cột:

  1. CONTAINER ID: ID của container.
  2. NAME: Tên container.
  3. CPU %: Tỷ lệ phần trăm CPU mà container đang sử dụng.
  4. MEM USAGE / LIMIT: Bộ nhớ RAM mà container đang sử dụng và giới hạn bộ nhớ đã thiết lập.
  5. MEM %: Tỷ lệ phần trăm bộ nhớ được sử dụng.
  6. NET I/O: Dữ liệu vào/ra qua mạng mà container sử dụng (Download/Upload).
  7. BLOCK I/O: Lưu lượng vào/ra từ thiết bị lưu trữ (disk).
  8. PIDS: Số lượng tiến trình (process IDs) đang chạy trong container.

Các tùy chọn hữu ích:

  • --no-stream: Chỉ hiển thị một lần và không cập nhật liên tục. docker stats --no-stream Ví dụ này chỉ in ra thông tin hiệu suất một lần thay vì cập nhật theo thời gian thực.
  • --all hoặc -a: Hiển thị thông tin của tất cả các container, bao gồm cả container đã dừng. docker stats --all
  • Giới hạn số container hiển thị: Bạn có thể chỉ định tên hoặc ID của container để chỉ xem thông tin của container đó. docker stats my_container

Công dụng:

  • Giám sát hiệu suất: Lệnh này giúp bạn theo dõi việc sử dụng tài nguyên của các container để biết container nào đang tiêu tốn nhiều CPU, RAM, hoặc băng thông mạng.
  • Gỡ lỗi: Khi một container hoạt động chậm, docker stats có thể cung cấp thông tin về việc nó có sử dụng quá nhiều tài nguyên hay không.
  • Tối ưu hóa: Giúp điều chỉnh giới hạn tài nguyên của các container dựa trên thông tin sử dụng thực tế.

Tự động khởi động lại container khi bị dừng/ngắt

Docker có thể tự động khởi động lại container nếu container bị dừng, và bạn có thể cấu hình hành vi này bằng cách sử dụng tùy chọn --restart khi khởi động container. Tùy chọn này cho phép bạn kiểm soát cách Docker xử lý container trong các tình huống như lỗi hệ thống hoặc khi container bị dừng bất ngờ.

Các tùy chọn --restart phổ biến:

  1. no: Đây là tùy chọn mặc định. Docker sẽ không tự động khởi động lại container nếu nó bị dừng.
   docker run --restart no <image_name>
  1. on-failure: Docker sẽ khởi động lại container nếu nó thoát ra với mã lỗi khác 0 (tức là xảy ra lỗi). Bạn cũng có thể chỉ định số lần tối đa mà Docker cố gắng khởi động lại container. Ví dụ: khởi động lại container tối đa 3 lần khi gặp lỗi:
   docker run --restart on-failure:3 <image_name>
  1. always: Docker sẽ luôn cố gắng khởi động lại container nếu nó bị dừng, bất kể lý do gì. Ngay cả khi bạn khởi động lại hệ thống, Docker cũng sẽ tự động khởi động lại container này.
   docker run --restart always <image_name>
  1. unless-stopped: Docker sẽ tự động khởi động lại container trừ khi container đã bị dừng bằng lệnh thủ công (như docker stop). Container sẽ không tự động khởi động lại nếu nó bị dừng bằng tay.
   docker run --restart unless-stopped <image_name>

Ví dụ khởi động container với tùy chọn --restart:

Giả sử bạn muốn chạy container từ image nginx và yêu cầu Docker luôn tự khởi động lại container nếu nó bị dừng:

docker run -d --restart always --name my_nginx nginx

Trong ví dụ này:

  • Docker sẽ chạy container trong chế độ nền (-d).
  • Tùy chọn --restart always đảm bảo container sẽ được tự động khởi động lại nếu bị dừng.

Kiểm tra trạng thái khởi động lại của container:

Sau khi khởi động container với tùy chọn --restart, bạn có thể kiểm tra cấu hình này bằng lệnh:

docker inspect <container_name_or_id>

Trong phần output JSON, bạn sẽ thấy một trường RestartPolicy mô tả cách container được cấu hình để tự khởi động lại.

Tóm tắt:

  • Bạn có thể điều khiển việc tự động khởi động lại container bằng cách sử dụng tùy chọn --restart.
  • Tùy chọn này giúp đảm bảo container tiếp tục chạy trong các môi trường sản xuất hoặc thử nghiệm khi gặp sự cố.

Bài viết liên quan:

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền
Hướng dẫn tạo Docker Container mã nguồn WordPress qua docker-file và docker compose
Lệnh docker-compose và chạy các dịch vụ docker
Khái niệm Network Bridge trong Docker và cách kết nối các container cùng phục vụ
Chia sẻ dữ liệu giữa máy chủ Host, các Container trong Docker
Lưu container thành image file, tạo container từ image cục bộ
Khái niệm container, image trong docker
Giới thiệu docker và hướng dẫn cài đặt docker

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

3. THIẾT KẾ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền

Mẫu prompt tạo mô tả chi tiết bối cảnh

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×