Open3

Docker

shhkrshhkr

Dockerfile

FROM

  • ベースとなるイメージを指定
  • Dockerfileの最初に記述
FROM node:16
FROM node:16 AS local

https://docs.docker.jp/engine/reference/builder.html#from

RUN

  • イメージをビルドする際のコマンド
RUN npm install
  • シェル形式で \ (バックスラッシュ)を使うと、 RUN 命令を次の行に続けれる
RUN npm install \
npm run build

shell形式

  • コマンドがシェルによって解釈され、そのシェルがコマンドを実行
  • なので、コマンドがシェルの環境変数やエイリアスなどの影響を受ける
RUN npm install

exec形式

  • コマンドがシェルによって解釈されることはなく、そのまま実行
  • なので、コマンドがシェルの環境変数やエイリアスに影響を受けることはない
RUN ["npm", "install"]

https://zenn.dev/hisamitsu/articles/8388214d4ab0f3

https://docs.docker.jp/engine/reference/builder.html#run

CMD

  • コンテナ実行時の何を行うかを指定する
  • CMDはDockerfile中で1度しか使えない
  • 複数のCMD命令があれば、最後のCMDのみ有効
CMD [ "npm", "start" ]

https://docs.docker.jp/engine/reference/builder.html#cmd

ENTRYPOINT

  • CMDを使ってENTRYPOINTの機能を拡張し、イメージの柔軟性を高めることができる
  • ENTRYPOINTでデフォルトコマンドを設定し、CMDでデフォルト引数を設定することができる
ENTRYPOINT ["python", "app.py"]
CMD ["--help"]
  • 上記はコマンドライン引数を指定せずにDockerコンテナを起動すると、python app.py --helpがデフォルトで実行される
  • しかし、コンテナの起動時に引数(docker run <image> --version など)を指定すると、デフォルトのCMD引数が置き換えられ、python app.py --version が実行される
  • この方法によって、コンテナを実行する際の柔軟性が高まる

https://docs.docker.jp/engine/reference/builder.html#entrypoint

COPY

  • 指定したファイルやディレクトリをコンテナ内にコピー
# index.htmlをappディレクトリ直下にコピーする
COPY index.html app/
# indexという名前のファイルをappディレクトリ直下にコピーする
COPY index.*  app/

https://docs.docker.jp/engine/reference/builder.html#copy

WORKDIR

  • RUN, CMD, ENTRYPOINT, COPY, ADDを実行するディレクトリを指定
  • WORKDIRは何度でも使用可能
  • ENVで設定済みの環境変数を展開できる
WORKDIR /app

# pwdの出力は"/aaa/bbb/ccc"になる
WORKDIR /aaa
WORKDIR bbb
WORKDIR ccc
RUN pwd

# pwdの出力は"/path/$DIRNAME"になる
ENV DIRPATH /path
WORKDIR $DIRPATH/$DIRNAME

https://docs.docker.jp/engine/reference/builder.html#workdir