適切なツールが必要な場合は、地元の金物店に行って通路を歩くのに勝るものはありません。手工具の通路を下りて、すべてのドライバー、ハンマー、六角レンチ、巻尺などをチェックするのは素晴らしいことです。あなたが正しい道具を見つけたと思ったとき、思いついたのです。手工具でそれができれば、完璧な動力工具で本当にそれを成し遂げることができます!
少なくともそれは私の妻が私に言っていることです、そしてあなたが見るように、彼女は私たちの家族の中で便利な人です。私が選んだツールは技術ツールです。コンピューター店でビデオカードの通路をください。私は幸せなキャンピングカーです。
最近、Podman Community Meetingでデモを行い、PodmanとBuildah用に開発したより光沢のある新しいコンテナツールのいくつかを紹介しました。 Podman v3.0で多くの大きな発表があったので、これらのツールのいくつかは影が薄くなっているのではないかと思いました。そのデモンストレーションからいくつかの素晴らしいフィードバックを受け取ったので、フォローアップの投稿も役立つかもしれないと感じました。それでは、これらの光沢のある新しいコンテナツールを詳しく見ていきましょう。
コンテナファイルの最初のFROMを変更する
新しい--from
があります buildah bud
のオプション 間もなくPodmanv3.0に組み込まれるコマンド。このオプションを使用すると、最初の、そして最初の FROMに関連付けられた値を置き換えることができます。 Containerfileのステートメント。たとえば、このContainerfileがある場合:
# cat ~/Containerfile.multifrom
FROM fedora as builder
FROM busybox
COPY --from=builder /bin/df /tmp/df_tester
最初の実行を行うことができ、fedora
を使用したことが示されます コンテナ画像。次に、busybox
imageが使用され、最後にfedora
からファイルがコピーされます の/bin/df
busybox
へのディレクトリ 画像の/tmp/df_tester
ディレクトリ。
# buildah bud -t multi -f ~/Containerfile.multifrom .
STEP 1: FROM fedora AS builder
Resolved "fedora" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob 157ab8011454 done
Copying config 9f2a560376 done
Writing manifest to image destination
Storing signatures
--> 9f2a5603764
STEP 2: FROM busybox
Resolved "busybox" as an alias (/root/.config/containers/short-name-aliases.conf)
Getting image source signatures
Copying blob 4c892f00285e done
Copying config 22667f5368 done
Writing manifest to image destination
Storing signatures
STEP 3: COPY --from=builder /bin/df /tmp/df_tester
STEP 4: COMMIT multi
Getting image source signatures
Copying blob 6b245f040973 skipped: already exists
Copying blob 9b68b051b385 done
Copying config 187c956137 done
Writing manifest to image destination
Storing signatures
--> 187c9561378
187c9561378efb043dfd0e8fa9c0afbdc0cf2faeb244e0dd7f2003321feab524
ここで、より現実的な状況を想像してみてください。 FROM ステートメントは、イメージのさまざまなバージョンのさまざまなタグを使用してカスタムビルドされたイメージを指します。特にCI環境では、Dockerfile全体を再作成するのではなく、次回の実行で使用するコンテナーイメージを渡すだけでよいでしょう。それが--from
の仕事です 塗りつぶします。
この例では、同じbud
を実行します コマンドですが、今回は--from alpine:latest
を追加します 。
# buildah bud -t multi -f ~/Containerfile.multifrom --from alpine:latest .
STEP 1: FROM alpine:latest AS builder
Resolved "alpine" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob 4c0d98bf9879 done
Copying config e50c909a8d done
Writing manifest to image destination
Storing signatures
--> e50c909a8df
STEP 2: FROM busybox
STEP 3: COPY --from=builder /bin/df /tmp/df_tester
STEP 4: COMMIT multi
Getting image source signatures
Copying blob 6b245f040973 skipped: already exists
Copying blob b498f23d5c32 done
Copying config d7e92107ed done
Writing manifest to image destination
Storing signatures
--> d7e92107edf
d7e92107edf42f046f6a7faddade4825ef1c2361ae21eb0ac3694871dcdb496c
alpine:latest
コンテナイメージが最初に使用され、現在はbusybox
の後に使用されています 画像が作成されました。アルパインの/bin/df
からのファイル /tmp/df_tester
にコピーされました busybox
のディレクトリ 。最初のFROMの値 Containerfileのステートメントは、--from
で渡した引数に置き換えられました。 オプション。
[次もお読みください:Podmanを使用したルートレスコンテナ]
ビルド中に入力を受け入れる
もう1つの新しいツールは、--stdin
です。 buildah bud
に付随するオプション またはpodman build
(Podman v3.0以降)。このオプションを使用すると、ビルド手順中に実行中のプロセスがキーボード入力を要求した場合、ビルドプロセスは一時停止し、キーボード入力を要求します。
このContainerfileを見てください:
# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done
このContainerfileはubi8
を使用します イメージを作成してから、iputils
をインストールします 。ご想像のとおり、yum
コマンドは、iputils
のインストールを確認するように要求します 。 --stdin
なしで何が起こるか見てみましょう プレイ中のオプション。
# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done
# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done
# buildah bud -t mystdin -f ~/Containerfile.stdin .
STEP 1: FROM ubi8
Resolved "ubi8" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob d9e72d058dc5 done
Copying blob cca21acb641a done
Copying config 3269c37eae done
Writing manifest to image destination
Storing signatures
STEP 2: RUN yum install iputils
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) - BaseOS 2.5 MB/s | 774 kB 00:00
Red Hat Universal Base Image 8 (RPMs) - AppStre 7.6 MB/s | 5.0 MB 00:00
Red Hat Universal Base Image 8 (RPMs) - CodeRea 75 kB/s | 13 kB 00:00
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
iputils x86_64 20180629-2.el8 ubi-8-baseos 149 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 149 k
Installed size: 361 k
Is this ok [y/N]: Operation aborted.
error building at STEP "RUN yum install iputils": error while running runtime: exit status
yum
の場合 インストールされたiputils
、確認を求めたが、応答がなかったため失敗した。次に、--stdin
で何が起こるかを見てみましょう。 プレイ中のオプション。
# buildah bud -t mystdin --stdin -f ~/Containerfile.stdin .
STEP 1: FROM ubi8
STEP 2: RUN yum install iputils
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) - BaseOS 2.8 MB/s | 774 kB 00:00
Red Hat Universal Base Image 8 (RPMs) - AppStre 7.5 MB/s | 5.0 MB 00:00
Red Hat Universal Base Image 8 (RPMs) - CodeRea 86 kB/s | 13 kB 00:00
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
iputils x86_64 20180629-2.el8 ubi-8-baseos 149 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 149 k
Installed size: 361 k
Is this ok [y/N]: y
ブログでは実際に出会うことはありませんが、ビルドプロセスは次の行で停止しますこれで問題ありません[y / N]: yの文字を入力しました ビルドは続行されました(以下の出力を参照)。
Downloading Packages:
iputils-20180629-2.el8.x86_64.rpm 972 kB/s | 149 kB 00:00
--------------------------------------------------------------------------------
Total 952 kB/s | 149 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : iputils-20180629-2.el8.x86_64 1/1
Running scriptlet: iputils-20180629-2.el8.x86_64 1/1
Verifying : iputils-20180629-2.el8.x86_64 1/1
Installed products updated.
Installed:
iputils-20180629-2.el8.x86_64
Complete!
STEP 3: RUN touch /tmp/done
STEP 4: COMMIT mystdin
Getting image source signatures
Copying blob 92538e92de29 skipped: already exists
Copying blob eb7bf34352ca skipped: already exists
Copying blob f9ed641975cb done
Copying config b2742f08a7 done
Writing manifest to image destination
Storing signatures
--> b2742f08a7a
b2742f08a7ae2cb76a2cd0c481f2d2d66b303379d23e5260577ea09476a8a486
これは、特に-y
を追加できるため、もう1つの単純な例です。 yum
への引数 指図。それでも、ビルドプロセス中に実行したい他のコマンドがあり、より重要な入力を簡単に取得したい場合があります。
コンテナイメージのタグを見つける
Podmanにとって比較的新しいこの次のツールは、レジストリ上のコンテナイメージのすべてのタグを表示します。 Buildah、Podman、Skopeoのquay.ioで画像を使用していますが、プロジェクトの1つの特定のバージョンを使用したいのですが、どれがそこにあるのか思い出せないことがあります。 Skopeoに精通している場合は、この分野で非常にうまく機能します。ただし、Skopeoをローカルにインストールしていない場合、または何らかの理由でインストールできない場合は、新しい--list-tags
podman search
のオプション コマンドはあなたのチケットです。
それでは、安定したPodmanイメージがquay.ioに持っているすべてのタグを見てみましょう:
# podman search --list-tags quay.io/podman/stable
NAME TAG
quay.io/podman/stable v1.4.4
quay.io/podman/stable v1.4.2
quay.io/podman/stable v1.5.1
quay.io/podman/stable v1.5.0
quay.io/podman/stable v1.6.2
quay.io/podman/stable auto
quay.io/podman/stable v1.6
quay.io/podman/stable v1.9.0
quay.io/podman/stable v1.9.1
quay.io/podman/stable v2.0.2
quay.io/podman/stable v2.0.6
quay.io/podman/stable v2.1.1
quay.io/podman/stable master
quay.io/podman/stable latest
すばやく、簡単に、そして便利です。
Skopeoコンテナイメージの使用
このツールは一種のying 最後のツールへヤン 。 Skopeoプロジェクトには、コンテナイメージで使用する多くのツールが含まれています。また、画像がレジストリに持っているタグのリストも表示されます。 Skopeoは、レジストリに関する情報を表示したり、レジストリを含むストレージメカニズム間でコンテナイメージをコピーしたり、コンテナレジストリを同期したり、レジストリからイメージを削除したりすることもできます。
ここでは、これらのSkopeoコマンドのそれぞれについて詳しく説明しません。タグを表示するための検索機能を実行します。ひねりは、Podmanを使用してquay.io/skopeo/stable:latest
を実行するだけです。 イメージ。したがって、Skopeoをインストールする必要がなくなり、すべての機能を引き続き使用できます。
それでは、quay.io/podman/stable:latest
のタグをリストしましょう。 もう一度画像を表示しますが、今回はSkopeoコンテナ画像を使用します:
# podman run quay.io/skopeo/stable:latest list-tags docker://quay.io/podman/stable
Trying to pull quay.io/skopeo/stable:latest...
Getting image source signatures
Copying blob 6629904ed3b7 done
Copying blob 2b74ed94761c done
Copying blob 692512e477a1 done
Copying blob 166a3cbbffd1 done
Copying blob b1e90be38d32 done
Copying blob a5dc7d6cfd62 done
Copying blob a3ed95caeb02 done
Copying blob a3ed95caeb02 done
Writing manifest to image destination
Storing signatures
{
"Repository": "quay.io/podman/stable",
"Tags": [
"v1.4.4",
"v1.4.2",
"v1.5.1",
"v1.5.0",
"v1.6.2",
"auto",
"v1.6",
"v1.9.0",
"v1.9.1",
"v2.0.2",
"v2.0.6",
"v2.1.1",
"master",
"latest"
]
}
このコマンドを初めて実行するときは、skopeo
のコストが発生するため、Podmanの同等のコマンドよりも遅くなります。 プルされているコンテナイメージ。その後、速度は2次実行で同等になり、他のSkopeoコマンドも実行できます。
自分でさらに探索してみましょう。ValentinRothbergのコンテナでSkopeoを実行する方法から探索を開始することをお勧めします。 。 Skopeoコンテナの画像は、私のコンテナツールボックスの中で最も光沢のあるツールだと思います。
[コンテナを使い始めますか?この無料コースをチェックしてください。コンテナ化されたアプリケーションのデプロイ:技術的な概要。 ]
すべての光沢のある新しいツール
これで、妻は地元の金物店で彼女の光沢のあるツールをすべて手に入れることができます。新しいコンテナツールは仮想ツールボックスに保存します。これらの新しいコマンドとオプションが、独自のツールボックスで役立つことを願っています。