BETA

PodmanとBuildahとSkopeoを使ったコンテナ管理

投稿日:2020-08-29
最終更新:2020-08-29

概要

今はコンテナ=Dockerの流れがありますが、RedHatが開発しているRed Hat Enterprise Linux8には標準でDockerツールが無くなっています。RHEL8
Dockerは、Docker Daemonにあらゆる機能を含む設計となっており、DockerイメージのPushやPull、ストレージの管理など様々なことができます。なんでもできるので合理的で便利でしたが、コンテナ利用が進むにつれてRoot権限での実行やデーモンプロセス停止時に全機能停止といったリスクが出始めてきて、機能に応じたツールの分離やRootlessModeの必要性が議論されるようになりました。
そこでコンテナのフォーマット・ランタイムの業界標準策定を目的として設立されたイニシアチブであるOpen Container Initiative(OCI)がそれぞれの機能の仕様を作成し、ライブラリの開発が進むにつれて、コンテナイメージの転送、イメージのビルドからPodの管理まで、単体で対応するツールが開発されるようになりました。それが以下の3つのツールです。

  • Podman
  • Buildah
  • Skopeo

Podmanとは

PodmanはKubernetesを用いずにローカルでPodの停止や起動を管理するツールです。
以下の特徴があります。

  • Daemonを起動させる必要がない(Daemonless)
  • Root権限を要求しない一般ユーザーでPodを起動できる(Rootless mode)
  • DockerでビルドしたイメージをPodmanで起動できる(OCI Compatible)

他にもPodmanはDockerとコマンドラインに互換性があることからdockerコマンドと同じような使い方がpodmanコマンドで実現することができます。

Buidahとは

BuidalhはOCI準拠のコンテナイメージをビルドし、レジストリにプッシュするツールです。
Podmanと機能で重複する箇所がありますが、Buildahはあくまでもコンテナのイメージビルドするのに必要最低限な機能を範囲でコンテナを起動させるように機能を制限されています。

Skopeoとは

Skopeoは、コンテナイメージをコピーするクライアントツールです。
イメージの署名、検証を行えるのもSkopeoの大きな特徴です。

この記事では、Dockerを使わずにこれらのツールを用いてrootユーザではない一般ユーザでコンテナ操作をできる方法を紹介いたします。

各種環境ツール

  • OS:CentOS8.2
  • podman ver 1.6.4
  • buildah ver 1.11.6
  • skopeo ver 0.1.40

インストールする方法や各種ツールの使い方などはRedHatさんの公式ページが一番分かりやすいと思われますので、基本的にこれに沿って色々と検証していきたいと思います。

各種インストールと初期設定

インストール方法としては、一個一個インストールしてもいいですが、こちらのコマンドを使えば一括でインストールできるようです。

# yum(dnf) module install -y container-tools  

次に冒頭で話した通り、root以外のユーザでコンテナ操作できるようにルートレスコンテナの設定を行います。

ユーザの名前空間を増やす

名前空間(namespace)とは、システムに存在する様々な種類のリソースについて存在し、所属するプロセスに見かけ上で独立したリソースを見せる機能です。正直なところ私自身もこの辺の概論を理解できるとは言い難くいい加減なことが言えないのですが、ユーザの名前空間は独立したuser id、group idを見せることになります。詳しくはSoftware Design7月号の「試して理解Linuxのしくみコーナー」をご参照ください。(https://gihyo.jp/magazine/SD/archive/2020/202007)
話しを戻しまして、その名前空間を以下のコマンドを用いて増やしていきます。

# echo "user.max_user_namespaces=28633" > /etc/sysctl.d/userns.conf  
# sysctl -p /etc/sysctl.d/userns.conf  

この状態で非rootユーザにした上でpodmanでイメージを取得できることを確かめてみます。

$ podman pull registry.access.redhat.com/ubi8/ubi  
$ podman run registry.access.redhat.com/ubi8/ubi cat /etc/os-release  
NAME="Red Hat Enterprise Linux"  
VERSION="8.2 (Ootpa)"  
ID="rhel"  
ID_LIKE="fedora"  
VERSION_ID="8.2"  
PLATFORM_ID="platform:el8"  
PRETTY_NAME="Red Hat Enterprise Linux 8.2 (Ootpa)"  
ANSI_COLOR="0;31"  
CPE_NAME="cpe:/o:redhat:enterprise_linux:8.2:GA"  
HOME_URL="https://www.redhat.com/"  
BUG_REPORT_URL="https://bugzilla.redhat.com/"  
REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"  
REDHAT_BUGZILLA_PRODUCT_VERSION=8.2  
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"  
REDHAT_SUPPORT_PRODUCT_VERSION="8.2"  

Redhatが提供しているUniversal Base Images (UBI)を取得し、イメージからコンテナを起動しています。
起動したコンテナに対してcat /etc/os-releaseでコンテナのOSバージョン情報を参照しています。
非rootユーザでpodmanを実行してコンテナ操作をできることを確認できました。次は各種操作について説明していきます。

イメージの検索とpull

イメージの検索はpodman search <イメージ名>でヒットします。

$ podman search node  
INDEX        NAME                                                                                  DESCRIPTION                                       STARS   OFFICIAL   AUTOMATED  
redhat.com   registry.access.redhat.com/openshift3/node                                            Provides a containerized OpenShift Node with...   0      
redhat.com   registry.access.redhat.com/openshift3/prometheus-node-exporter                        Prometheus exporter for hardware and OS metr...   0      
redhat.com   registry.access.redhat.com/codeready-workspaces/stacks-node                           Red Hat CodeReady Workspaces - Node Stack co...   0      
redhat.com   registry.access.redhat.com/rhel7/kubernetes-scheduler                                 The Kubernetes scheduler watches for new un-...   0      
redhat.com   registry.access.redhat.com/openshift3/metrics-hawkular-openshift-agent                Hawkular OpenShift Agent is a Hawkular feed ...   0      
redhat.com   registry.access.redhat.com/openshift3/ose-node-problem-detector                       Node Problem Detector monitors OpenShift nod...   0      
redhat.com   registry.access.redhat.com/openshift3/ose-metrics-heapster                            Retrieves container and node metrics from an...   0      
redhat.com   registry.access.redhat.com/openshift3/metrics-heapster                                Retrieves container and node metrics from an...   0      
redhat.com   registry.access.redhat.com/openshift3/ose-keepalived-ipfailover                       Optional Pod providing keepalived support fo...   0      
redhat.com   registry.access.redhat.com/openshift3/ose-metrics-hawkular-openshift-agent            Hawkular OpenShift Agent is a Hawkular feed ...   0      
redhat.com   registry.access.redhat.com/openshift3/ose-node                                        Provides a containerized OpenShift Node with...   0      
redhat.com   registry.access.redhat.com/amqstreams-1/amqstreams10-kafkaconnect-openshift           AMQ Streams image for running an Apache Kafk...   0      
redhat.io    registry.redhat.io/openshift3/node                                                    Provides a containerized OpenShift Node with...   0      
redhat.io    registry.redhat.io/openshift4/ose-prometheus-node-exporter                            Prometheus exporter for hardware and OS metr...   0      
redhat.io    registry.redhat.io/openshift4/ose-cluster-node-tuning-operator                        'OpenShift Node Tuning Operator'                  0      
redhat.io    registry.redhat.io/openshift4/ose-node                                                'OpenShift Container Platform Node'               0      
redhat.io    registry.redhat.io/openshift3/prometheus-node-exporter                                Prometheus exporter for hardware and OS metr...   0      
redhat.io    registry.redhat.io/openshift4/ose-csi-node-driver-registrar                           CSI Node Driver Registar                          0      
redhat.io    registry.redhat.io/openshift4/ose-node-feature-discovery                              Node Feature Discovery Container Image            0      
redhat.io    registry.redhat.io/openshift4/ose-cluster-nfd-operator                                Node Feature Discovery (NFD) Operator             0      
redhat.io    registry.redhat.io/codeready-workspaces/stacks-node                                   Red Hat CodeReady Workspaces - Node Stack co...   0      
redhat.io    registry.redhat.io/codeready-workspaces/stacks-node-rhel8                             Red Hat CodeReady Workspaces - Node 10 Stack      0      
redhat.io    registry.redhat.io/codeready-workspaces/plugin-java8-rhel8                            Red Hat CodeReady Workspaces - Java 8 plugin...   0      
redhat.io    registry.redhat.io/rhel7/kubernetes-scheduler                                         The Kubernetes scheduler watches for new un-...   0      
redhat.io    registry.redhat.io/openshift3/metrics-hawkular-openshift-agent                        Hawkular OpenShift Agent is a Hawkular feed ...   0      
redhat.io    registry.redhat.io/openshift3/ose-node-problem-detector                               Node Problem Detector monitors OpenShift nod...   0      
redhat.io    registry.redhat.io/openshift3/ose-metrics-heapster                                    Retrieves container and node metrics from an...   0      
redhat.io    registry.redhat.io/openshift3/metrics-heapster                                        Retrieves container and node metrics from an...   0      
redhat.io    registry.redhat.io/openshift3/ose-metrics-hawkular-openshift-agent                    Hawkular OpenShift Agent is a Hawkular feed ...   0      
redhat.io    registry.redhat.io/openshift3/ose-keepalived-ipfailover                               Optional Pod providing keepalived support fo...   0      
redhat.io    registry.redhat.io/container-native-virtualization/node-maintenance-operator          Red Hat Container Native Virtualization imag...   0      
redhat.io    registry.redhat.io/openshift3/ose-node                                                Provides a containerized OpenShift Node with...   0      
redhat.io    registry.redhat.io/amqstreams-1/amqstreams10-kafkaconnect-openshift                   AMQ Streams image for running an Apache Kafk...   0      
redhat.io    registry.redhat.io/openshift4/ose-cluster-machine-approver                            'Validates and approves CSRs for nodes attem...   0      
redhat.io    registry.redhat.io/container-native-virtiualization/node-maintenance-rhel8-operator   Red Hat Container Native Virtualization imag...   0      
redhat.io    registry.redhat.io/openshift4/ose-ptp                                                 Linuxptp daemonset to apply ptp configuratio...   0      
redhat.io    registry.redhat.io/container-native-virtualization/kubevirt-cpu-node-labeller         Red Hat Container Native Virtualization imag...   0      
docker.io    docker.io/library/node                                                                Node.js is a JavaScript-based platform for s...   9152    [OK]  
docker.io    docker.io/nodered/node-red-docker                                                     Deprecated - older Node-RED Docker images.        351                [OK]  
docker.io    docker.io/bitnami/node                                                                Bitnami Node.js Docker Image                      45                 [OK]  
docker.io    docker.io/appsvc/node                                                                 Azure App Service Node.js dockerfiles             14                 [OK]  
docker.io    docker.io/circleci/node                                                               Node.js is a JavaScript-based platform for s...   110    
docker.io    docker.io/prom/node-exporter                                                                                                            193                [OK]  
docker.io    docker.io/calico/node                                                                 Calico's per-host DaemonSet container image....   19                 [OK]  
docker.io    docker.io/library/mongo-express                                                       Web-based MongoDB admin interface, written w...   754     [OK]  
docker.io    docker.io/iron/node                                                                   Tiny Node image                                   29     
docker.io    docker.io/bitnami/node-exporter                                                       Bitnami Node Exporter Docker Image                2                  [OK]  
docker.io    docker.io/kkarczmarczyk/node-yarn                                                     Node docker image with yarn package manager ...   48                 [OK]  
docker.io    docker.io/nodered/node-red                                                            Low-code programming for event-driven applic...   175    
docker.io    docker.io/nodecg/nodecg                                                               Create broadcast graphics using Node.js and ...   1                  [OK]  
docker.io    docker.io/selenium/node-chrome                                                                                                          213                [OK]  
docker.io    docker.io/appsvctest/node                                                             node build                                        0                  [OK]  
docker.io    docker.io/library/iojs                                                                io.js is an npm compatible platform original...   135     [OK]  
docker.io    docker.io/camptocamp/node-collectd                                                    rancher node monitoring agent                     0                  [OK]  
docker.io    docker.io/ppc64le/node                                                                Node.js is a JavaScript-based platform for s...   2      
docker.io    docker.io/testim/node-chrome                                                          Selenium Chrome Node + Testim Extension           0                  [OK]  
docker.io    docker.io/digitallyseamless/nodejs-bower-grunt                                         Node.js w/ Bower & Grunt Dockerfile for tru...   48                 [OK]  
docker.io    docker.io/cusspvz/node                                                                ? Super small Node.js container (~15MB) b...      8                  [OK]  
docker.io    docker.io/ogazitt/node-env                                                            node app that shows environment variables         2      
docker.io    docker.io/basi/node-exporter                                                          Node exporter image that allows to expose th...   8                  [OK]  
docker.io    docker.io/selenium/node-firefox                                                                                                         136                [OK]  
docker.io    docker.io/tarampampam/node                                                            Docker image, based on node, with some addit...   2                  [OK]  

--filter=is-officialで配布元が公式のイメージのみをフィルターすることができます。

$ podman search node --filter=is-official  
INDEX       NAME                              DESCRIPTION                                       STARS   OFFICIAL   AUTOMATED  
docker.io   docker.io/library/node            Node.js is a JavaScript-based platform for s...   9152    [OK]  
docker.io   docker.io/library/mongo-express   Web-based MongoDB admin interface, written w...   757     [OK]  
docker.io   docker.io/library/iojs            io.js is an npm compatible platform original...   135     [OK]  

そして、Dockerと同様に、podman pull <イメージ名>でイメージをローカルに持ってくることができます。

$ podman pull docker.io/library/node  
Trying to pull docker.io/library/node...  
Getting image source signatures  
Copying blob de30e8b35015 done  
Copying blob 419e7ae5bb1e done  
Copying blob 7ec8a0667334 done  
Copying blob 848839e0cd3b done  
~~~~~中略~~~~~~~  
$ podman images  
REPOSITORY                            TAG      IMAGE ID       CREATED       SIZE  
docker.io/library/node                latest   784e696f5060   2 weeks ago   972 MB  

ただ個人的に気になったのが、このイメージはどこに格納されているのだろうということです。
DockerイメージはDocker Hubに格納されていて、docker searchでDocker Hubにあるイメージを検索していることが、公式からリファレンスされています。
ですが、podman searchはどこから探しているのか良くわかりませんでした。
レジストリ名がdocker.ioのものは、Docker Hubから持ってきていると思いますが、registry.redhat.ioと記載されているものは一体どこからとってきているのでしょうか?(RedHat社独自の格納先があるのかな)詳しい方がいましたら教えて下さるとうれしいです。
(追記情報:こちらから参照できるようです。https://catalog.redhat.com/software)

コンテナの起動

podmanもdockerと同様、podman runでコンテナを起動できます。

$ podman run -it --rm node bash  
[email protected]:/# cat /etc/os-release   
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"  
NAME="Debian GNU/Linux"  
VERSION_ID="9"  
VERSION="9 (stretch)"  
VERSION_CODENAME=stretch  
ID=debian  
HOME_URL="https://www.debian.org/"  
SUPPORT_URL="https://www.debian.org/support"  
BUG_REPORT_URL="https://bugs.debian.org/"  

イメージのビルド

buildahコマンドでイメージのビルドを行うことが可能で、Dockerfileもbuildah budコマンドでビルドすることができます。(公式でチュートリアルがありますのでそちらを参照)
ちなみにbuildah imagesでもpodmanでpullしてきたイメージ一覧が表示することができます。

$ podman images  
REPOSITORY                                    TAG      IMAGE ID       CREATED          SIZE  
localhost/johndoe/webserver                   latest   6d36abc8f72f   24 minutes ago   245 MB  
registry.access.redhat.com/ubi8/ubi           latest   a1f8c9699786   5 weeks ago      211 MB  
registry.access.redhat.com/ubi8/ubi-minimal   latest   86c870596572   5 weeks ago      146 MB  

$ buildah images  
REPOSITORY                                    TAG      IMAGE ID       CREATED          SIZE  
localhost/johndoe/webserver                   latest   6d36abc8f72f   24 minutes ago   245 MB  
registry.access.redhat.com/ubi8/ubi           latest   a1f8c9699786   5 weeks ago      211 MB  
registry.access.redhat.com/ubi8/ubi-minimal   latest   86c870596572   5 weeks ago      146 MB  

以下の構成になっているDockerfileに対して、buildahコマンドでビルドしていきます。

# ls  
Dockerfile  myecho  
# cat Dockerfile  
FROM registry.access.redhat.com/ubi8/ubi:latest  
ADD myecho /usr/local/bin  
ENTRYPOINT "/usr/local/bin/myecho"  
# cat myecho  
echo "This container works!"  
# chmod 755 myecho  
# ./myecho  
This container works!  

Dockerfileを作成しましたら、buildah bud -t fedora-httpd .コマンドを実行します。
ファイル内の命令文に従って、イメージがビルドされできあがっていくことが確認できましたら、コンテナを実行してみます。

$ buildah  images  
REPOSITORY                            TAG      IMAGE ID       CREATED          SIZE  
localhost/myecho-container            latest   5098f73df28e   50 seconds ago   211 MB  
$ podman run localhost/myecho-container  
This container works!  

buildahのチュートリアルですと、buildah runでコンテナを起動できるそうですが、失敗しました。

$ buildah run localhost/myecho-container  
command must be specified  
ERRO exit status 1                   

Redhatのページですと、podmanで確認していますので、コンテナの起動は基本的にpodmanで行うのでしょうか?

コンテナ、イメージの削除

コンテナやイメージの削除はdockerと同様、rmオプションで削除することができます。

$ podman ps -a  
CONTAINER ID  IMAGE                                       COMMAND        CREATED        STATUS                         PORTS                 NAMES  
06a79ab009f3  registry.access.redhat.com/ubi8/ubi:latest  /bin/bash      3 minutes ago  Exited (1) About a minute ago                        mystifying_jepsen  
e8a1c6fbc91f  localhost/johndoe/webserver:latest          -D FOREGROUND  29 hours ago   Exited (135) 28 hours ago      0.0.0.0:8080->80/tcp  agitated_morse  
$ podman rm e8a1c6fbc91f  
e8a1c6fbc91f9252f13a34e6a2275078cdadef196e135bb32330784b8d012ad3  
$ podman ps -a  
CONTAINER ID  IMAGE                                       COMMAND        CREATED        STATUS                    PORTS                 NAMES  
06a79ab009f3  registry.access.redhat.com/ubi8/ubi:latest  /bin/bash      4 minutes ago  Exited (1) 3 minutes ago                        mystifying_jepsen  

イメージも同じようにrmiオプションで削除できます。

$ podman images  
REPOSITORY                                    TAG      IMAGE ID       CREATED        SIZE  
localhost/johndoe/webserver                   latest   6d36abc8f72f   29 hours ago   245 MB  
registry.access.redhat.com/ubi8/ubi           latest   a1f8c9699786   5 weeks ago    211 MB  
registry.access.redhat.com/ubi8/ubi-minimal   latest   86c870596572   5 weeks ago    146 MB  
docker.io/library/fedora                      latest   a368cbcfa678   7 weeks ago    189 MB  

$ podman rmi docker.io/library/fedora  
Untagged: docker.io/library/fedora:latest  
Deleted: a368cbcfa6789bc347345f6d19132afe138b62ff5373d2aa5f37120277c90b54  
$ podman rmi 86c870596572  
Untagged: registry.access.redhat.com/ubi8/ubi-minimal:latest  
Deleted: 86c870596572a5b4fe016f4fb7ae9d181e88df6ac91d2cb15250c5e053cfad15  

$ podman images  
REPOSITORY                            TAG      IMAGE ID       CREATED        SIZE  
localhost/johndoe/webserver           latest   6d36abc8f72f   29 hours ago   245 MB  
registry.access.redhat.com/ubi8/ubi   latest   a1f8c9699786   5 weeks ago    211 MB  

Kube pod yaml ファイルの作成

おそらくDokcerにはない機能だと思いますが、podman generateでコンテナ、PodからKubernetesのPodsファイルを作成することができます。
mariadbのコンテナプロセスを実行させて、`podman generate'コマンドでKubernetes yamlを出力させたら、それをファイルに落とし込みます。

$ podman run -d -e MYSQL_USER=user -e MYSQL_PASSWORD=pass \  
>      -e MYSQL_DATABASE=db -p 3306:3306 --name mymariadb rhscl/mariadb-102-rhel7  
Trying to pull registry.access.redhat.com/rhscl/mariadb-102-rhel7...  
Getting image source signatures  
Copying blob 9e7a6dc796f0 done  
Copying blob e7021e0589e9 done  
Copying blob fc5b206e9329 [======================================] 72.7MiB / 72.7MiB  
Copying blob 98b39311ee6a done  
Copying config 5ca39d258f done  
Writing manifest to image destination  
Storing signatures  
8e994c65e7a24febfa57c6cc79c44c7fce37c8593a087d9efb5c45b994169b48  

$ podman ps -a  
CONTAINER ID  IMAGE                                                      COMMAND     CREATED         STATUS             PORTS                   NAMES  
8e994c65e7a2  registry.access.redhat.com/rhscl/mariadb-102-rhel7:latest  run-mysqld  41 seconds ago  Up 40 seconds ago  0.0.0.0:3306->3306/tcp  mymariadb  

$ podman generate kube mymariadb > mymariadbkube.yaml  
# Generation of Kubernetes YAML is still under development!  
#  
# Save the output of this file and use kubectl create -f to import  
# it into Kubernetes.  
#  
# Created with podman-1.9.3  
apiVersion: v1  
kind: Pod  
metadata:  
  creationTimestamp: "2020-08-29T05:37:11Z"  
  labels:  
    app: mymariadb  
  name: mymariadb  
spec:  
  containers:  
  - command:  
    - run-mysqld  
    env:  
    - name: PATH  
      value: /opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin  
    - name: TERM  
      value: xterm  
    - name: HOSTNAME  
    - name: container  
      value: oci  
    - name: STI_SCRIPTS_URL  
      value: image:///usr/libexec/s2i  
    - name: MYSQL_PASSWORD  
      value: pass  
    - name: ENABLED_COLLECTIONS  
      value: rh-mariadb102  
    - name: PROMPT_COMMAND  
      value: . /usr/share/container-scripts/mysql/scl_enable  
    - name: HOME  
      value: /var/lib/mysql  
    - name: ENV  
      value: /usr/share/container-scripts/mysql/scl_enable  
    - name: PLATFORM  
      value: el7  
    - name: STI_SCRIPTS_PATH  
      value: /usr/libexec/s2i  
    - name: MYSQL_USER  
      value: user  
    - name: MYSQL_DATABASE  
      value: db  
    - name: DESCRIPTION  
      value: MariaDB is a multi-user, multi-threaded SQL database server. The container  
        image provides a containerized packaging of the MariaDB mysqld daemon and  
        client application. The mysqld server daemon accepts connections from clients  
        and provides access to content from MariaDB databases on behalf of the clients.  
    - name: SUMMARY  
      value: MariaDB 10.2 SQL database server  
    - name: APP_ROOT  
      value: /opt/app-root  
    - name: MYSQL_PREFIX  
      value: /opt/rh/rh-mariadb102/root/usr  
    - name: APP_DATA  
      value: /opt/app-root/src  
    - name: BASH_ENV  
      value: /usr/share/container-scripts/mysql/scl_enable  
    - name: CONTAINER_SCRIPTS_PATH  
      value: /usr/share/container-scripts/mysql  
    - name: MYSQL_VERSION  
      value: "10.2"  
    image: registry.access.redhat.com/rhscl/mariadb-102-rhel7:latest  
    name: mymariadb  
    ports:  
    - containerPort: 3306  
      hostPort: 3306  
      protocol: TCP  
    resources: {}  
    securityContext:  
      allowPrivilegeEscalation: true  
      capabilities: {}  
      privileged: false  
      readOnlyRootFilesystem: false  
      runAsGroup: 27  
      runAsUser: 27  
      seLinuxOptions: {}  
    workingDir: /opt/app-root/src  
status: {}  

後はこのyamlファイルに対して、kubectlコマンドでPodsを作成することができます。
kubectl create -f mymariadbkube.yaml

コンテナの検証、コピー

コンテナの検証やコピーはskopeoの出番です。
podman inspectでもコンテナの検証を行うことができますが、skopeo inspectはローカル以外のレジストリのコンテナに対して検証することができます。

$ podman images  
REPOSITORY                                           TAG      IMAGE ID       CREATED       SIZE  
registry.access.redhat.com/ubi8/ubi                  latest   a1f8c9699786   5 weeks ago   211 MB  
registry.access.redhat.com/rhscl/mariadb-102-rhel7   latest   5ca39d258f0f   5 weeks ago   453 MB  
$ skopeo inspect docker://docker.io/library/mariadb  
{  
    "Name": "docker.io/library/mariadb",  
    "Digest": "sha256:e694a07f60a2bef2c48de9a2c852d05f8be9c76a8170b16f98809977398db07a",  
    "RepoTags": [  
        "10-bionic",  
        "10-focal",  
        "10-jessie",  
        "10.0-jessie",  
        "10.0-xenial",  
        "10.0.15",  
        "10.0.16",  
        "10.0.17",  
        "10.0.19",  
        "10.0.20",  
        "10.0.21",  
        "10.0.22",  
~~~~~~~~~~~~~~~~~~~~~~  

またレジストリ上に保存されているコンテナイメージをローカルディレクトリにコピーすることもskopeo copyで出来ます。

$ skopeo copy docker://docker.io/library/mariadb dir:.  
$ ls -l  
total 122688  
-rw-r--r--. 1 ec2-user ec2-user 88901239 Aug 29 07:11 02feccc98f4b2946613780337354f5604f8d00667805d84ceb1b61474c7b6b4a  
-rw-r--r--. 1 ec2-user ec2-user     1748 Aug 29 07:10 2323729e927cfe2be88cc2e2caeda6ffcc6d6753664e3b4d3fdd7bbb9ce670ff  
-rw-r--r--. 1 ec2-user ec2-user      848 Aug 29 07:10 46d371e02073acecf750a166495a63358517af793de739a51b680c973fae8fb9  
-rw-r--r--. 1 ec2-user ec2-user 28558017 Aug 29 07:10 54ee1f796a1e650627269605cb8e6a596b77b324e6f0a1e4443dc41def0e58a6  
-rw-r--r--. 1 ec2-user ec2-user     2490 Aug 29 07:10 59c8c535eac7735e2455e58434cdf60675269c0aafff0a084eac0f927d756879  
-rw-r--r--. 1 ec2-user ec2-user      115 Aug 29 07:10 8755f332386c098209a480e5ded3d1e6963e6c790e2e3d5a04b6e42db2cd505c  
-rw-r--r--. 1 ec2-user ec2-user  5487680 Aug 29 07:10 9885993533ab4b717050038a600f3d2b8114e0666f93426a022142acf7bce15f  
-rw-r--r--. 1 ec2-user ec2-user      324 Aug 29 07:11 aa69d1f3a7646b7e1832d206152575807a1ae05c1f585574c9612cdc3858a1ef  
-rw-r--r--. 1 ec2-user ec2-user     9134 Aug 29 07:11 b28df07deb6ccdeb7bf62a98fef8aba2a627c6ae83f8b154c22147ad2a7ce8bc  
-rw-r--r--. 1 ec2-user ec2-user      162 Aug 29 07:10 b66c17bbf772fa072c280b10fe87bc999420042b5fce5b111db38b4fe7c40b49  
-rw-r--r--. 1 ec2-user ec2-user  1323258 Aug 29 07:10 cfe7961792be6d67e4fd29a2c4c58d64c33fb633f2a3e29827e19f68bc64019a  
-rw-r--r--. 1 ec2-user ec2-user     5058 Aug 29 07:11 de57dda5b9ed56abd561b129e0aa60b6e9947d268663874f54528ac5794d6997  
-rw-r--r--. 1 ec2-user ec2-user    32336 Aug 29 07:10 f7bfea53ad120b47cea5488f0b8331e737a97b33003517b0bd05e83925b578f0  
-rw-r--r--. 1 ec2-user ec2-user  1265053 Aug 29 07:10 fd987b19db3c2cfca1c918384d11cc08ee234ae8600c6019f2328ba10e2d4df9  
-rw-r--r--. 1 ec2-user ec2-user     3035 Aug 29 07:11 manifest.json  
-rw-r--r--. 1 ec2-user ec2-user       33 Aug 29 07:10 version  

まとめ

簡単にはなりますが、一通り各種ツールの操作の説明を行いました。
podmanがコンテナ管理を行うことができ、buildahがコンテナイメージの作成を(デーモンを使用せずに)行うことができ、skopeoがコンテナイメージのコピーが行えるという住み分けになるようです。
RedHatさんのリファレンスが丁寧なおかげである程度進められましたが、これをどのようにDockerに替わって扱うかはまだ私の理解が足りてないところがありますので、少しずつ触って理解を深めていこうと思います。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

主にITインフラ関係の勉強結果を残していきたいと思います。 AnsibleやAWSなどを中心に学んだ結果を記事として残していきます。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう