Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Lab 02: Khám Phá Các Công Cụ Dòng Lệnh Docker

    Lab 02: Khám Phá Các Công Cụ Dòng Lệnh Docker

    Mục Tiêu


    Lab này hướng dẫn bạn khám phá các công cụ dòng lệnh cơ bản của Docker, bao gồm việc kéo (pull), chạy (run), quản lý container, kiểm tra cấu hình, xử lý file và thư mục, mạng, và nhật ký (logs). Bạn sẽ thực hành trên môi trường cục bộ với registry tùy chỉnh từ GitLab.

    Yêu Cầu
    • Máy trạm với Docker đã cài đặt và đang chạy (phiên bản >= 1.13).
    • Tài khoản GitLab với quyền truy cập registry (sử dụng thông tin đăng nhập từ Job Aids nếu có).
    • Thư mục làm việc: ~/labs/lab02 (chứa thư mục app cho các bước sau).
    • Không sử dụng registry Docker mặc định; thay vào đó sử dụng registry.git.lab/cisco-devops/containers.
    Giới Thiệu

    Docker Registry


    Theo mặc định, Docker sử dụng https://registry-1.docker.io/ làm registry công cộng. Tuy nhiên, trong lab này, chúng ta sử dụng registry tùy chỉnh từ GitLab (registry.git.lab). Các lệnh sẽ bao gồm đầy đủ URL để tránh sử dụng registry mặc định. Không có cách nguyên bản để thay đổi đường dẫn tìm kiếm mặc định; trong thực tế, có thể sử dụng alias bash hoặc makefile để đơn giản hóa. Hiểu Các Lệnh Cấp Cao


    Từ Docker 1.13, cấu trúc lệnh được tổ chức lồng nhau để hỗ trợ nhiều tính năng hơn. Chúng ta sẽ sử dụng lệnh cấp cao (ví dụ: docker container ls thay vì docker ps) vì chúng là chiến lược dài hạn. Các lệnh truyền thống có thể bị ẩn bằng biến môi trường DOCKER_HIDE_LEGACY_COMMANDS.

    Dưới đây là bảng so sánh một số lệnh tương đương:
    docker images docker image list
    docker rmi docker image rm
    docker create docker container create
    docker ps docker container ls
    Phần 1: Đảm Bảo Docker Được Cài Đặt Và Đang Chạy
    1. Mở terminal trên máy trạm học viên và chuyển đến thư mục lab:
      text
      cd ~/labs/lab02
    2. Kiểm tra phiên bản Docker:
      text
      docker version
      Nếu Docker không chạy, lệnh sẽ thất bại. Khởi động Docker nếu cần (ví dụ: sudo systemctl start docker trên Linux).
    Phần 2: Đăng Nhập Vào GitLab Container Registry
    1. Đăng nhập:
      text
      docker login registry.git.lab
      Sử dụng thông tin đăng nhập từ Job Aids nếu được yêu cầu. Docker sẽ lưu credentials để không cần đăng nhập lại.
    2. Xem tệp credentials:
      text
      cat /home/student/.docker/config.json
    Phần 3: Kéo Và Chạy Container Hello-World
    1. Chạy container lần đầu (với tag latest):
      text
      docker run registry.git.lab/cisco-devops/containers/hello-world:latest
      Docker sẽ tải hình ảnh nếu chưa có cục bộ.
    2. Chạy lại mà không có tag (mặc định latest):
      text
      docker run registry.git.lab/cisco-devops/containers/hello-world
      Quan sát: Không tải lại vì hình ảnh đã tồn tại cục bộ.
    Phần 4: Xem Các Container Đã Tạo
    1. Xem tất cả container (bao gồm đã dừng):
      text
      docker container ls -a
      Xem xét các cột: CONTAINER ID, IMAGE, COMMAND, CREATED, STATUS, PORTS, NAMES. Tên container được tạo tự động (ví dụ: affectionate_margulis).
    2. Xem chỉ container đang chạy:
      text
      docker container ls
      (Không có gì nếu không có container đang chạy).
    Phần 5: Khám Phá Một Container Đang Chạy
    1. Kéo hình ảnh Alpine:
      text
      docker pull registry.git.lab/cisco-devops/containers/alpine
    2. Xem danh sách hình ảnh:
      text
      docker images
      Tag mặc định là latest nếu không chỉ định.
    3. Chạy container Alpine tương tác:
      text
      docker run -it registry.git.lab/cisco-devops/containers/alpine sh
      Trong shell container:
      text
      ls
      Thoát:
      text
      exit
    4. Chạy ở chế độ tách rời (detached) và đặt tên:
      text
      docker run -itd --name dev_alpine registry.git.lab/cisco-devops/containers/alpine sh
    5. Kiểm tra container đang chạy:
      text
      docker container ls
    6. Thực thi lệnh đơn lẻ trên container:
      text
      docker exec -it dev_alpine ls
    7. Kết nối shell container:
      text
      docker exec -it dev_alpine sh
      Thoát:
      text
      exit
    Phần 6: Dừng, Khởi Động Và Xóa Container
    1. Dừng container:
      text
      docker container stop dev_alpine
    2. Kiểm tra không còn chạy:
      text
      docker container ls
    3. Kiểm tra vẫn tồn tại:
      text
      docker container ls -a
    4. Khởi động lại:
      text
      docker container start dev_alpine
    5. Xác nhận hoạt động:
      text
      docker exec -it dev_alpine ls
    6. Dừng và xóa:
      text
      docker container stop dev_alpine
      docker container rm dev_alpine
    7. Xác nhận đã xóa:
      text
      docker container ls -a
    8. Xóa tất cả container đã dừng:
      text
      docker container prune
      Xác nhận bằng y.
    9. Tạo container mới và thử xóa khi đang chạy:
      text
      docker run -itd --name alpine_force_remove registry.git.lab/cisco-devops/containers/alpine
      docker container ls
      docker container rm alpine_force_remove # Thất bại vì đang chạy
      docker container rm -f alpine_force_remove # Buộc xóa
    Phần 7: Kiểm Tra Cấu Hình Container
    1. Tạo container để kiểm tra:
      text
      docker run -itd --name alpine_inspect registry.git.lab/cisco-devops/containers/alpine
    2. Kiểm tra toàn bộ cấu hình:
      text
      docker container inspect alpine_inspect
    3. Lọc và định dạng JSON (mạng):
      text
      docker container inspect --format='{{json .NetworkSettings }}' alpine_inspect
      docker container inspect --format='{{json .NetworkSettings }}' alpine_inspect | json_pp
    4. Lọc mạng lồng:
      text
      docker container inspect --format='{{json .NetworkSettings.Networks }}' alpine_inspect | json_pp
    5. Kiểm tra trạng thái:
      text
      docker container inspect --format='{{json .State }}' alpine_inspect | json_pp
    6. Dừng và kiểm tra lại trạng thái:
      text
      docker container stop alpine_inspect
      docker container inspect --format='{{json .State }}' alpine_inspect | json_pp
      Trạng thái: exited.
    Phần 8: Thêm Thư Mục Máy Chủ Vào Container
    1. Tạo container:
      text
      docker run -itd --name alpine_folder registry.git.lab/cisco-devops/containers/alpine
    2. Sao chép thư mục:
      text
      docker container cp app/ alpine_folder:/
    3. Xác nhận sao chép (không đồng bộ):
      text
      docker exec -it alpine_folder sh
      touch app/file1.txt
      ls app/
      exit
      ls app/ # Trên host, không thay đổi
    4. Tạo container với volume:
      text
      docker run -itd --name alpine_folder_volume -v ${PWD}/app:/app registry.git.lab/cisco-devops/containers/alpine
    5. Xác nhận đồng bộ volume:
      text
      docker exec -it alpine_folder_volume sh
      ls app/
      touch app/file1.txt
      exit
      ls app/ # Thay đổi trên host
    6. Tạo container với mount:
      text
      docker run -itd --name alpine_folder_mount --mount source=${PWD}/app,target=/app,type=bind registry.git.lab/cisco-devops/containers/alpine
    7. Xác nhận đồng bộ mount:
      text
      docker exec -it alpine_folder_mount sh
      ls app/
      touch app/file2.txt
      exit
      ls app/ # Thay đổi trên host
    Phần 9: Kiểm Tra Cấu Hình Mạng Container
    1. Tạo container:
      text
      docker run -itd --name alpine_net registry.git.lab/cisco-devops/containers/alpine
    2. So sánh gateway:
      text
      docker container inspect --format='{{json .NetworkSettings.Networks.bridge.Gateway }}' alpine_net
      docker exec -it alpine_net route
    3. So sánh IP:
      text
      docker container inspect --format='{{json .NetworkSettings.Networks.bridge.IPAddress }}' alpine_net
      docker exec -it alpine_net ip addr show
    4. Kiểm tra mạng chi tiết:
      text
      docker container inspect --format='{{json .NetworkSettings.Networks.bridge.NetworkID }}' alpine_net
      Sử dụng NetworkID để chạy:
      text
      docker network inspect <NetworkID>
    Phần 10: Kiểm Tra Nhật Ký Container
    1. Tạo container với vòng lặp tạo log:
      text
      docker run -itd --name alpine_log registry.git.lab/cisco-devops/containers/alpine sh -c "while true; do $(echo date); sleep 5; done"
    2. Xem log:
      text
      docker logs alpine_log
    3. Theo dõi log thời gian thực (10 dòng cuối):
      text
      docker logs -f --tail 10 alpine_log
    4. Xem trợ giúp:
      text
      docker logs --help
    Kết Thúc Lab


    Dừng và xóa tất cả container còn lại để dọn dẹp:

    text
    docker container stop $(docker container ls -q)
    docker container rm $(docker container ls -a -q)
    docker container prune -f
    Lab này đảm bảo tất cả lệnh có thể thực thi nếu môi trường được thiết lập đúng. Nếu gặp lỗi, kiểm tra Docker đang chạy và quyền truy cập registry.
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X