Podman - Containerfile
概要
Containerfile
Containerfileとは
Containerfileは、コンテナイメージの作成手順を自動化する設定ファイルである。
コンテナエンジン (Podman、Buildah、Docker) は、Containerfileから指示を読み取り、イメージの作成に必要なステップを自動化する。
イメージを構築を自動化するには、Containerfileというファイルを作成する必要がある。
Containerfileには、コンテナを構築するためのベースになる環境、実行するコマンド、配置するファイル等が記述されている。
Containerfileには、Containerfileを含むコンテキストディレクトリのパスを引数として、buildah bud
、podman 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
を指定する場合、src
はfrom
フィールドのサブパスになる。
- dst / destination / target
- マウント先の指定する。
- ro / read-only
true
(デフォルト) またはfalse
を指定する。
- src / source
- マウントの種類がbindのみの設定
- bind-propagation
shared
、slave
、private
、rshared
、rslave
、rprivate
(デフォルト)
- bind-nonrecursive
- 再帰的なバインドマウントを設定しない。
- デフォルトでは再帰的である。
- from
- src / sourceのルートのステージ名またはイメージ名を指定する。
- デフォルトはビルドコンテキスト。
- rw / read-write
- マウントへの書き込みを許可する。
- bind-propagation
- マウントの種類がtmpfsのみの設定
- tmpfs-size
- tmpfsマウントのサイズ (バイト)。
- Linuxのデフォルトでは無制限である。
- tmpfs-mode
- tmpfsのファイルモードを8進数で指定する。
- Linuxのデフォルトは1777である。
- tmpcopyup
- tmpfsマウントによりシャドウされるパスは、tmpfs自体に再帰的にコピーされる。
- tmpfs-size
- マウントの種類がcacheのみの設定
- id
- 特定のidに対して、個別のキャッシュディレクトリを作成する。
- mode
- 新しいキャッシュディレクトリのファイルモード (8進数) を指定する。
- デフォルトは0755である。
- ro / readonly
- キャッシュの読み取り専用となる。
- uid
- キャッシュディレクトリのuid。
- gid
- キャッシュディレクトリのgid。
- from
- src / sourceのルートのステージ名を指定する。
- デフォルトはホストキャッシュディレクトリである。
- rw / read-write
- マウントへの書き込みを許可する。
- id
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> <引数...>