Containerd là một container runtime cấp cao hỗ trợ OCI Image Spec và OCI Runtime Spec (Open Container Initiative). Containerd được tạo ra với trọng tâm là sự đơn giản, mạnh mẽ và khả năng di động cho việc triển khai và vòng đời container. Nó được thiết kế để dễ dàng tích hợp vào hệ thống nền tảng như Docker và Kubernetes. Về cơ bản, phiên bản Docker mới sử dụng Containerd để quản lý vòng đời container. Và đối với Kubernetes, bạn có thể sử dụng Containerd làm container runtime của mình thông qua CRI để quản lý vòng đời container trên Kubernetes Cluster.
Hướng dẫn này sẽ hướng dẫn cách cài đặt Containerd Container Runtime trên máy chủ Ubuntu 22.04. Hướng dẫn này sẽ hướng dẫn hai phương pháp khác nhau để cài đặt Containerd, thủ công bằng cách tải xuống gói nhị phân hoặc cài đặt Containerd thông qua kho lưu trữ APT. Đến cuối hướng dẫn này, bạn sẽ có môi trường container cho quá trình phát triển của mình, bạn cũng có thể sử dụng môi trường này như một phần của quá trình cài đặt cụm Kubernetes.
Cả Containerd và tất cả các thành phần của nó đều có sẵn trên kho lưu trữ GitHub của nó và sẵn sàng để cài đặt.
Để cài đặt Containerd, hãy kiểm tra trang phát hành Containerd GitHub để có phiên bản mới nhất. Sau đó, sao chép liên kết và tải xuống gói nhị phân của Containerd bằng cách sử dụng "wget". Sau đó, giải nén tệp vào thư mục "/usr/local".
Tại thời điểm viết bài này, phiên bản mới nhất của Containerd là v1.6.8. Tải xuống bằng lệnh "wget" vào máy chủ Ubuntu của bạn và giải nén vào thư mục "/usr/local" thông qua lệnh "tar".
Runc là một công cụ dòng lệnh được sử dụng để tạo các container trên hệ thống Linux theo thông số kỹ thuật OCI (Open Container Initiative). Để cài đặt runc, bạn sẽ cần truy cập trang phát hành runc GitHub chính thức và tải phiên bản runc mới nhất và tải xuống bằng lệnh wget.
Tại thời điểm viết bài này, phiên bản runc mới nhất là v1.1.3. Tải xuống bằng lệnh wget và cài đặt như bên dưới.
Bây giờ hãy kiểm tra tệp nhị phân runc bằng lệnh bên dưới. Bạn sẽ thấy tệp nhị phân runc có sẵn trong thư mục "/usr/local/sbin".
Bây giờ bạn sẽ cần cài đặt plugin CNI (Giao diện mạng container) cho Containerd Container Runtime. Plugin CNI cung cấp chức năng kết nối mạng cho Container trên hệ thống Linux.
Trước khi tải xuống plugin CNI, hãy nhớ truy cập trang phát hành GitHub chính thức để tải xuống phiên bản mới nhất của plugin CNI.
Tại thời điểm viết bài này, phiên bản mới nhất của plugin CNI là v1.1.1. Tải xuống bằng lệnh wget như bên dưới.
Tiếp theo, tạo một thư mục mới "/opt/cni/bin" sẽ được sử dụng làm thư mục cài đặt đích của plugin CNI. Sau đó, giải nén plugin CNI vào đó thông qua lệnh tar.
Sau khi bạn đã cài đặt cả ba thành phần Containerd Container Runtime, bạn sẽ bắt đầu cấu hình Containerd.
Chạy lệnh sau để tạo một thư mục mới "/etc/containerd". Sau đó, tạo cấu hình Containerd mặc định bằng lệnh "containerd" như bên dưới.
Bây giờ hãy chạy lệnh sau để kích hoạt "SystemdCgroup" cho thời gian chạy vùng chứa Containerd. Lệnh này sẽ thay thế tùy chọn "SystemdCgroup = false" thành "SystemdCgroup = true" trên tệp cấu hình Containerd "/etc/containerd/config.toml.
Bây giờ hãy chạy lệnh sau để tải tệp dịch vụ systemd cho Containerd xuống thư mục "/etc/systemd/system".
Sau đó, tải lại trình quản lý systemd để áp dụng tệp dịch vụ mới.
Cuối cùng, hãy khởi động và kích hoạt dịch vụ "containerd" bằng lệnh systemctl sau. Nếu quá trình cài đặt của bạn thành công, bạn sẽ thấy không có thông báo lỗi nào được tìm thấy trong quá trình dịch vụ "containerd" bắt đầu quá trình.
Kiểm tra và xác minh dịch vụ 'containerd" bằng lệnh dưới đây. Bạn sẽ thấy dịch vụ 'containerd" hiện đang ở trạng thái "đang chạy" và được bật", nghĩa là sẽ tự động chạy khi khởi động hệ thống.
Trước tiên, hãy chạy lệnh sau để cài đặt một số gói phụ thuộc. Khi được nhắc xác nhận cài đặt, hãy nhập Y và nhấn ENTER.
Tiếp theo, hãy chạy lệnh sau để tạo thư mục mới và tải xuống khóa GPG cho kho lưu trữ Docker.
Thêm kho lưu trữ Docker vào hệ thống của bạn bằng lệnh bên dưới.
Bây giờ hãy chạy lệnh apt sau để cập nhật và làm mới chỉ mục gói cho hệ thống Ubuntu của bạn. Sau đó, cài đặt gói "containerd.io" làm Containerd Container Runtime. Quá trình cài đặt sẽ tự động bắt đầu.
Sau khi quá trình cài đặt hoàn tất, hãy khởi động và kích hoạt dịch vụ "containerd" bằng lệnh systemctl bên dưới.
Sau đó, hãy kiểm tra và xác minh dịch vụ "containerd" bằng lệnh sau. Bạn sẽ thấy dịch vụ "containerd" đang hoạt động và chạy.
Tiếp theo, bạn sẽ tạo tệp cấu hình mới cho Containerd Container Runtime.
Chạy lệnh sau để lưu trữ cấu hình mặc định do kho lưu trữ Docker cung cấp. Sau đó, tạo một tệp cấu hình mới bằng lệnh "containerd" như bên dưới.
Bây giờ hãy chạy lệnh bên dưới để kích hoạt "SystemdCgroup" cho Containerd.
Tiếp theo, bạn cũng sẽ cần cài đặt plugin CNI (Giao diện mạng container) để cài đặt Containerd thông qua kho lưu trữ APT Docker.
Chạy lệnh wget bên dưới để tải xuống plugin CNI.
Bây giờ hãy tạo một thư mục mới "/opt/cni/bin" bằng lệnh bên dưới. Sau đó, giải nén plugin CNI thông qua lệnh tar như bên dưới.
Cuối cùng, chạy lệnh bên dưới để khởi động lại dịch vụ Containerd và áp dụng các thay đổi mới.
Lúc này, thời gian chạy container Containerd hiện đang chạy với plugin CNI và SystemdCgroup.
Dòng lệnh nrdctl cũng hỗ trợ Docker Compose qua lệnh "nerdctl compose", cũng hỗ trợ chế độ container rootless, lazy-pulling image qua OverlayBD và Stargz, hỗ trợ các image được mã hóa và phân phối image P2P qua IPFS.
Chạy lệnh sau để tải xuống tệp nhị phân "nerctl". Sau đó, giải nén nó thông qua lệnh tar vào thư mục "/usr/local/bin".
Bây giờ hãy kiểm tra tệp nhị phân nerdctl bằng lệnh sau.
Tiếp theo, bạn sẽ tìm hiểu cách chạy một container với thời gian chạy container Containerd thông qua lệnh "nerdctl". Công cụ dòng lệnh "nerdctl" tương thích với Docker, do đó lệnh quản lý container tương tự như lệnh Docker.
Chạy container mới có tên "nginx" bằng lệnh "nerdctl" bên dưới. Container "nginx" sẽ chạy trên cổng '80' cho cả container và máy chủ, và nó dựa trên hình ảnh "nginx:alpine".
Bây giờ hãy kiểm tra container hiện đang chạy trên hệ thống của bạn bằng lệnh "nerdctl" bên dưới. Và bạn sẽ thấy container "nginx" đang chạy.
Tiếp theo, hãy kiểm tra và xác minh danh sách các hình ảnh container khả dụng trên hệ thống của bạn bằng lệnh bên dưới. Bạn sẽ thấy hình ảnh "nginx:alpine" đã được tải xuống.
Cuối cùng, hãy chạy lệnh curl bên dưới để kiểm tra container "nginx". Và bạn sẽ thấy trang index.html mặc định của container "nginx".
Ngoài ra, bạn cũng có thể kiểm tra và xác minh nhật ký của container "nginx" bằng lệnh "nerdctl" sau.
Cuối cùng, bạn đã học được cách cài đặt công cụ dòng lệnh nerdctl và cách sử dụng cơ bản của nerdctl để quản lý các container đang chạy trong môi trường Containerd container runtime. Bây giờ bạn cũng có thể thiết lập cụm Kubernetes bằng cách sử dụng thời gian chạy container Containerd.
Hướng dẫn này sẽ hướng dẫn cách cài đặt Containerd Container Runtime trên máy chủ Ubuntu 22.04. Hướng dẫn này sẽ hướng dẫn hai phương pháp khác nhau để cài đặt Containerd, thủ công bằng cách tải xuống gói nhị phân hoặc cài đặt Containerd thông qua kho lưu trữ APT. Đến cuối hướng dẫn này, bạn sẽ có môi trường container cho quá trình phát triển của mình, bạn cũng có thể sử dụng môi trường này như một phần của quá trình cài đặt cụm Kubernetes.
Điều kiện tiên quyết
Để làm theo hướng dẫn này, bạn sẽ cần các yêu cầu sau:- Một máy chủ Ubuntu 22.04 - Ví dụ này sẽ sử dụng máy chủ có tên máy chủ là "server-ubuntu".
- Một người dùng không phải root có quyền quản trị root/sudo.
Cài đặt Containerd theo cách thủ công
Trong bước đầu tiên, bạn sẽ học cách cài đặt Containerd Container Runtime theo cách thủ công thông qua gói nhị phân. Điều này có nghĩa là bạn cũng sẽ cần cài đặt một số thành phần cho chính Containerd, bao gồm cả runc và plugin CNI (Container Network Interface).Cả Containerd và tất cả các thành phần của nó đều có sẵn trên kho lưu trữ GitHub của nó và sẵn sàng để cài đặt.
Để cài đặt Containerd, hãy kiểm tra trang phát hành Containerd GitHub để có phiên bản mới nhất. Sau đó, sao chép liên kết và tải xuống gói nhị phân của Containerd bằng cách sử dụng "wget". Sau đó, giải nén tệp vào thư mục "/usr/local".
Tại thời điểm viết bài này, phiên bản mới nhất của Containerd là v1.6.8. Tải xuống bằng lệnh "wget" vào máy chủ Ubuntu của bạn và giải nén vào thư mục "/usr/local" thông qua lệnh "tar".
Mã:
wget https://github.com/containerd/containerd/releases/download/v1.6.8/containerd-1.6.8-linux-amd64.tar.gz
tar Cxzvf /usr/local containerd-1.6.8-linux-amd64.tar.gz
Runc là một công cụ dòng lệnh được sử dụng để tạo các container trên hệ thống Linux theo thông số kỹ thuật OCI (Open Container Initiative). Để cài đặt runc, bạn sẽ cần truy cập trang phát hành runc GitHub chính thức và tải phiên bản runc mới nhất và tải xuống bằng lệnh wget.
Tại thời điểm viết bài này, phiên bản runc mới nhất là v1.1.3. Tải xuống bằng lệnh wget và cài đặt như bên dưới.
Mã:
wget https://github.com/opencontainers/runc/releases/download/v1.1.3/runc.amd64
sudo install -m 755 runc.amd64 /usr/local/sbin/runc
Mã:
which runc
Bây giờ bạn sẽ cần cài đặt plugin CNI (Giao diện mạng container) cho Containerd Container Runtime. Plugin CNI cung cấp chức năng kết nối mạng cho Container trên hệ thống Linux.
Trước khi tải xuống plugin CNI, hãy nhớ truy cập trang phát hành GitHub chính thức để tải xuống phiên bản mới nhất của plugin CNI.
Tại thời điểm viết bài này, phiên bản mới nhất của plugin CNI là v1.1.1. Tải xuống bằng lệnh wget như bên dưới.
Mã:
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
Mã:
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz
Sau khi bạn đã cài đặt cả ba thành phần Containerd Container Runtime, bạn sẽ bắt đầu cấu hình Containerd.
Chạy lệnh sau để tạo một thư mục mới "/etc/containerd". Sau đó, tạo cấu hình Containerd mặc định bằng lệnh "containerd" như bên dưới.
Mã:
sudo mkdir -p /etc/containerd/
containerd config default | sudo tee /etc/containerd/config.toml
Bây giờ hãy chạy lệnh sau để kích hoạt "SystemdCgroup" cho thời gian chạy vùng chứa Containerd. Lệnh này sẽ thay thế tùy chọn "SystemdCgroup = false" thành "SystemdCgroup = true" trên tệp cấu hình Containerd "/etc/containerd/config.toml.
Mã:
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
Mã:
sudo curl -L https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -o /etc/systemd/system/containerd.service
Mã:
sudo systemctl daemon-reload
Mã:
sudo systemctl start containerd
sudo systemctl enable containerd
Kiểm tra và xác minh dịch vụ 'containerd" bằng lệnh dưới đây. Bạn sẽ thấy dịch vụ 'containerd" hiện đang ở trạng thái "đang chạy" và được bật", nghĩa là sẽ tự động chạy khi khởi động hệ thống.
Mã:
sudo systemctl status containerd
Cài đặt Containerd qua APT Docker Repository
Bây giờ bạn sẽ tìm hiểu cách cài đặt Containerd Container Runtime qua kho lưu trữ APT Docker.Trước tiên, hãy chạy lệnh sau để cài đặt một số gói phụ thuộc. Khi được nhắc xác nhận cài đặt, hãy nhập Y và nhấn ENTER.
Mã:
sudo apt install \
ca-certificates \
curl \
gnupg \
lsb-release
Mã:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Mã:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Mã:
sudo apt update
sudo apt install containerd.io
Mã:
sudo systemctl start containerd
sudo systemctl enable containerd
Mã:
sudo systemctl status containerd
Tiếp theo, bạn sẽ tạo tệp cấu hình mới cho Containerd Container Runtime.
Chạy lệnh sau để lưu trữ cấu hình mặc định do kho lưu trữ Docker cung cấp. Sau đó, tạo một tệp cấu hình mới bằng lệnh "containerd" như bên dưới.
Mã:
sudo mv etc/containerd/config.toml etc/containerd/config.toml.orig
containerd config default | sudo tee /etc/containerd/config.toml
Mã:
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
Chạy lệnh wget bên dưới để tải xuống plugin CNI.
Mã:
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
Mã:
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz
Mã:
sudo systemctl restart containerd
Giao tiếp với Containerd qua nerdctl
ContainNERD CTL là một công cụ dòng lệnh để quản lý các container cho thời gian chạy container Containerd. Nó tương thích với Docker CLI cho Docker và có cùng UI/UX như lệnh "docker".Dòng lệnh nrdctl cũng hỗ trợ Docker Compose qua lệnh "nerdctl compose", cũng hỗ trợ chế độ container rootless, lazy-pulling image qua OverlayBD và Stargz, hỗ trợ các image được mã hóa và phân phối image P2P qua IPFS.
Chạy lệnh sau để tải xuống tệp nhị phân "nerctl". Sau đó, giải nén nó thông qua lệnh tar vào thư mục "/usr/local/bin".
Mã:
wget https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-0.22.2-linux-amd64.tar.gz
sudo tar Cxzvf /usr/local/bin nerdctl-0.22.2-linux-amd64.tar.gz
Mã:
which nerdctl
Tiếp theo, bạn sẽ tìm hiểu cách chạy một container với thời gian chạy container Containerd thông qua lệnh "nerdctl". Công cụ dòng lệnh "nerdctl" tương thích với Docker, do đó lệnh quản lý container tương tự như lệnh Docker.
Chạy container mới có tên "nginx" bằng lệnh "nerdctl" bên dưới. Container "nginx" sẽ chạy trên cổng '80' cho cả container và máy chủ, và nó dựa trên hình ảnh "nginx:alpine".
Mã:
sudo nerdctl run -d --name nginx -p 80:80 nginx:alpine
Bây giờ hãy kiểm tra container hiện đang chạy trên hệ thống của bạn bằng lệnh "nerdctl" bên dưới. Và bạn sẽ thấy container "nginx" đang chạy.
Mã:
sudo nerdctl ps
Tiếp theo, hãy kiểm tra và xác minh danh sách các hình ảnh container khả dụng trên hệ thống của bạn bằng lệnh bên dưới. Bạn sẽ thấy hình ảnh "nginx:alpine" đã được tải xuống.
Mã:
sudo nerdctl images
Cuối cùng, hãy chạy lệnh curl bên dưới để kiểm tra container "nginx". Và bạn sẽ thấy trang index.html mặc định của container "nginx".
Mã:
curl localhost
Ngoài ra, bạn cũng có thể kiểm tra và xác minh nhật ký của container "nginx" bằng lệnh "nerdctl" sau.
Mã:
sudo nerdctl logs nginx
Kết luận
Trong suốt hướng dẫn này, bạn đã học được hai phương pháp để cài đặt Containerd container runtime. Bạn đã học cách cài đặt Containerd theo cách thủ công bằng cách tải xuống gói nhị phân Container và cài đặt Containerd thông qua kho lưu trữ APT Docker.Cuối cùng, bạn đã học được cách cài đặt công cụ dòng lệnh nerdctl và cách sử dụng cơ bản của nerdctl để quản lý các container đang chạy trong môi trường Containerd container runtime. Bây giờ bạn cũng có thể thiết lập cụm Kubernetes bằng cách sử dụng thời gian chạy container Containerd.