Podman - Containerfile

提供:MochiuWiki : SUSE, EC, PCB
2024年8月6日 (火) 10:49時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == <b><br> == Containerfile == ==== Containerfileとは ==== Containerfileは、コンテナイメージの作成手順を自動化する設定ファイルである。<br> コンテナエンジン (Podman、Buildah、Docker) は、Containerfileから指示を読み取り、イメージの作成に必要なステップを自動化する。<br> イメージを構築を自動化するには、Containerfileというファイルを作成する必要がある…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要


Containerfile

Containerfileとは

Containerfileは、コンテナイメージの作成手順を自動化する設定ファイルである。
コンテナエンジン (Podman、Buildah、Docker) は、Containerfileから指示を読み取り、イメージの作成に必要なステップを自動化する。
イメージを構築を自動化するには、Containerfileというファイルを作成する必要がある。

Containerfileには、コンテナを構築するためのベースになる環境、実行するコマンド、配置するファイル等が記述されている。
Containerfileには、Containerfileを含むコンテキストディレクトリのパスを引数として、buildah budpodman buildコマンドを呼び出す。
PodmanおよびBuildahのデフォルトはContainerfileであり、Dockerfileにフォールバックする。

Containerfileは、Dockerfileと同じシンタックスをサポートしている。

Containerfileで作成したPodmanイメージをQuay.ioにアップロードすることも可能である。

イメージの構築

podman build -t <任意のリポジトリ名>/<任意のタグ名> .

# Containerfileのパスを指定する場合
podman build -t <任意のリポジトリ名>/<任意のタグ名> -f <Containerfileのパス>


シンタックス

FROM
FROM <pullするイメージ名>:<タグ名>

# 別名を指定する場合
FROM <pullするイメージ名>:<タグ名> AS <別名>

# 
FROM <pullするイメージ名>@<ダイジェスト名>

# 別名を指定する場合
FROM <pullするイメージ名>@<ダイジェスト名> AS <別名>


MAINTAINER

MAINTAINERは生成されたイメージの作者フィールドを設定する。
ユーザにサポートのためのEメールもしくはURLを提供する場合に使用する。

MAINTAINER <作者名> <メールアドレス>


USER

コンテナ内のユーザを指定する。

# ユーザをrootにする
USER root


WORKDIR

作業ディレクトリを追加する。

WORKDIR <作業ディレクトリパス>


ARG

Containerfile内で使用する変数を定義する。

# 変数を定義する場合
ARG <変数名>

# 変数を定義して値を代入する場合
ARG <変数名>=<値> 


ENV

環境変数を定義する。

ENV <環境変数名> <値>
# または
ENV <環境変数名>=<値>


ADD

イメージにファイルやディレクトリを追加する。

# ファイルまたはディレクトリを1つ追加する場合
ADD <ホスト側のファイルまたはディレクトリのパス> <コンテナ側のファイルまたはディレクトリのパス>

# ファイルまたはディレクトリを複数追加する場合
ADD <ホスト側のファイルまたはディレクトリのパス 1> <ホスト側のファイルまたはディレクトリのパス 2> ... <コンテナ側のファイルまたはディレクトリのパス>

# []で囲むこともできる
ADD ["<ホスト側のファイルまたはディレクトリのパス 1>", "<ホスト側のファイルまたはディレクトリのパス 2>" ... "<コンテナ側のファイルまたはディレクトリのパス>"] 


COPY

ホスト側のファイルおよびディレクトリをイメージに複製する。

# ファイルまたはディレクトリを1つ追加する場合
COPY <ホスト側のファイルまたはディレクトリのパス> <コンテナ側のファイルまたはディレクトリのパス>

# ファイルまたはディレクトリを複数追加する場合
COPY <ホスト側のファイルまたはディレクトリのパス 1> <ホスト側のファイルまたはディレクトリのパス 2> ... <コンテナ側のファイルまたはディレクトリのパス>

# []で囲むこともできる
COPY ["<ホスト側のファイルまたはディレクトリのパス 1>", "<ホスト側のファイルまたはディレクトリのパス 2>" ... "<コンテナ側のファイルまたはディレクトリのパス>"]


EXPOSE

コンテナ実行時にリッスンするポート番号を指定する。

# ポートを1つ開放する場合
EXPOSE <ポート番号>

# ポートを複数開放する場合
EXPOSE <ポート番号 1> <ポート番号 2> ...


ENTRYPOINT

コンテナの起動時に実行する処理を指定する。

# 実行可能コマンドを指定する
# 実行可能コマンドは、フルパスを指定しなければならない。
ENTRYPOINT ["<実行可能コマンド>", "<引数 1>", "<引数 2>", "<引数...>"]

# シェルで実行するコマンドを指定する : /bin/sh -c "<コマンド> <引数 1> <引数 2> <引数...>" 
ENTRYPOINT <コマンド> <引数 1> <引数 2> <引数...>


RUN

RUNには2つのシンタックスがある。

# 実行可能コマンドを指定する
# 実行可能コマンドは、フルパスを指定しなければならない。
RUN ["<実行可能コマンド>", "<引数 1>", "<引数 2>", "<引数...>"]

# シェルで実行するコマンドを指定する : /bin/sh -c "<コマンド> <引数 1> <引数 2> <引数...>" 
RUN <コマンド> <引数 1> <引数 2> <引数...>


RUN mounts

コンテナにファイルシステムをマウントする。
現在サポートされているマウントの種類は、bind、cache、secret、tmpfsである。

  • RUN mountsの全体のオプション
    • src / source
      ボリュームおよびbindのマウント元のパスを指定する。 (bindでは必須である)
      fromを指定する場合、srcfromフィールドのサブパスになる。
    • dst / destination / target
      マウント先の指定する。
    • ro / read-only
      true (デフォルト) または falseを指定する。

  • マウントの種類がbindのみの設定
    • bind-propagation
      sharedslaveprivatersharedrslaverprivate (デフォルト)
    • bind-nonrecursive
      再帰的なバインドマウントを設定しない。
      デフォルトでは再帰的である。
    • from
      src / sourceのルートのステージ名またはイメージ名を指定する。
      デフォルトはビルドコンテキスト。
    • rw / read-write
      マウントへの書き込みを許可する。

  • マウントの種類がtmpfsのみの設定
    • tmpfs-size
      tmpfsマウントのサイズ (バイト)。
      Linuxのデフォルトでは無制限である。
    • tmpfs-mode
      tmpfsのファイルモードを8進数で指定する。
      Linuxのデフォルトは1777である。
    • tmpcopyup
      tmpfsマウントによりシャドウされるパスは、tmpfs自体に再帰的にコピーされる。

  • マウントの種類がcacheのみの設定
    • id
      特定のidに対して、個別のキャッシュディレクトリを作成する。
    • mode
      新しいキャッシュディレクトリのファイルモード (8進数) を指定する。
      デフォルトは0755である。
    • ro / readonly
      キャッシュの読み取り専用となる。
    • uid
      キャッシュディレクトリのuid。
    • gid
      キャッシュディレクトリのgid。
    • from
      src / sourceのルートのステージ名を指定する。
      デフォルトはホストキャッシュディレクトリである。
    • rw / read-write
      マウントへの書き込みを許可する。


RUN mounts type=<マウントの種類>,<ホスト側のパス>:<コンテナ側のパス>

# マウントの種類はbind、ホスト側のパスは/tmp/sample1、コンテナ側のパスは/tmp/sample2の場合
RUN mounts type=bind,source=/tmp/sample1,destination=/tmp/sample2

# マウントの種類はtmpfs、サイズは512[MB]、コンテナ側のパスは/tmp/directoryの場合
RUN mounts type=tmpfs,tmpfs-size=512M,destination=/tmp/directory

# マウントの種類はsecret、IDはmysecret、コンテナ側のsecretのパスは/tmp/secret/mysecretの場合
RUN mounts type=secret,id=mysecret cat /run/secrets/mysecret


CMD

ContainerfileのCMDは1つのみ指定できる。
複数のCMDが記述されている場合は、最後のCMDのみが有効になる。

CMDには3つのシンタックスがある。

# 実行可能コマンドを指定する
# 実行可能コマンドは、フルパスを指定しなければならない。
# 例: CMD ["/usr/bin/wc","--help"]
CMD ["<実行可能コマンド>", "<引数 1>", "<引数 2>", "<引数...>"]

# 実行可能ファイルを省略する場合は、ENTRYPOINTにデフォルトの引数を指定する
CMD ["<引数 1>", "<引数 2>", "<引数...>"]

# シェルで実行するコマンドを指定する : /bin/sh -c "<コマンド> <引数 1> <引数 2> <引数...>"
# 例: CMD echo "This is a test." | wc -
CMD <コマンド> <引数 1> <引数 2> <引数...>