ざっくり概要として、CMDとENTRYPOINT どちらを使うかによって docker run CONTAINER_ID <command>
した際の<command>
が及ぼす影響 が変わる
CMD, ENTRYPOINTで オプションなしのコマンド を記述した場合
FROM centos
MAINTAINER hoge
CMD ls
コマンド引数指定なし => CMDで指定したコマンドを実行するだけ
% docker run --rm IMAGE_ID
bin
boot
dev
etc
home
:
コマンド引数指定あり => 引数で指定したコマンドが実行される , CMDで指定したコマンドは無視(公式document的に言うと上書き)される
% docker run --rm IMAGE_ID ls -l
dr-xr-xr-x 2 root root 4096 Apr 1 2013 bin
dr-xr-xr-x 2 root root 4096 Sep 23 2011 boot
drwxr-xr-x 5 root root 4096 May 2 01:57 dev
drwxr-xr-x 43 root root 4096 May 2 01:57 etc
drwxr-xr-x 2 root root 4096 Sep 23 2011 home
:
FROM centos
MAINTAINER hoge
ENTRYPOINT ls
コマンド引数指定なし => CMDで指定したコマンドを実行するだけ
% docker run --rm IMAGE_ID
bin
boot
dev
etc
home
:
コマンド引数指定あり -> ENTRYPOINTのコマンドがそのまま実行される , コマンド引数が無視される
% docker run --rm IMAGE_ID ls -l
bin
boot
dev
etc
home
:
CMD, ENTRYPOINTで オプションありのコマンド を記述した場合の挙動
from centos
maintainer hoge
CMD ls -l
コマンド引数指定なし => CMDで指定したコマンドを実行するだけ
% docker run --rm IMAGE_ID
dr-xr-xr-x 2 root root 4096 Apr 1 2013 bin
dr-xr-xr-x 2 root root 4096 Sep 23 2011 boot
drwxr-xr-x 5 root root 4096 May 2 01:57 dev
drwxr-xr-x 43 root root 4096 May 2 01:57 etc
drwxr-xr-x 2 root root 4096 Sep 23 2011 home
:
コマンド引数指定あり -> 引数で指定したコマンド(とオプション)が実行される , CMDで指定したコマンドは無視(公式document的に言うと上書き)される
% docker run --rm IMAGE_ID ls -lh
dr-xr-xr-x 2 root root 4.0K Apr 12 01:10 bin
drwxr-xr-x 4 root root 80K May 2 06:30 dev
drwxr-xr-x 40 root root 4.0K May 2 06:30 etc
drwxr-xr-x 2 root root 4.0K Sep 23 2011 home
dr-xr-xr-x 2 root root 4096 Apr 1 2013 bin
dr-xr-xr-x 2 root root 4096 Sep 23 2011 boot
drwxr-xr-x 5 root root 4096 May 2 01:57 dev
drwxr-xr-x 43 root root 4096 May 2 01:57 etc
drwxr-xr-x 2 root root 4096 Sep 23 2011 home
:
FROM centos
MAINTAINER hoge
ENTRYPOINT ls -l
コマンド引数指定なし => CMDで指定したコマンドを実行するだけ
% docker run --rm IMAGE_ID
dr-xr-xr-x 2 root root 4096 Apr 12 01:10 bin
drwxr-xr-x 4 root root 81920 May 2 06:37 dev
drwxr-xr-x 40 root root 4096 May 2 06:37 etc
drwxr-xr-x 2 root root 4096 Sep 23 2011 home
:
コマンド引数指定あり -> ENTRYPOINTのコマンドがそのまま実行される , コマンド引数が無視される
% docker run --rm IMAGE_ID ls -lh
dr-xr-xr-x 2 root root 4096 Apr 12 01:10 bin
drwxr-xr-x 4 root root 81920 May 2 06:37 dev
drwxr-xr-x 40 root root 4096 May 2 06:37 etc
drwxr-xr-x 2 root root 4096 Sep 23 2011 home
:
CMD, ENTRYPOINTで ["command", "paramN"]
形式による引数付きコマンド を記述した場合の挙動
from centos
maintainer hoge
CMD ["ls", "-l"]
コマンド引数指定なし => CMDで指定したコマンドを実行するだけ
% docker run --rm IMAGE_ID
dr-xr-xr-x 2 root root 4096 Apr 1 2013 bin
dr-xr-xr-x 2 root root 4096 Sep 23 2011 boot
drwxr-xr-x 5 root root 4096 May 2 01:57 dev
drwxr-xr-x 43 root root 4096 May 2 01:57 etc
drwxr-xr-x 2 root root 4096 Sep 23 2011 home
:
コマンド引数指定あり -> 引数で指定したコマンド(とオプション)が実行される , CMDで指定したコマンドは無視(公式document的に言うと上書き)される
% docker run --rm IMAGE_ID ls -lh
dr-xr-xr-x 2 root root 4.0K Apr 12 01:10 bin
drwxr-xr-x 4 root root 80K May 2 06:44 dev
drwxr-xr-x 40 root root 4.0K May 2 06:44 etc
drwxr-xr-x 2 root root 4.0K Sep 23 2011 home
:
from centos
maintainer hoge
ENTRYPOINT ["ls", "-l"]
コマンド引数指定なし => CMDで指定したコマンドを実行するだけ
% docker run --rm IMAGE_ID
dr-xr-xr-x 2 root root 4096 Apr 12 01:10 bin
drwxr-xr-x 4 root root 81920 May 2 06:49 dev
drwxr-xr-x 40 root root 4096 May 2 06:49 etc
drwxr-xr-x 2 root root 4096 Sep 23 2011 home
:
コマンド引数指定あり -> エラーになる , ENTRYPOINTのparam部分が、コマンド引数で上書きされる
% docker run --rm IMAGE_ID ls -lh # ENTRYPOINTのparam部分 "-l" が コマンド引数 "ls" で上書きされる
ls: cannot access ls: No such file or directory
:
% docker run --rm IMAGE_ID ps
ls: cannot access ps: No such file or directory
:
paramの部分だけ上書きされるなら、lsコマンドの引数として正しい値(オプション)を指定したらどうなるか? -> オプションとして認識された
% docker run --rm IMAGE_ID -lh
dr-xr-xr-x 2 root root 4.0K Apr 12 01:10 bin
drwxr-xr-x 4 root root 80K May 2 07:57 dev
drwxr-xr-x 40 root root 4.0K May 2 07:57 etc
drwxr-xr-x 2 root root 4.0K Sep 23 2011 home
: