質問: 【質問1】:CMDに関して CMDはDockerfile内に1行だけ記述でき、run実行時にそのコマンドを実行してくれるという認識であっていますか? 【質問2】CMDに関して 下記のDockerfileを作成し、docker runしました。 CMDに記載しているコマンドが実行されません。なぜでしょうか? Nginxの起動の方は、デーモンの関係で難しいらしいので、チュートリアルとして、CMD echo "test" > /test.txtのみを記述したDockerfileも実行しましたが、test.txtは作成されませんでした。 ``` docker run --privileged -it -d --name nginx1 --net web -p 127.0.0.1:8880:80 -v C:\Users\root\Desktop\nginx1:/home/test nginx1 /sbin/init ``` ``` # 使用するimage FROM centos # 各種インストール RUN yum -y update RUN yum -y install kernel-devel gcc https://centos7.iuscommunity.org/ius-release.rpm RUN yum -y install nginx # runした時実行 CMD ["nginx", "-g", "daemon off;"] #CMD echo "test" > /test.txt # portのバインド EXPOSE 8880 ``` 【質問3】EXPOSEに関して 質問2で示したDockerfileで、EXPOSEを記述する意味ってありますか? docker runコマンドの方に、-p 127.0.0.1:8880:80としているので、コンテナ作成時に問題なくバインドされると思うのですが、、、 【質問4】VOLUMEに関して 質問3と同じ理由で、Dockerfile内にVOLUMEの記述をする必要はありますか? docker runコマンドの方に、-v C:\Users\root\Desktop\nginx1:/home/testとしているので、コンテナ作成時に問題なくバインドされると思うのですが、、、
回答: 基本はドキュメントをご覧いただくと良いのですが、 https://docs.docker.com/engine/reference/builder/ http://docs.docker.jp/engine/reference/builder.html#cmd > > CMDはDockerfile内に1行だけ記述でき、run実行時にそのコマンドを実行してくれるという認識であっていますか? > > > Dockerfile で CMD 命令を一度だけ指定できます。複数の CMD がある場合、最も後ろの CMD のみ有効です。 > > CMD echo "test" > /test.txtのみを記述したDockerfileも実行しましたが、test.txtは作成されませんでした。 > > > CMD の主な目的は、 コンテナ実行時のデフォルトを提供します 。 貴殿がコマンド入力した際に、実行コマンドを指定しているので、デフォルト動作はしないということです。 > > 質問2で示したDockerfileで、EXPOSEを記述する意味ってありますか? > > > It functions as a type of documentation between the person who builds the image and the person who runs the container, about which ports are intended to be published. 仰ることはごもっともなのですが、まぁ、ドキュメントとして使ってねとのこと。 > > 質問3と同じ理由で、Dockerfile内にVOLUMEの記述をする必要はありますか? > > > こちらも上記と同じかと思いますが、ドキュメントに明記はされていませんね。 今となっては、composeでやっちゃうので、DockerFileで環境周りを記載することもあまり無いかもですね。