Một trong những thách thức mà các nhà phát triển phải đối mặt trong quá khứ là làm cho các ứng dụng chạy một cách đáng tin cậy trên nhiều môi trường máy tính. Thông thường, các ứng dụng không chạy như mong đợi hoặc gặp lỗi và hoàn toàn không thành công. Và đó là nơi xuất hiện khái niệm containers được sinh ra.

Hình ảnh vùng chứa là gì?

Container hình ảnh là các tệp tĩnh gửi kèm theo mã thực thi chạy trong một môi trường cô lập. Hình ảnh vùng chứa bao gồm các thư viện hệ thống, phần phụ thuộc và các cài đặt nền tảng khác mà ứng dụng cần để chạy trong các môi trường đa dạng.

Red Hat Linux cung cấp một bộ công cụ vùng chứa hữu ích mà bạn có thể tận dụng để làm việc trực tiếp với vùng chứa Linux bằng cách sử dụng các lệnh docker yêu cầu. Bao gồm các:

  • Podman – Đây là một công cụ chứa ít daemon hơn để chạy và quản lý OCI vùng chứa ở chế độ root hoặc rootless. Podman tương tự như Docker và có các tùy chọn lệnh giống nhau ngoại trừ Docker là một daemon. Bạn có thể kéo, chạy và quản lý hình ảnh vùng chứa bằng cách sử dụng podman theo cách giống như cách bạn làm với Docker. Podman đi kèm với rất nhiều tính năng tiên tiến, tích hợp đầy đủ với systems, và cung cấp hỗ trợ Không gian tên người dùng bao gồm các vùng chứa đang chạy mà không cần người dùng root.
  • Skopeo: Đây là một công cụ dòng lệnh được sử dụng để sao chép hình ảnh vùng chứa từ sổ đăng ký này sang sổ đăng ký khác. Bạn có thể dùng Skopeo để sao chép hình ảnh đến và từ một máy chủ lưu trữ cụ thể cũng như sao chép hình ảnh vào một môi trường hoặc sổ đăng ký vùng chứa khác. Ngoài việc sao chép hình ảnh, bạn có thể sử dụng nó để kiểm tra hình ảnh từ các cơ quan đăng ký khác nhau và sử dụng chữ ký để tạo và xác minh hình ảnh.
  • Buildah: Đây là một bộ công cụ dòng lệnh được sử dụng để tạo và quản lý vùng chứa OCI sử dụng hình ảnh DockerS.

Trong bài viết này, chúng tôi sẽ tập trung vào Quản lý vùng chứa bằng cách sử dụng podmanSkopeo.

Tìm kiếm hình ảnh vùng chứa từ sổ đăng ký từ xa

Các podman search cho phép bạn tìm kiếm các sổ đăng ký từ xa đã chọn cho hình ảnh vùng chứa. Danh sách đăng ký mặc định được xác định trong registries.conf nằm ở /etc/containers/.

Sổ đăng ký được xác định bởi 3 phần.

  • [registries.search] – Phần này chỉ định các đăng ký mặc định podman có thể tìm kiếm hình ảnh vùng chứa. Nó tìm kiếm hình ảnh được yêu cầu trong registry.access.redhat.com, registry.redhat.io,docker.io cơ quan đăng ký.
Cơ quan đăng ký mặc định
  • [registries.insecure]– Phần này chỉ định các đăng ký không thực hiện mã hóa TLS tức là các đăng ký không an toàn. Theo mặc định, không có mục nhập nào được chỉ định.
Sổ đăng ký không an toàn
Sổ đăng ký không an toàn
  • [registries.block] – Điều này chặn hoặc từ chối quyền truy cập vào các đăng ký được chỉ định từ hệ thống cục bộ của bạn. Theo mặc định, không có mục nhập nào được chỉ định.
Khối đăng ký
Khối đăng ký

Như thường lệ (non-root) người dùng chạy lệnh podman, bạn có thể xác định registries.conf trên thư mục chính của bạn ($HOME/.config/containers/registries.conf) để ghi đè cài đặt trên toàn hệ thống.

Quy tắc khi chỉ định sổ đăng ký

Khi bạn chỉ định sổ đăng ký, hãy ghi nhớ những điều sau:

  • Mỗi sổ đăng ký nên được bao gồm bởi dấu ngoặc kép.
  • Đăng ký có thể được chỉ định bằng cách sử dụng tên máy chủ hoặc địa chỉ IP.
  • Nếu nhiều đăng ký được chỉ định, thì chúng phải được phân tách bằng dấu phẩy.
  • Nếu sổ đăng ký sử dụng một cổng không chuẩn – cổng TCP cổng 443 cho an toàn và 80 cho không an toàn, – số cổng phải được chỉ định cùng với tên sổ đăng ký, ví dụ: registry.example.com:5566.

Để tìm kiếm sổ đăng ký cho hình ảnh vùng chứa bằng cú pháp:

# podman search registry/container_image

Ví dụ: để tìm kiếm một Redis hình ảnh trong registry.redhat.io đăng ký, gọi lệnh:

# podman search registry.redhat.io/redis
Tìm kiếm trong sổ đăng ký cho hình ảnh vùng chứa
Tìm kiếm trong sổ đăng ký cho hình ảnh vùng chứa

Để tìm kiếm một MariaDB chạy hình ảnh vùng chứa.

# podman search registry.redhat.io/mariadb
Tìm kiếm hình ảnh vùng chứa MariaDB
Tìm kiếm hình ảnh vùng chứa MariaDB

Để có được mô tả chi tiết về hình ảnh vùng chứa, hãy sử dụng –no-trunc trước tên của hình ảnh vùng chứa từ kết quả mà bạn nhận được. Ví dụ: chúng tôi sẽ cố gắng có được mô tả chi tiết về hình ảnh vùng chứa MariaDB như được hiển thị:

# podman search --no-trunc registry.redhat.io/rhel8/mariadb-103
Danh sách Mô tả Hình ảnh Vùng chứa MariaDB
Danh sách Mô tả Hình ảnh Vùng chứa MariaDB

Kéo hình ảnh container

Việc kéo hoặc truy xuất hình ảnh vùng chứa từ sổ đăng ký từ xa yêu cầu bạn phải xác thực trước bất kỳ điều gì khác. Ví dụ: để truy xuất hình ảnh vùng chứa MariaDB, trước tiên hãy đăng nhập vào sổ đăng ký Redhat:

# podman login

Cung cấp tên người dùng và mật khẩu của bạn và nhấn ‘ENTERtrên bàn phím của bạn. Nếu mọi việc suôn sẻ, bạn sẽ nhận được thông báo xác nhận rằng việc đăng nhập vào sổ đăng ký đã thành công.

Login Succeeded!

Bây giờ, bạn có thể kéo hình ảnh bằng cú pháp được hiển thị:

# podman pull <registry>[:<port>]/[<namespace>/]<name>:<tag>

Các <registry> đề cập đến máy chủ lưu trữ hoặc sổ đăng ký từ xa cung cấp kho lưu trữ hình ảnh vùng chứa trên TCP <port>. Các <namespace><name> chỉ định chung một hình ảnh vùng chứa dựa trên <namespace> tại cơ quan đăng ký. cuối cùng <tag> chỉ định phiên bản của hình ảnh vùng chứa. Nếu không có thẻ nào được chỉ định, thẻ mặc định – mới nhất – sẽ được sử dụng.

Chúng tôi luôn khuyên bạn nên thêm các đăng ký đáng tin cậy, đó là những đăng ký cung cấp mã hóa và không cho phép người dùng ẩn danh tạo ra các tài khoản có tên ngẫu nhiên.

Để kéo hình ảnh MariaDB, hãy chạy lệnh:

# podman pull registry.redhat.io/rhel8/mariadb-103
  • Các <registry> – registry.redhat.io
  • Các <namespace> – rhel8
  • Các <name> – MariaDB
  • Các <tag> – 103
Kéo hình ảnh MariaDB
Kéo hình ảnh MariaDB

Đối với các lần kéo hình ảnh vùng chứa tiếp theo, không cần đăng nhập nữa vì bạn đã được xác thực. Để kéo một Redis hình ảnh vùng chứa, chỉ cần chạy:

# podman pull registry.redhat.io/rhscl/redis-5-rhel7
Pull Redis Container Image
Pull Redis Container Image

Hình ảnh vùng chứa danh sách

Sau khi hoàn tất việc kéo các hình ảnh, bạn có thể xem các hình ảnh hiện đang tồn tại trên máy chủ của mình bằng cách chạy lệnh podman images.

# podman images
Liệt kê hình ảnh vùng chứa
Liệt kê hình ảnh vùng chứa

Kiểm tra hình ảnh vùng chứa

Trước khi chạy một vùng chứa, bạn nên thăm dò hình ảnh và hiểu nó hoạt động như thế nào. Các podman inspect in ra một biển siêu dữ liệu về vùng chứa chẳng hạn như Hệ điều hành và Kiến trúc.

Để kiểm tra hình ảnh, hãy chạy podman inspect theo sau là ID hình ảnh hoặc kho lưu trữ.

# podman inspect IMAGE ID
OR
# podman inspect REPOSITORY

Trong ví dụ dưới đây, chúng tôi đang kiểm tra MariaDB thùng đựng hàng.

# podman inspect registry.redhat.io/rhel8/mariadb-103
Kiểm tra hình ảnh vùng chứa MariaDB
Kiểm tra hình ảnh vùng chứa MariaDB

Để kéo siêu dữ liệu cụ thể cho một vùng chứa, hãy chuyển –format tiếp theo là siêu dữ liệu và danh tính vùng chứa (ID hình ảnh hoặc tên).

Trong ví dụ bên dưới, chúng tôi đang truy xuất thông tin về kiến ​​trúc và mô tả của thùng chứa cơ sở RHEL 8 nằm trong phần ‘Labels‘ tiết diện.

# podman inspect --format=’{{.Labels.architecture}}’ image ID
# podman inspect --format=’{{.Labels.description}}’ image ID
Nhận thông tin về kiến ​​trúc vùng chứa
Nhận thông tin về kiến ​​trúc vùng chứa

Để kiểm tra một hình ảnh từ xa từ một sổ đăng ký khác, hãy sử dụng skopeo inspect. Trong ví dụ dưới đây, chúng tôi đang kiểm tra hình ảnh đơn vị RHEL 8 được lưu trữ trên Docker.

# skopeo inspect docker://registry.redhat.io/rhel8-beta/rhel-init
Kiểm tra hình ảnh từ xa từ Docker Registry
Kiểm tra hình ảnh từ xa từ Docker Registry

Gắn thẻ hình ảnh vùng chứa

Như bạn có thể đã lưu ý, tên hình ảnh thường có bản chất chung chung. Ví dụ, hình ảnh redis được gắn nhãn:

registry.redhat.io/rhscl/redis-5-rhel7

Gắn thẻ hình ảnh mang lại cho chúng một cái tên trực quan hơn để hiểu rõ hơn những gì chúng chứa. Sử dụng podman tagbạn có thể tạo thẻ hình ảnh về cơ bản là bí danh cho tên hình ảnh bao gồm các phần khác nhau.

Đó là:

registry/username/NAME:tag

Ví dụ: để thay đổi tên chung của hình ảnh Redis có ID là 646f2730318c chúng tôi sẽ thực hiện lệnh:

# podman tag 646f2730318c myredis

Để thêm thẻ vào cuối, hãy thêm dấu hai chấm đầy đủ theo sau là số thẻ:

# podman tag 646f2730318c myredis:5.0

Nếu không thêm số thẻ, nó sẽ chỉ được gán thuộc tính mới nhất.

Đặt tên cho hình ảnh vùng chứa Redis
Đặt tên cho hình ảnh vùng chứa Redis

Đang chạy hình ảnh vùng chứa

Để chạy một vùng chứa, hãy sử dụng podman run. Ví dụ:

# podman run image_id

Để chạy một vùng chứa ẩn trong nền như một dịch vụ daemon, hãy sử dụng -d như hình.

# podman run -d image_id

Ví dụ, để chạy redis hình ảnh có ID 646f2730318cchúng tôi sẽ gọi lệnh:

# podman run -d 646f2730318c
Chạy hình ảnh vùng chứa Redis
Chạy hình ảnh vùng chứa Redis

Nếu bạn đang chạy một vùng chứa dựa trên một hệ điều hành, chẳng hạn như RHEL 8 hình ảnh cơ sở, bạn có thể có quyền truy cập vào trình bao bằng cách sử dụng -it chỉ thị. Các -i tạo một phiên tương tác trong khi -t sinh ra một phiên đầu cuối. Các –name đặt tên vùng chứa thành mybash trong khi là ecbc6f53bba0 id hình ảnh của hình ảnh cơ sở.

# podman run -it --name=mybash ecbc6f53bba0

Sau đó, bạn có thể chạy bất kỳ lệnh shell nào. Trong ví dụ bên dưới, chúng tôi đang xác minh phiên bản hệ điều hành của hình ảnh vùng chứa.

# cat /etc/os-release
Xác minh phiên bản hệ điều hành hình ảnh vùng chứa
Xác minh phiên bản hệ điều hành hình ảnh vùng chứa

Để thoát khỏi vùng chứa, chỉ cần gọi lệnh thoát.

# exit

Khi vùng chứa được thoát ra, nó sẽ tự động dừng lại. Để bắt đầu lại vùng chứa, hãy sử dụng podman start các -ai như hình.

# podman start -ai mybash

Một lần nữa, điều này cho phép bạn truy cập vào shell.

Bắt đầu hình ảnh vùng chứa
Bắt đầu hình ảnh vùng chứa

Hình ảnh vùng chứa đang chạy danh sách

Để liệt kê các vùng chứa hiện đang chạy, hãy sử dụng podman ps như hình.

# podman ps
Danh sách hình ảnh vùng chứa đang chạy
Danh sách hình ảnh vùng chứa đang chạy

Để xem tất cả các vùng chứa bao gồm cả những vùng chứa đã thoát sau khi chạy, hãy sử dụng lệnh:

# podman ps -a
Xem tất cả hình ảnh vùng chứa
Xem tất cả hình ảnh vùng chứa

Định cấu hình hình ảnh vùng chứa để tự động bắt đầu theo dịch vụ Systemd

Trong phần này, chúng tôi tập trung vào cách một vùng chứa có thể được định cấu hình để chạy trực tiếp trên hệ thống RHEL dưới dạng dịch vụ systemd.

Đầu tiên, lấy hình ảnh ưa thích của bạn. Trong trường hợp này, chúng tôi đã kéo Redis hình ảnh từ trung tâm docker:

# podman pull docker.io/redis

Nếu bạn có SELinux đang chạy trên hệ thống của mình, bạn cần kích hoạt container_manage_cgroup boolean để chạy các vùng chứa với systemd.

# setsebool -p container_manage_cgroup on

Sau đó, chạy hình ảnh vùng chứa trong nền và gán nó cho tên hình ảnh ưa thích của bạn. Trong ví dụ này, chúng tôi đã đặt tên cho hình ảnh của mình redis_server và lập bản đồ cảng 6379 từ thùng chứa đến của chúng tôi RHEL 8 chủ nhà

# podman run -d --name redis_server -p 6379:6379 redis
Chạy hình ảnh vùng chứa trong nền
Chạy hình ảnh vùng chứa trong nền

Tiếp theo, chúng tôi sẽ tạo một systemd tệp cấu hình đơn vị cho redis trong /etc/systemd/system/.

# vim /etc/systemd/system/redis-container.service

Dán nội dung bên dưới vào tệp.

[Unit]
Description=Redis container

[Service]
Restart=always
ExecStart=/usr/bin/podman start -a redis_server
ExecStop=/usr/bin/podman stop -t 2 redis_server

[Install]
WantedBy=local.target

Lưu và thoát khỏi tệp.

Tiếp theo, cấu hình vùng chứa để bắt đầu tự động khi khởi động.

# systemctl enable redis-container.service

Tiếp theo, khởi động vùng chứa và xác minh trạng thái đang chạy của nó.

# systemctl start redis-container.service
# systemctl status redis-container.service
Xác minh trạng thái hình ảnh vùng chứa
Xác minh trạng thái hình ảnh vùng chứa

Định cấu hình bộ nhớ liên tục cho hình ảnh vùng chứa

Khi chạy vùng chứa, cần thận trọng để định cấu hình bộ nhớ ngoài liên tục trên máy chủ. Điều này cung cấp một bản sao lưu trong trường hợp vùng chứa gặp sự cố hoặc vô tình bị xóa.

Để duy trì dữ liệu, chúng tôi sẽ ánh xạ một thư mục nằm trong máy chủ lưu trữ tới một thư mục bên trong vùng chứa.

$ podman run --privileged -it -v /var/lib/containers/backup_storage:/mnt registry.redhat.io/ubi8/ubi /bin/bash

Các –privileged được thông qua khi SELinux được đặt thành thực thi. Các -v chỉ định âm lượng bên ngoài nằm trên máy chủ. Khối lượng container ở đây là /mnt.

Khi chúng tôi đã truy cập shell, chúng tôi sẽ tạo một tệp mẫu testing.txt bên trong /mnt như hình.

$ echo "This tests persistent external storage" > /mnt/testing.txt

Sau đó chúng tôi sẽ exit vùng chứa và kiểm tra xem tệp có tồn tại trong bộ nhớ ngoài nằm trên máy chủ lưu trữ hay không

# exit
# cat /var/lib/containers/backup_storage/testing.txt

Đầu ra ⇒ This tests persistent external storage.

Định cấu hình bộ nhớ liên tục cho vùng chứa
Định cấu hình bộ nhớ liên tục cho vùng chứa

Dừng và Loại bỏ Vùng chứa

Khi bạn đã hoàn tất việc chạy vùng chứa của mình, bạn có thể dừng nó bằng cách sử dụng podman stop tiếp theo là container-id mà bạn có thể lấy từ podman ps.

# podman stop container-id
Dừng hình ảnh vùng chứa
Dừng hình ảnh vùng chứa

Để loại bỏ các vùng chứa mà bạn không cần nữa, trước tiên, hãy đảm bảo rằng bạn dừng nó và sau đó gọi podman rm theo sau là id vùng chứa hoặc tên như một tùy chọn.

# podman rm container-id

Để xóa nhiều vùng chứa cùng một lúc trong một lệnh, hãy chỉ định vùng chứa ids cách nhau một khoảng trắng.

# podman rm container-id-1 container-id-2 container-id-3
Xóa hình ảnh vùng chứa
Xóa hình ảnh vùng chứa

Để xóa tất cả các vùng chứa của bạn, hãy chạy lệnh:

# podman rm -a
Xóa tất cả các vùng chứa
Xóa tất cả các vùng chứa

Xóa hình ảnh

Để xóa hình ảnh, trước tiên, hãy đảm bảo rằng tất cả các vùng chứa được tạo ra từ hình ảnh được dừng và xóa như đã thảo luận trong chủ đề phụ trước.

Tiếp theo, tiến hành và chạy podman -rmi theo sau là ID của hình ảnh như hình:

# podman -rmi image-id
Xóa hình ảnh
Xóa hình ảnh

Sự kết luận

Phần này kết thúc chương này về quản lý và làm việc với các vùng chứa trong RHEL 8. Chúng tôi hy vọng hướng dẫn này cung cấp hiểu biết tốt về các vùng chứa và cách bạn có thể tương tác và quản lý chúng trên RHEL hệ thống sử dụng podmanSkopeo.