この章の題材:Node.js アプリ向けの最小 Dockerfile(8 つの命令)
FROM node:20-alpineWORKDIR /appCOPY package.json package-lock.json ./RUN npm ciCOPY . .ENV NODE_ENV=productionEXPOSE 3000CMD ["node", "server.js"]
$ cd src/5/node-app$ docker build -t chapter5-node-app .$ docker run --rm -d -p 3000:3000 --name ch5-app chapter5-node-app
pull(既製)と build(自作)— 2 つの経路が手元のイメージ一覧に合流する
$ docker build -t chapter5-node-app .-t <名前>出来上がるイメージに付けるタグ(名前).(末尾)ビルドコンテキスト= Docker に送るディレクトリの指定$ docker exec -it ch5-app shFROM node:20-alpine — コロンで分解するイメージ名とタグの読み方
/app # node --version/app # cat /etc/os-release | head -2
WORKDIR /app/app # pwdCOPY package.json package-lock.json ./COPY . .
2 段構成と一括構成 — コード変更時の再ビルド速度の違い
COPY . . の取り込み対象から外したいパスを列挙するファイル(書き方は .gitignore と同じ)
# 5-1 で扱う `.dockerignore` の例。# `COPY . .` でビルドコンテキストから除外したいパスを列挙する。# 書き方は `.gitignore` と同じ。node_modules.git
/app # ls -lRUN npm ciCMD ["node", "server.js"]/app # ps起動コマンドは ENTRYPOINT + CMD の連結。docker run の追加引数は CMD だけを差し替える
EXPOSE 3000ENV NODE_ENV=production
/app # printenv NODE_ENV8 つの命令を「いつ動くか」で 3 分類する
リスト形式はプロセスが直接 PID 1 になり、シグナルが正しく届く
/app # exit$ docker stop ch5-app