オライリーのDocker本を読んだり色々な記事を読んだりしたので自分なりにまとめる(Dockerfileについて)
Docker経験値0だった私も何冊か本を読んで実際にDockerfileを見たりいじったりしてみてECSに試行錯誤でデプロイしてみたりして、ようやく少しずつ慣れてきた感が出てきました。 しかしまだまだ「バッチリできます!」というには力不足間は否めなく…いやそういう話じゃない。 折角本を読んだりネット上の先輩たちの記事を読んだりして色々覚えたのだから、それをまとめておきたいと思います。 実はもうすでに 日本語での公式なDockerfileベストプラクティス が存在するので、意味がないといえばたぶん意味はないのですが、アウトプットをして学習にいったんの区切りをつけるという意味で自己満足も兼ねて書きたいと思います。 Dockerfileについての基本的なこと 1コンテナ1プロセスを起動するつもりでDockerfileを書く 1プロセスとはつまりnginxとmod-phpによるPHPアプリケーションなら2つのコンテナを用意するということ コマンドは大文字で書く( RUN, COPY, EXPOSE 等) #によるコメントアウトが使える FROM 文は先頭に1行だけ書く CMD 文は末尾に1行だけ書く Dockerfile についてやるべきこと・意識すべきこと DockerHub のイメージは「公式」とわかるもの以外むやみやたらに使わずできるだけ Dockerfile を読んでから利用を判断する DockerHub は Docker イメージの共有サイトだが、有象無象のコンテナイメージが登録されており、(その意図はなくても)セキュリティ的に危険なコンテナが存在する可能性は十分にある。 DockerHubが公式に提供しているNginx など、ソフトウェアベンダ(団体)の公式イメージ以外は基本的に利用しないことで基本的なセキュリティある程度確保することができる。 構文にはshell形式とexec形式が利用できるものがあるが基本的にexec形式を利用する 例えばCMDコマンドはshell形式とexec形式を利用することができる。 shell形式は指定された文字列を /bin/sh -c に渡すことでコマンドを実行する。 その場合に、exec形式だと/bin/shに対する攻撃のような文字列の実行を回避することができる。