Docker初心者が超絶簡単にDockerfileをまとめてみた その2
前回のブログの続き
前回使わなかった命令の中でよく使うものを紹介したいと思います。
実行環境
前回と一緒。
- ubuntu16.04.1(elementary OS 0.4.1 Loki)
- Docker version 17.12.0-ce
MAINTAINER命令
Dockerfileをチームで共有して開発する場合、誰がこのDockerfileを作ったのかを明示的にしておくようにします。
チームとしてはわかった方が嬉しいですよね。
多分Dockerfileとかコピペするだろうから意味ないと思うけど。
イメージ作成に直接関係があるかといえば、なんとも言えないです。
自分しか触らないのであれば書く必要は無いですね、きっと。
一応書き方。
MAINTAINER <名前> # 例えばこんな感じ MAINTAINER motty93 rdwbocungelt5@gmail.com
必要になったら書き方ググればいいと思います〜まあ無くても大丈夫かな。
WORKDIR命令
ディレクトリ移動の命令。
ディレクトリがなければ、自動的にディレクトリが作成されます。
FROM ubuntu WORKDIR work WORKDIR shop RUN pwd
pwd
の結果は/work/show
です。
主にRUN
・CMD
・ENTRYPOINT
・COPY
・ADD
命令実行時の作業ディレクトリを指定するときに使います。
Rails環境を作った時にも使ったので、別の記事でそれはあげたいと思います。
VOLUME命令
(※1)マウントポイントを作成して外部マウント可能な(※2)ボリュームを作成する命令。
よく、データの永続化で使われます。
てかほとんどそれ。
FROM cenos:latest RUN yum install -y httpd RUN mkdir /var/log/httpd CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] VOLUME /var/log/httpd
こんな感じにすると、apacheのログがVOLUME
で指定されたディレクトリへ溜まっていきます。
詳しくはdocker-compose
でwordpress環境を作成するときに、データの永続化でやってみたいと思います。
※1 マウント:OSに読み書きできるように認識させる
※2 ボリューム:マウントされた領域のこと
ADD命令 & COPY命令
どちらかといえばCOPY命令を使った方がいいらしい。
第一引数に、ホストOS(自分のPC)のディレクトリ/ファイルを、第二引数にコンテナ内のディレクトリを指定します。
こんな感じ。
FROM centos RUN mkdir app # index.htmlはDockerfileと同じディレクトリにあるものと仮定します ADD index.html /app COPY index.html /app
要は、自分のPCのにあるファイルやらディレクトリやらをコンテナ内に持っていくって感じです。
コンテナ起動してから作成すればいいやん!って思った方、いると思います。
前回も書いたんですが、直接コンテナに入って行ったことは、コンテナを停止するとイメージを作成した状態まで戻ってしまいます(場合によります)。
だからイメージを作成する命令(Dockerfile)を書いてあげるんですよ(これで何回かハマりました、Dockerを理解していない証拠・・・)。
ENV命令
環境変数の設定です。
WORKDIR
命令などのディレクトリを指定する命令と一緒に使われることがしばしばです。
FROM centos RUN $DIR /dir WORKDIR /usr/$DIR COPY index.html /usr/$DIR
ここで環境変数を設定しておけば、コンテナを作成しても有効なままです。
設定されている値はdocker inspect
で参照できます。
EXPOSE命令
特定のポートをコンテナが実行された時に読み取るようにdockerに教えてあげる命令です。
問題なのが、この命令があってもホストのブラウザからコンテナにアクセスできないんですよ。
なので、-p
オプションで開くポートを指定する必要はあります。
FROM centos RUN yum install -y httpd EXPOSE 3000 CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
こんな感じで
$ docker run -d -p 3000 イメージ名
で起動できます。
いじょー
とりあえず主要なものだけピックアップして簡単に説明してみました。
初心者の説明なので、全く当てにならないかもしれないですが、参考にできるところだけ見てみてください。
今度はdocker-compose
でいろんな環境を作ってみたいと思います。
お疲れ様でした!