Hướng Dẫn Lab: Đóng Gói Và Chạy Một Container WebApp Sử Dụng Docker Và GitLab
Giới Thiệu
Lab này hướng dẫn bạn qua quy trình tạo, xây dựng và triển khai một ứng dụng web quản lý kho mạng (Network Inventory) dưới dạng container Docker. Ứng dụng được viết bằng Python với framework Flask, và chúng ta sẽ sử dụng GitLab làm kho lưu trữ mã nguồn và registry cho container. Lab tập trung vào việc tạo Dockerfile, xây dựng image, chạy container, và đẩy image lên GitLab Container Registry.
Mục tiêu của lab là giúp bạn làm quen với Docker, GitLab, và quy trình CI/CD cơ bản cho ứng dụng container hóa. Mục Tiêu
Sau khi hoàn thành lab này, bạn sẽ có thể:
Phần Cứng
Phần 1: Tạo Dockerfile
Bạn sẽ sử dụng Visual Studio Code để chỉnh sửa tệp và terminal tích hợp để chạy lệnh.
FROM registry.git.lab/cisco-devops/containers/python37:latest
LABEL description="Đây là ứng dụng flask quản lý kho mạng"
LABEL maintainer="Cisco <noreply@cisco.com>"
LABEL version="0.1"
ADD ./ /net_inventory
WORKDIR /net_inventory/
RUN apt install -y git vim
RUN pip install -r ./requirements.txt
ENV ENV=DEVELOPMENT
EXPOSE 5000/tcp
ENTRYPOINT python run.py
Lưu tệp (Ctrl+S). Phần 6: Xây Dựng Image Từ Dockerfile
Bạn đã hoàn thành việc xây dựng một container từ Dockerfile, chạy ứng dụng cục bộ, và đẩy lên registry. Lab này minh họa quy trình container hóa ứng dụng web, giúp bạn sẵn sàng cho các dự án DevOps lớn hơn. Nếu gặp vấn đề, kiểm tra log Docker bằng docker logs <container_name>.
Giới Thiệu
Lab này hướng dẫn bạn qua quy trình tạo, xây dựng và triển khai một ứng dụng web quản lý kho mạng (Network Inventory) dưới dạng container Docker. Ứng dụng được viết bằng Python với framework Flask, và chúng ta sẽ sử dụng GitLab làm kho lưu trữ mã nguồn và registry cho container. Lab tập trung vào việc tạo Dockerfile, xây dựng image, chạy container, và đẩy image lên GitLab Container Registry.
Mục tiêu của lab là giúp bạn làm quen với Docker, GitLab, và quy trình CI/CD cơ bản cho ứng dụng container hóa. Mục Tiêu
Sau khi hoàn thành lab này, bạn sẽ có thể:
- Tạo và chỉnh sửa Dockerfile để xây dựng image container.
- Xây dựng và chạy container từ Dockerfile.
- Đẩy image lên GitLab Container Registry.
- Chạy ứng dụng từ registry và xác minh hoạt động.
Phần Cứng
- Máy tính với ít nhất 4GB RAM và 20GB dung lượng ổ đĩa trống.
- Kết nối internet ổn định.
- Hệ điều hành: Ubuntu 18.04 hoặc tương đương (hoặc sử dụng máy ảo).
- Docker: Phiên bản 18.09.7 hoặc mới hơn (cài đặt qua sudo apt install docker.io).
- Git: Đã cài đặt (cài đặt qua sudo apt install git).
- Visual Studio Code: Đã cài đặt (tải từ trang chính thức hoặc qua snap/flatpak).
- Trình duyệt web: Google Chrome hoặc tương đương.
- Tài khoản GitLab: Sử dụng thông tin đăng nhập được cung cấp (trong lab giả định là từ Job Aids, bạn có thể tạo tài khoản miễn phí trên gitlab.com nếu cần).
- Cài đặt Docker và kiểm tra: docker --version.
- Tạo thư mục lab: mkdir -p ~/labs/lab03.
- Đảm bảo bạn có quyền truy cập vào GitLab instance (trong lab này là https://git.lab, thay thế bằng URL GitLab của bạn nếu khác).
Phần 1: Tạo Dockerfile
Bạn sẽ sử dụng Visual Studio Code để chỉnh sửa tệp và terminal tích hợp để chạy lệnh.
- Mở Visual Studio Code bằng cách nhấp vào biểu tượng trên desktop hoặc chạy code từ terminal.
- Từ thanh menu: Terminal > New Terminal (hoặc Ctrl+Shift+`).
- Trong terminal, thay đổi thư mục: cd ~/labs/lab03.
- Kiểm tra Docker: docker version. Đảm bảo phiên bản là 18.09.7 hoặc tương đương.
- Đăng nhập: docker login registry.git.lab (thay registry.git.lab bằng registry URL của bạn). Sử dụng username và password từ Job Aids.
- Mở Chrome, truy cập https://git.lab.
- Đăng nhập với thông tin từ Job Aids.
- Chọn dự án cisco-devops/net_inventory.
- Xem cấu trúc mã nguồn.
- Trong terminal VS Code: git clone https://git.lab/cisco-devops/net_inventory.
- Chuyển thư mục: cd net_inventory.
- Kiểm tra tệp: ls.
- Từ menu: File > Open Folder (Ctrl+K Ctrl+O).
- Chọn ~/labs/lab03/net_inventory và OK.
- Trong Explorer pane, hover qua thư mục NET_INVENTORY và tạo tệp mới: Dockerfile.
- Chỉnh sửa nội dung Dockerfile như sau (sao chép và dán vào tệp):
FROM registry.git.lab/cisco-devops/containers/python37:latest
LABEL description="Đây là ứng dụng flask quản lý kho mạng"
LABEL maintainer="Cisco <noreply@cisco.com>"
LABEL version="0.1"
ADD ./ /net_inventory
WORKDIR /net_inventory/
RUN apt install -y git vim
RUN pip install -r ./requirements.txt
ENV ENV=DEVELOPMENT
EXPOSE 5000/tcp
ENTRYPOINT python run.py
Lưu tệp (Ctrl+S). Phần 6: Xây Dựng Image Từ Dockerfile
- Trong terminal: docker build -t dev-net-inv-image ..
- Chạy container: docker run -itd -p 5000:5000 --name dev-net-inv dev-net-inv-image.
- Kiểm tra: docker container ls.
- Điền dữ liệu: Chạy script populate_inventory (giả định script có sẵn trong thư mục; nếu không, tạo script đơn giản để điền dữ liệu qua API).
- Mở Chrome: http://127.0.0.1:5000 để xem front-end.
- Xem API: http://127.0.0.1:5000/api/docs.
- Thử POST method trong OpenAPI (không chỉnh JSON lần đầu).
- Gắn thẻ lại: docker tag dev-net-inv-image registry.git.lab/cisco-devops/containers/net_inventory:latest.
- Đẩy: docker push registry.git.lab/cisco-devops/containers/net_inventory:latest.
- Xem trong GitLab: Truy cập dự án cisco-devops/containers, chọn Packages > Container Registry.
- Dừng container cũ: docker stop dev-net-inv.
- Chạy từ registry: docker run -itd -p 5000:5000 --name net-inv-reg registry.git.lab/cisco-devops/containers/net_inventory.
- Kiểm tra: docker container ls.
- Xem ứng dụng: http://127.0.0.1:5000.
- Nếu gặp lỗi quyền: Sử dụng sudo với Docker commands.
- Dữ liệu trong container là tạm thời; sử dụng volume để lưu trữ lâu dài nếu cần.
- Thay thế git.lab và registry.git.lab bằng URL thực tế của GitLab instance.
- Nếu script populate_inventory không có, bạn có thể tạo một script Python đơn giản để gửi POST request đến API.
Bạn đã hoàn thành việc xây dựng một container từ Dockerfile, chạy ứng dụng cục bộ, và đẩy lên registry. Lab này minh họa quy trình container hóa ứng dụng web, giúp bạn sẵn sàng cho các dự án DevOps lớn hơn. Nếu gặp vấn đề, kiểm tra log Docker bằng docker logs <container_name>.