- Buildah: dùng để build image theo chuẩn OCI
- Podman: quản lý container trong pod.
Tìm hiểu về OCI, Docker, Buildah, và Podman
Open Container Initiative (OCI)
Cùng năm đó, một sáng kiến có tên Open Container Project (OCP) đã ra đời và sau đó đổi tên thành Open Container Initiative (OCI). Được vận hành dưới sự bảo trợ của Quỹ Linux, mục đích của OCI là phát triển các tiêu chuẩn "ngành" cho định dạng container và phần mềm container runtime cho tất cả các nền tảng. Tiêu chuẩn đầu tiên của các OCP là công nghệ Docker và Docker đã quyên góp khoảng 5% codebase để đưa dự án đi vào hoạt động.
Docker daemon
Daemon là một loại chương trình trên các hệ điều hành Like-Unix hoạt động ẩn trong background không cần sự kiểm soát bởi user. Daemon sẽ được kích hoạt bởi một sự kiện hoặc điều kiện nào đó xảy ra cụ thể.
Một daemon khi chạy nền (background) liên tục sẽ phục vụ cho việc trả lời các yêu cầu cho các dịch vụ.
Thuật ngữ bắt nguồn từ Unix, nhưng hầu hết các hệ điều hành đều sử dụng tiến trình background dưới dạng này hay dạng khác. Trong Unix, tên của daemon thường kết thúc bằng “d“. Một số ví dụ bao gồm inetd, httpd, nfsd, sshd, có tên và lpd.
Docker Daemon (còn gọi là Docker Engine) là một lightweight runtime giúp build, run và quản lí các containers và các thành phần liên quan. Docker Daemon: chạy ở trên host, đóng vai trò server, nhận các RESTful requests từ Docker Client và thực thi
Buildah
Podman
Podman là một công cụ quản lý container tuân thủ OCI cung cấp các tính năng tương tự như Docker để quản lý container.
Một trong những tính năng tốt nhất của podman là khả năng chạy các container không cần quyền root. Contrainer không quyền root là một khái niệm về việc chạy và quản lý các container mà không có đặc quyền root (Người dùng bình thường). Từ quan điểm bảo mật, container rootless thêm một lớp bảo mật bổ sung bằng cách không cho phép truy cập root ngay cả khi vùng chứa bị kẻ tấn công xâm phạm.
Tham khảo thêm: https://blog.aquasec.com/rootless-containers-boosting-container-security
Giả sử có hai người dùng trong Linux. user-a và user-b. Người dùng-b không thể sửa đổi vùng chứa do user-a sử dụng podman và ngược lại.
Một tính năng thú vị của podman là chạy các container trong Pod.
Tương tự như các Kubernetes pod, bạn có thể tạo các nhóm nhiều container pod bằng cách sử dụng Podman. Bạn có thể xuất podman pod dưới dạng Kubernetes manifest và sử dụng Kubernetes manifest để triển khai
Cài đặt và sử dụng Buildah
$ sudo apt-get -y update
$ sudo apt-get -y install buildah
Liệt kê các images
buildah images
Liệt kê containers
buildah containers
Build image
buildah build -f Dockerfile -t <image-name> .
Tham khảo thêm: https://github.com/containers/buildah/blob/main/docs/tutorials/01-intro.mdQuản lý container với Podman
Cài đặt Podman$ source /etc/os-release
$ sudo sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
$ wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key -O- | sudo apt-key add -
$ sudo apt-get update -qq
$ sudo apt-get -qq --yes install podman
Kiểm tra Podman version
$ podman info
Tạo và sử dụng container
# podman run --rm -p <mapping-port>:<port> <image-name>
Kiểm tra container đang chạy
# curl localhost:<port>
sudo nano /etc/containers/registries.conf
Tạo và quản lý Pod
podman pod create --name <pod-name>
#list pods
podman pod ls
#list all pods. For empty pod, there will be a k8s.gcr.io/pause container added to it.
podman ps -a --pod
Thêm container vào Pod
podman run -dt --pod <pod-name> <container-name>
Start, stop, và remove container trong Pod
podman start <container-id>
podman stop <container-id>
podman rm <container-id>
Tạo mới pod với container
podman run -dt --pod new:<pod-name> -p 8080:80 <container-name>
Start, Stop, và Delete pod
podman pod stop <podname>
podman pod start <podname>
Tạo file Kubernetes YAMLs từ Podman
podman run -dt --pod new:<pod-name> -p 8080:80 <container-name>
podman generate kube <pod-name>
Hoặc xuất ra file *.yaml
podman generate kube <pod-name> >> <file-name>.yaml
Tạo pod và container từ file yaml
podman pod rm -f <pod-name>
podman play kube <file-name>.yaml>
Remove pod và container
podman play kube --down <file-name>.yaml>
Ví dụ
Trong bài trước, chúng ta có làm ví dụ về Angular, và build image dựa trên Nginx.
https://nhatkyhoctap.blogspot.com/2022/09/docker-kham-pha-qua-trinh-build-1-image_14.html
Chúng ta sẽ build lại image bằng Buildah và run container bằng Podman$ buildah bud -t angular-demo .
Trong quá trình build, Buildah sẽ hỏi bạn dùng base image từ Docker Hubs hay Quay.io. Bạn chọn Docker Hubs nhé.
Kiểm tra lại images:
$ buildah images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/angular-demo latest f3281a6c65a7 13 seconds ago 25.3 MB
docker.io/library/node 18-alpine3.15 ec9347a9b50f 9 days ago 171 MB
docker.io/library/nginx 1.23.1-alpine 804f9cebfdc5 5 weeks ago 25.1 MB
So với image được build bằng Docker (23.8Mb), rõ ràng là Docker làm tốt hơn Buildah.
Ngoài ra, bạn có thể kiểm tra bằng Podman với câu lệnh tương tự
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/angular-demo latest f3281a6c65a7 About a minute ago 25.3 MB
docker.io/library/node 18-alpine3.15 ec9347a9b50f 9 days ago 171 MB
docker.io/library/nginx 1.23.1-alpine 804f9cebfdc5 5 weeks ago 25.1 MB
Sử dụng Container:
$ podman run -dt --name angular-demo -p 2016:80 localhost/angular-demo
Stop Container:
$ podman stop angular-demo
Stop all containers:
$ podman stop -l
Remove all containers:
$ podman rm -l
Further information
Tham khảo
https://devopsz.com/docker-101-part-3
https://cuongquach.com/daemon-trong-linux-la-gi.html
https://viblo.asia/p/tim-hieu-chi-tiet-ve-docker-swarm-phan-1-eW65GW795DO
https://devopscube.com/podman-tutorial-beginners/
https://stackoverflow.com/questions/67477821/unable-to-locate-package-buildah
Trả lờiXóasudo apt-get update -qq
Trả lờiXóasudo apt-get install -qq -y software-properties-common
sudo add-apt-repository -y ppa:projectatomic/ppa
sudo apt-get update -qq
sudo apt-get -qq -y install buildah
https://mkdev.me/posts/dockerless-part-1-which-tools-to-replace-docker-with-and-why
Trả lờiXóa