Rubyと筋肉とギターとわたし

エンジニア二年目の雑魚です。プログラミング・ギター・筋トレのことをメインにブログを書いていきます。

Docker初心者が超絶簡単にDockerfileをまとめてみた その2

前回のブログの続き

smot93516.hatenablog.jp

前回使わなかった命令の中でよく使うものを紹介したいと思います。

実行環境

前回と一緒。

  • 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です。

主にRUNCMDENTRYPOINTCOPYADD命令実行時の作業ディレクトリを指定するときに使います。

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-composewordpress環境を作成するときに、データの永続化でやってみたいと思います。


※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でいろんな環境を作ってみたいと思います。

お疲れ様でした!