😽

【環境構築】【Docker】Dockerfile コマンドについて

2021/05/01に公開

Dockerfile コマンドについて

vueプロジェクトをdockerでマウントすることになったので、Docker調査中の備忘録

現在のDockerfile

# ビルド環境
FROM node:lts-alpine as build-stage

# カレントワーキングディレクトリとして 'app' フォルダを指定する
WORKDIR /app

# `package.json` と `package-lock.json` (あれば)を両方コピーする
COPY package*.json ./

# プロジェクトの依存ライブラリをインストールする
RUN npm install

# カレントワーキングディレクトリ(つまり 'app' フォルダ)にプロジェクトのファイルやフォルダをコピーする
COPY . .

# 本番向けに圧縮しながらアプリケーションをビルドする
RUN npm run build

# 本番環境
FROM nginx:stable-alpine as production-stage

COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 3000

CMD ["nginx", "-g", "daemon off;"]

Dockerfileの書式

Dockerfileの書式は基本的に以下

#コメント
命令 引数

基本的なコマンド

FROM , COPY , RUN , CMD , WORKDIR , ENV , USER

FROM

ベースとなるDocker Image を指定
ここで設定したベースイメージにCOPY や RUN のようなコマンドを重ねてDocker Image を作成
する
ここで設定したイメージを「ベースイメージ」と呼ぶ
コメントを除いて FROM を一番始めに書く

FROM node

書き方は3通り

FROM <image>
 or
FROM <image>:<tag>
 or
FROM <image>@<digest>

ENV

今回は設定してない
Docker内で使用する環境変数を定義
NODE_ENV のようなDockerの起動時にデフォルトで定義されていてほしい環境変数を定義すると良い

ENV <key> <value>
 or
ENV <key>=<value> ...
ENV NODE_ENV=production

WORKDIR

WORKDIR 命令は各種命令を実行する際のカレントディレクトリを指定

WORKDIR /path/to/workdir

COPY

Docker内へホストのファイル/ディレクトリをコピーする
COPY は基本的に2つの引数を設定
第1引数はホスト側のディレクトリ(src)、第2引数はDocker側のディレクトリ(dest)

COPY package*.json ./

これは・・?

COPY . .

RUN

FROMで指定したイメージ上(Docker内)で、シェル形式のコマンドを実行

RUN npm install \
  && groupadd app \
  && useradd -g app app \
  && chown -R app:app /scripts

USER

作成したDocker Image の起動時にログインするユーザーを指定
デフォルトは root が設定されているため、セキュリティリスクを回避するために別のユーザーを指定するのが良い(今回はしていない)

USER app

CMD

Docker起動時にデフォルトで実行されるコマンドを定義
Dockerはここで設定したコマンドがフォアグラウンドで実行されている間が生存期間
下記はnginxに対して、

  • gオプションはグローバルなディレクティブ(nginxにおける設定項目)を設定するためにつける
  • "daemon off;"の場合は nginxがdaemonとして起動しないようにする
CMD ["nginx", "-g", "daemon off;"]

参照:dockerでnginxを使用する際に"daemon off"することの意味

よく使用されるコマンド

EXPOSE

※今回エラー出たところ(実際はDockerfileの設定が原因ではなかった)
コンテナ起動時に公開するポートを記述

EXPOSE 3000

参照

https://y-ohgi.com/introduction-docker/2_component/dockerfile/#docker-hub

https://jp.vuejs.org/v2/cookbook/dockerize-vuejs-app.html#現実の例

https://techblog.recochoku.jp/1022

https://qiita.com/hirokihello/items/69df88ba55125c2aed39

https://qiita.com/yuta-38/items/293c6de7760393bc84d7#dockerfileの作成

https://web.plus-idea.net/on/docker-web-server-access-denied/

Discussion