ちょくちょくDockerのイメージを作るためのDokcerfileを書くのですが毎回書き方を忘れるためメモとして残しておきます。
FROM
使うイメージを指定します。
指定方法は 以下の通り
# FROM: <イメージ名>:<タグ名>
FROM node:12
なおlinux/amd64
のようにプラットフォームも指定できます。
COPY
localにあるファイルをイメージの中にコピーします。
自分がdocker化したいファイルやディレクトリを指定するときに使います。
# COPY: <ローカルでコピーするファイル> <コピーしたファイルの配置先>
COPY . /app
RUN
コマンドを実行する時に使います。注意点ですが、RUNで指定されたコマンドはイメージのビルド時に実行されます。
なので、アプリケーションサーバーの起動などのコマンドを実行したら永遠にイメージビルドが終わらなくなります。
# RUN コマンド
RUN apt-get update
CMD
コマンド実行する時に使います。CMDは完成したイメージからコンテナを作成し実行するときにコマンドが走ります。
なので、アプリケーションサーバーの起動など、コンテナが作成されてから即座に動いて欲しいコマンドを記載します。
# CMD ["<コマンド1>","<コマンド2>",...]
CMD ["apt-get", "update"]
WORKDIR
RUN,CMDなどに記載されたコマンドを実行する際に、どのディレクトリで実行するかを指定します。
# WORKDIR 絶対パス
WORLDIR /app
ENV
文字通り環境変数を指定します
# ENV <key>=<value>
ENV NODE_VERSION=12
EXPOSE
指定したポートを開けます。プロトコルを指定することもできます。
# EXPOSE <port> [<port>/<protocol>...]
EXPOSE 3333
EXPOSE 3333/udp
特定ファイルをビルド対象から外す
.dockerignoreというファイルを作れば、ビルドする際にそのファイルを除外できます。
例えば、npmにあるnode_modulesなどをCOPYに含めておくと、ローカルのOSとイメージのOSが違う場合エラーになる場合があります。
このような場合に、特定のファイルやディレクトリを除外するときに使います。
# comment
*/temp*
*/*/temp*
temp?
docker-composeのイメージ指定
本筋からそれますが、docker-composeでイメージを指定する際に、dockerfileを指定できて便利なので記載しておきます
version: "2.4"
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
contextでディレクトリを指定し、dockerfileでdockerfileのファイル名を指定します。