2019-10-14

[CentOS 8] Podman の設定

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 を使ってみようと設定してみました。


使用した OS は前述のとおり、CentOS 8 です。

OS
CentOS Linux release 8.0.1905 (Core)

podman のインストール

念の為、docker を削除するコマンドを実行してから podman をインストールしました。

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 のインストール 
$ 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 から registry.redhat.io へのレジストリにログイン 
$ podman login registry.redhat.io -u '11470127|bitwalk'
Password: 

Login Succeeded!
$ 

RHEL 8ベースの UBI のコンテナーイメージを検索すると以下のようになります。

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 のコンテナーイメージを取得します。

registry.redhat.io/ubi8 のコンテナーイメージ取得 
$ 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 の実行 
$ podman images
REPOSITORY                TAG      IMAGE ID       CREATED       SIZE
registry.redhat.io/ubi8   latest   11f9dba4d1bc   3 weeks ago   216 MB
$ 

イメージを起動してみます。

registry.redhat.io/ubi8 のコンテナーイメージの起動 
$ 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 を用意して、コンテナイメージをビルドしてみました。

CentOS 8 用の Dockerfile 
FROM centos:centos8
MAINTAINER bitwalk

podman build コマンドでビルドします。

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 を起動します。

コンテナーイメージ localhost/base (65e7c22f21f4) の起動 
$ 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 をもっと使い込んでみます。

参考サイト

  1. Podman | podman.io: Repository for podman.io website using GitHub Pages.
  2. 第6章 コンテナーに関する主な変更点 Red Hat Enterprise Linux 8 | Red Hat Customer Portal
  3. CentOS 7とPodmanで触ってみようRed Hat UBI - 導入編 - 赤帽エンジニアブログ [2019-08-14]
  4. PodmanのセキュリティはDockerよりも何が優れているのか? - Qiita [2019-01-26]
  5. Intro to Podman (Red Hat Enterprise Linux 7.6 Beta) - Red Hat Developer [2018-08-29]

 

ブログランキング・にほんブログ村へにほんブログ村

0 件のコメント: