Chuyển đến nội dung chính

Thay thế Docker bằng Buildah và Podman

Trong bài viết này, mình tập hợp lại các thông tin về OCI, Docker Daemon, Buildah và Podman. Hi vọng đó là thông tin hữu ích để mình tiếp tục con đường học tập Kubernetes.
Nếu nói về container, các bạn sẽ nghe nhiều về Docker. Nhưng từ version 1.24 thì Kubernetes đã quyết định loại Docker ra khỏi hệ sinh thái.
Vậy Docker dùng để build và run container. Vậy nếu loại bỏ Docker, chúng ta có nhiều giải pháp, 1 trong các giải pháp đó là
  • 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)

Trở lại năm 2015, một công ty có tên CoreOS đã đưa thông số kỹ thuật riêng cho App Container Image (ACI), khác hoàn toàn với đặc điểm kỹ thuật container của Docker. Cũng tại thời điểm đó, xuất hiện phong trào container mới tách rời với các định dạng container cạnh tranh của Linux.

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

Buildah (được đặt tên cho vui vì giọng Boston của Dan Walsh khi phát âm "Builder")
Buildah là một công cụ dòng lệnh để tạo Open Container Initiatives (OCI) hoặc Docker image
Buildah hoạt động trên một số bản phân phối Linux, nhưng không được hỗ trợ trên nền tảng Windows hoặc Mac tại thời điểm này. Buildah chủ yếu chuyên về xây dựng hình ảnh OCI trong khi Podman cung cấp một tập hợp các lệnh và chức năng rộng hơn giúp bạn duy trì, sửa đổi và chạy các hình ảnh và vùng chứa OCI.

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

Mở BashShell, gõ:
$ 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.md

Quả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>
Mặc định, Podman được thiết lập sử dụng 2 container registry:docker.io với quay.io
Để thay đổi container registry cho Podman:
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://developers.redhat.com/blog/2019/02/21/podman-and-buildah-for-docker-users#how_does_docker_work_

Nhận xét

  1. https://stackoverflow.com/questions/67477821/unable-to-locate-package-buildah

    Trả lờiXóa
  2. sudo apt-get update -qq
    sudo 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

    Trả lờiXóa
  3. https://mkdev.me/posts/dockerless-part-1-which-tools-to-replace-docker-with-and-why

    Trả lờiXóa

Đăng nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.