概要
Dockerfileに必須の7つのコマンドについて解説します。
Node.jsを動かすサンプル
FROM node
ENV NODE_ENV=production
WORKDIR /scripts
COPY . .
RUN npm install \
&& groupadd app \
&& useradd -g app -m app \
&& mv /root/.config /home/app/ \
&& chown -R app:app /scripts /home/app/.config
USER app
CMD ["npm", "start"]
7つの基本コマンド
1. FROM
ベースとなるimageの指定を行う。
タグなどを指定して、バージョンを固定したりも出来ます。
FROM <IMAGE_NAME>
FROM <IMAGE_NAME>:<TAG_NAME>
FROM <IMAME_NAME>@<DIGEST>
#記述例
FROM node:12
2. ENV
Docker内で使用する環境変数の指定を行う。
Dockerの起動時にデフォルトで定義されていてほしい環境変数を定義する
ENV <KEY> <VALUE>
ENV <KEY>=<VALUE>
#記述例
ENV NODE_ENV production
ENV NODE_ENV=production
3. WORKDIR
Dockerfileに書かれた命令を実行するための作業用ディレクトリを指定する。
このとき存在しないディレクトリを指定すると自動的にディレクトリが作成される。
*「/」を指定すると
最悪の場合既存のディレクトリを上書きしてしまいコンテナが起動しなくなる可能性があるので注意
WORKDIR /scripts
4. COPY
Docker内へホストのファイル/ディレクトリをコピーする。
2つの引数を設定する。
1つ目はホスト側のディレクトリ。
2つ目はDocker側のディレクトリ。
ホスト側のディレクトリは、「docker build .」で指定したディレクトリになる。
「.」なのでカレントディレクトリ。
COPY <HOST_FILE_PATH> <DOCKER_IMAGE_FILE_PATH>
COPY ["<HOST_FILE_PATH>", "<DOCKER_IAMGE_FILE_PATH>"]
#記述例
COPY test.html /docker_dir/
COPY ["test.html", "/docker_dir/"]
COPY . .
5. RUN
Docker内でコマンドを実行する。
・ライブラリのインストール
・環境構築用のコマンドの実行
など
書き方もいろいろある。
RUN <COMMAND_FOR_IMAGE_CREATION>
#記述例(Shell形式)
RUN apt-get install -y nginx
#記述例(Exec形式)
RUN ["/bin/bash", "-c", "apt-get install -y nginx"]
6. USER
イメージ実行やDockerfileの以下の命令を実行するためのユーザーを指定する。
デフォルトは root
USER <USER_NAME/UID>
#記述例
USER app
7. CMD
デーモンの実行。
イメージをもとに生成したコンテナ内でコマンドを実行する際に記載。
RUNと一緒で書き方がいろいろある。
CMD <COMMAND_EXECUTED_AFTER_IMAGE_CREATION>
#記述例(Shell形式)
CMD nginx -g 'daemon off;'
#記述例(Exec形式)
CMD ["nginx", "-g", "daemon off;"]
CMD ["npm", "start"]
* Dockerはここで設定したコマンドがフォアグラウンドで実行されている間が生存期間になる
そのため、プロセスの処理が走っている間はフォアグラウンドで実行するように記述する
(バックグラウンドで起動するとDockerが終了してしまう)。
CMD ["npm", "run", "start"]