LoginSignup
0
0

More than 1 year has passed since last update.

Dockerfileで必須の7つのコマンド

Last updated at Posted at 2023-03-21

概要

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"]
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0