Podman は、ほとんどの Linux プラットフォームで利用でき、GitHub を開発拠点とするオープンソースプロジェクトです。 Podman は、Linux システムで Open Container Initiative(OCI)のコンテナーおよびコンテナーイメージを開発、管理、および実行するための daemon を使用しない Docker 互換のコンテナーエンジンです。
Podman は RedHat Enterprise Linux (RHEL) / CentOS 7.6 以降で配布されはじめ、RHEL 8.0 では Podman がデフォルトになり Docker が同梱されなくなりました。これは CentOS 8 でも同じです。自分は CentOS 7 で https://download.docker.com/ の Docker-CE を利用していますが、テスト用に使い始めた CentOS 8 では RedHat が配布している podman を使ってみようと設定してみました。
- podman のインストール
- podman のコマンド
- Red Hat UBI (Red Hat Universal Base Image) を使ってみる
- Dockerfile を用いたコンテナイメージのビルド
- 参考サイト
使用した OS は前述のとおり、CentOS 8 です。
OS | ||
CentOS Linux release 8.0.1905 (Core) |
podman のインストール
念の為、docker を削除するコマンドを実行してから podman をインストールしました。
$ sudo dnf remove docker 一致した引数がありません: docker 削除対象のパッケージはありません。 依存関係が解決しました。 行うべきことはありません。 完了しました! $ sudo dnf list podman 利用可能なパッケージ podman.x86_64 1.0.5-1.gitf604175.module_el8.0.0+194+ac560166 AppStream $ sudo dnf install podman CentOS-8 - AppStream 1.6 kB/s | 4.3 kB 00:02 ... (途中省略) ... トランザクションの概要 ================================================================================ インストール 8 パッケージ ダウンロードサイズの合計: 12 M インストール済みのサイズ: 46 M これでよろしいですか? [y/N]: y パッケージのダウンロード中です: CentOS-8 - Base 206% [=========================================] 603 B/s | (1/8): containers-common-0.1.32-3.git1715c90.mo 28 kB/s | 31 kB 00:01 ... (途中省略) ... インストール済み: podman-1.0.5-1.gitf604175.module_el8.0.0+194+ac560166.x86_64 fuse-overlayfs-0.3-2.module_el8.0.0+58+91b614e7.x86_64 slirp4netns-0.1-2.dev.gitc4e1bc5.module_el8.0.0+58+91b614e7.x86_64 container-selinux-2:2.94-1.git1e99f1d.module_el8.0.0+58+91b614e7.noarch containers-common-1:0.1.32-3.git1715c90.module_el8.0.0+58+91b614e7.x86_64 oci-systemd-hook-1:0.1.15-2.git2d0b8a3.module_el8.0.0+58+91b614e7.x86_64 runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64 fuse3-libs-3.2.1-12.el8.x86_64 完了しました! $ podman version Version: 1.0.5 Go Version: go1.11.6 OS/Arch: linux/amd64 $
podman のコマンド
podman のコマンドを確認します。厳密にくらべてはいませんが、docker と同じコマンドで、docker を podman に置き換えるだけで同じように使えそうです。
$ podman --help
NAME:
podman - manage pods and images
USAGE:
podman [global options] command [command options] [arguments...]
VERSION:
1.0.5
COMMANDS:
attach Attach to a running container
commit Create new image based on the changed container
container Manage Containers
build Build an image using instructions from Dockerfiles
create Create but do not start a container
diff Inspect changes on container's file systems
exec Run a process in a running container
export Export container's filesystem contents as a tar archive
history Show history of a specified image
image Manage images
images List images in local storage
import Import a tarball to create a filesystem image
info Display podman system information
inspect Displays the configuration of a container or image
kill Kill one or more running containers with a specific signal
load Load an image from docker archive
login Login to a container registry
logout Logout of a container registry
logs Fetch the logs of a container
mount Mount a working container's root filesystem
pause Pauses all the processes in one or more containers
list, ls, ps List containers
pod Manage pods
port List port mappings or a specific mapping for the container
pull Pull an image from a registry
push Push an image to a specified destination
restart Restart one or more containers
rm Remove one or more containers
rmi Removes one or more images from local storage
run Run a command in a new container
save Save image to an archive
search Search registry for image
start Start one or more containers
stats Display percentage of CPU, memory, network I/O, block I/O and PIDs for one or more containers
stop Stop one or more containers
tag Add an additional name to a local image
top Display the running processes of a container
umount, unmount Unmounts working container's root filesystem
unpause Unpause the processes in one or more containers
version Display the Podman Version Information
volume Manage volumes
wait Block on one or more containers
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--cgroup-manager value cgroup manager to use (cgroupfs or systemd, default systemd)
--cni-config-dir value path of the configuration directory for CNI networks
--conmon value path of the conmon binary
--cpu-profile value path for the cpu profiling results
--hooks-dir value set the OCI hooks directory path (may be set multiple times)
--log-level value log messages above specified level: debug, info, warn, error (default), fatal or panic (default: "error")
--namespace value set the libpod namespace, used to create separate views of the containers and pods on the system
--root value path to the root directory in which data, including images, is stored
--tmpdir value path to the tmp directory
--runroot value path to the 'run directory' where all state information is stored
--runtime value path to the OCI-compatible binary used to run containers, default is /usr/bin/runc
--storage-driver value, -s value select which storage driver is used to manage storage of images and containers (default is overlay)
--storage-opt value used to pass an option to the storage driver
--syslog output logging information to syslog as well as the console
--help, -h show help
--version, -v print the version
$
Red Hat UBI (Red Hat Universal Base Image) を使ってみる
podman では docker イメージをそのまま利用できるので、そのまま置き換えて使ってみれば良いのですが、参考サイト [3] によると、Red Hat 社のカスタマーポータルにログインする時に使う Red Hat ID があれば Red Hat UBI のコンテナーイメージを利用できるということですので、Podman の最初の動作確認に利用してみました。
※ Red Hat 社の製品を評価する目的で Red Hat ID を持っているので試してみました。
まず Podman から registry.redhat.io のレジストリにログインします。ここでは Red Hat ID の代わりに Registry Service Accounts で生成した Service Account を使用しました。Service Account は "|" 区切りで 7 桁の数字と任意のアルファベットから構成されます。パスワードとして約 700 文字の Token が割り当てられます。
$ podman login registry.redhat.io -u '11470127|bitwalk'
Password:
Login Succeeded!
$
RHEL 8ベースの UBI のコンテナーイメージを検索すると以下のようになります。
$ podman search registry.redhat.io/ubi8
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redhat.io registry.redhat.io/ubi8 The Universal Base Image is designed and eng... 0
redhat.io registry.redhat.io/openjdk/openjdk-11-rhel8 OpenJDK S2I image for Java Applications on U... 0
redhat.io registry.redhat.io/openjdk/openjdk-8-rhel8 OpenJDK 1.8 Image for Java Applications base... 0
redhat.io registry.redhat.io/ubi8/nodejs-10 Platform for building and running Node.js 10... 0
redhat.io registry.redhat.io/ubi8/php-72 Platform for building and running PHP 7.2 ap... 0
redhat.io registry.redhat.io/ubi8/python-27 Platform for building and running Python 2.7... 0
redhat.io registry.redhat.io/ubi8/s2i-core Base image which allows using of source-to-i... 0
redhat.io registry.redhat.io/ubi8/ubi Provides the latest release of the Red Hat U... 0
redhat.io registry.redhat.io/ubi8/ubi-minimal Provides the latest release of the Minimal R... 0
redhat.io registry.redhat.io/ubi8/dotnet-21 .NET Core 2.1 SDK and Runtime on RHEL 8 0
redhat.io registry.redhat.io/ubi8/perl-526 Platform for building and running Perl 5.26 ... 0
redhat.io registry.redhat.io/ubi8/python-36 Platform for building and running Python 3.6... 0
redhat.io registry.redhat.io/ubi8/ruby-25 Platform for building and running Ruby 2.5 a... 0
redhat.io registry.redhat.io/ubi8/dotnet-21-runtime Provides the latest release of Red Hat Enter... 0
redhat.io registry.redhat.io/ubi8/s2i-base Base image with essential libraries and tool... 0
redhat.io registry.redhat.io/ubi8/ubi-init Provides the latest release of the Red Hat U... 0
redhat.io registry.redhat.io/ubi8-init The Universal Base Image Init is designed to... 0
redhat.io registry.redhat.io/ubi8-minimal The Universal Base Image Minimal is a stripp... 0
$
参考サイト [3] に倣ってレジストリから UBI 8 のコンテナーイメージを取得します。
$ podman pull registry.redhat.io/ubi8
Trying to pull registry.redhat.io/ubi8...Getting image source signatures
Copying blob c65691897a4d: 0 B / 67.74 MiB [-----------------------------------]
Copying blob c65691897a4d: 66.99 MiB / 67.74 MiB [=============================]
Copying blob c65691897a4d: 67.74 MiB / 67.74 MiB [=========================] 10s
Copying blob 641d7cc5cbc4: 1.48 KiB / 1.48 KiB [===========================] 10s
Copying config 11f9dba4d1bc: 4.43 KiB / 4.43 KiB [==========================] 0s
Writing manifest to image destination
Storing signatures
11f9dba4d1bc7bbead64adb8fd73ea92dca5fac88a9b5c2c9796abcf2e97846d
$
イメージのサイズを確認すると 200MB 程度です。
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.redhat.io/ubi8 latest 11f9dba4d1bc 3 weeks ago 216 MB
$
イメージを起動してみます。
$ podman run -it registry.redhat.io/ubi8 bash bash-4.4# cat /etc/redhat-release Red Hat Enterprise Linux release 8.0 (Ootpa) bash-4.4# df -h Filesystem Size Used Avail Use% Mounted on fuse-overlayfs 200G 2.9G 198G 2% / tmpfs 64M 0 64M 0% /dev tmpfs 367M 56K 367M 1% /etc/hosts shm 63M 0 63M 0% /dev/shm tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup devtmpfs 1.8G 0 1.8G 0% /dev/tty tmpfs 1.8G 0 1.8G 0% /proc/acpi tmpfs 1.8G 0 1.8G 0% /proc/scsi tmpfs 1.8G 0 1.8G 0% /sys/firmware bash-4.4# dnf repolist Updating Subscription Management repositories. Unable to read consumer identity This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. Red Hat Universal Base Image 8 (RPMs) - AppStre 429 kB/s | 2.3 MB 00:05 Red Hat Universal Base Image 8 (RPMs) - BaseOS 151 kB/s | 754 kB 00:04 Last metadata expiration check: 0:00:03 ago on Mon Oct 14 09:24:16 2019. repo id repo name status ubi-8-appstream Red Hat Universal Base Image 8 (RPMs) - AppStream 778 ubi-8-baseos Red Hat Universal Base Image 8 (RPMs) - BaseOS 659 bash-4.4# exit exit $
パッケージレポジトリは通常の RHEL 8 のレポジトリではなく、UBI のレポジトリ ubi-8-baseos と ubi-8-appstream が参照されています。
Dockerfile を用いたコンテナイメージのビルド
下記のような CentOS 8 のコンテナイメージを作成するだけの単純な Dockerfile を用意して、コンテナイメージをビルドしてみました。
FROM centos:centos8 MAINTAINER bitwalk
podman build コマンドでビルドします。
$ podman build -t base:centos8 . STEP 1: FROM centos:centos8 Getting image source signatures Copying blob 729ec3a6ada3: 66.87 MiB / 68.21 MiB [=============================] Copying blob 729ec3a6ada3: 68.21 MiB / 68.21 MiB [=========================] 11s Copying config 0f3e07c0138f: 2.13 KiB / 2.13 KiB [==========================] 0s Writing manifest to image destination Storing signatures STEP 2: MAINTAINER bitwalk --> 5b2faaf200d323caf1f599e482d54d69713224ad8974fa4b62c81e700bb4fca8 STEP 3: COMMIT base:centos8 --> 65e7c22f21f47daa98db529bdc5f857db45fe031f277481537f0872f3f0a0e6c $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/base centos8 65e7c22f21f4 About a minute ago 227 MB <none> <none> 5b2faaf200d3 About a minute ago 227 MB docker.io/library/centos centos8 0f3e07c0138f 12 days ago 227 MB registry.redhat.io/ubi8 latest 11f9dba4d1bc 3 weeks ago 216 MB $
IMAGE ID でコンテナイメージで bash を起動します。
$ podman run -it 65e7c22f21f4 bash [root@d7b310aea6e9 /]# cat /etc/centos-release CentOS Linux release 8.0.1905 (Core) [root@d7b310aea6e9 /]# df -h Filesystem Size Used Avail Use% Mounted on fuse-overlayfs 200G 2.6G 198G 2% / tmpfs 64M 0 64M 0% /dev tmpfs 367M 56K 367M 1% /etc/hosts shm 63M 0 63M 0% /dev/shm tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup devtmpfs 1.8G 0 1.8G 0% /dev/tty tmpfs 1.8G 0 1.8G 0% /proc/acpi tmpfs 1.8G 0 1.8G 0% /proc/scsi tmpfs 1.8G 0 1.8G 0% /sys/firmware [root@d7b310aea6e9 /]# dnf repolist Failed to set locale, defaulting to C CentOS-8 - AppStream 707 kB/s | 6.0 MB 00:08 CentOS-8 - Base 1.0 MB/s | 7.9 MB 00:07 CentOS-8 - Extras 412 B/s | 2.1 kB 00:05 Last metadata expiration check: 0:00:01 ago on Mon Oct 14 10:08:18 2019. repo id repo name status AppStream CentOS-8 - AppStream 5069 BaseOS CentOS-8 - Base 2835 extras CentOS-8 - Extras 3 [root@d7b310aea6e9 /]# exit exit $
Red Hat 社が中心となってオープンソースで開発中のコンテナエンジン Podman が、将来 Docker に置き換わることになるかは定かではありませんが、RHEL/CentOS 系 Linux をメインに使っているので、わざわざ Docker を導入することをせずに、Podman をもっと使い込んでみます。
参考サイト
- Podman | podman.io: Repository for podman.io website using GitHub Pages.
- 第6章 コンテナーに関する主な変更点 Red Hat Enterprise Linux 8 | Red Hat Customer Portal
- CentOS 7とPodmanで触ってみようRed Hat UBI - 導入編 - 赤帽エンジニアブログ [2019-08-14]
- PodmanのセキュリティはDockerよりも何が優れているのか? - Qiita [2019-01-26]
- Intro to Podman (Red Hat Enterprise Linux 7.6 Beta) - Red Hat Developer [2018-08-29]
にほんブログ村
0 件のコメント:
コメントを投稿