Dockerfileで指定できるおもな命令。
命令 | 内容 |
---|---|
FROM | ベースイメージ指定 |
COPY | コンテナ内のファイルシステムにコピー |
RUN | イメージをビルドするときに実行するコマンドを指定 |
CMD | コンテナ起動時に実行 |
ENTRYPOINT | コンテナ起動時に実行 |
EXPOSE | ポート番号 |
ENV | 環境変数 |
ARG | 「ARG 命令は変数を定義して、ビルド時にその値を受け渡します。」 ref. https://docs.docker.jp/engine/reference/builder.html?highlight=arg#arg |
$ docker run
のときに実行)以下によって意味がことなる
ENTRYPOINT
命令なしENTRYPOINT
命令ありコンテナの実行時のデフォルト処理を設定することです。 この処理設定においては、実行モジュールを含める場合と、実行モジュールを省略する場合があります。 省略する場合は ENTRYPOINT 命令を合わせて指定する必要があります。
ENTRYPOINT
がない場合は実行モジュールを含める。
ENTRYPOINT
命令はなくCMD
命令のみ。
# Dockerfile
# ...
# ...
# デフォルト処理
CMD ["httpd", "DFOREGROUND"]
実際はシェルスクリプトをCOPYでコンテナにコピーして、実行している。
# https://github.com/docker-library/httpd/blob/077141ee37fca63972292c562ec0f632d0f831b1/2.4/Dockerfile
# Dockerfile
# ...
# ...
COPY httpd-foreground /usr/local/bin/
EXPOSE 80
CMD ["httpd-foreground"]
#!/bin/sh
set -e
# Apache gets grumpy about PID files pre-existing
rm -f /usr/local/apache2/logs/httpd.pid
exec httpd -DFOREGROUND "$@"
※ 位置パラメーター"$@"
はすべてのパラメーターを表す。
https://fumiyas.github.io/2016/12/15/positional-parameters.sh-advent-calendar.html
実行モジュールを省略する。CMD
命令に記載した値は、ENTRYPOINT
命令の引数になる。
ENTRYPOINT
命令があるときCMD
命令はENTRYPOINT
命令の追加の引数として使用docker run
で引数が指定された場合はCMD
命令は上書きされるENTRYPOINT
を指定した場合、docker run
では--entrypoint
で上書きしない限り任意のプロセスは指定できないdocker run
に対するコマンドライン引数は、exec 形式の ENTRYPOINT の指定要素の後に付け加えられます。 そして CMD において指定された引数は上書きされます。 これはつまり、引数をエントリーポイントに受け渡すことができるということです。 たとえば docker run -d としたときの -d は、引数としてエントリーポイントに渡されます。 docker run --entrypoint を利用すれば ENTRYPOINT の内容を上書きすることができます。 https://docs.docker.jp/engine/reference/builder.html#entrypoint
php:7.4.6を調査。
$ docker pull php:7.4.6
$ docker inspect php:7.4.6
結果抜粋.
"Cmd": [
"php",
"-a"
],
"ArgsEscaped": true,
"Image": "sha256:79cc1ba190b4dd60b8acf8b5952def4ff458a6ddf50aa2ea83f887cf05067ec0",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"docker-php-entrypoint"
],
"OnBuild": null,
"Labels": null
コンテナにログインしてdocker-php-entrypoint
のパスを確認。
$ docker run -it php:7.4.6 /bin/bash
root@b21ffc5dc54d:/# find . -name docker-php-entrypoint
./usr/local/bin/docker-php-entrypoint
docker-php-entrypoint
の内容を確認。
root@b21ffc5dc54d:/# cat /usr/local/bin/docker-php-entrypoint
#!/bin/sh
set -e
# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
set -- php "$@"
fi
exec "$@"
※ 位置パラメーター"$@"
はすべてのパラメーターを表す。
https://fumiyas.github.io/2016/12/15/positional-parameters.sh-advent-calendar.html