【.dockerignore】dockerイメージビルド時に、特定のフォルダをコピー対象から外す方法メモ
はじめに
以下の記事にて、Dockerfileに各種命令を記載してDockerイメージをビルドした。 tomiko0404.hatenablog.com
このやり方では、 COPY
コマンドで指定したフォルダ配下すべてのファイルがdockerイメージ作成時にコピーされる。
今回はコピーしたくないフォルダがある時に、.dockerignore
ファイルを作成してコピー対象から除外する方法を実践する。
前提
フォルダ構成は以下。Dockerfile上にCOPY ./app /app
の記載があるため、./app
以下のフォルダがすべてコピーされてしまうが、node_modules
フォルダはコピーしたくない。
※ECSでNode.jsを動かすのであればnode_modulesはこのフォルダに不要だが、お試しでローカルでNode.jsを起動したかったためインストールしてしまった。
React-practice-6 ├── Dockerfile └── app ├── node_modules(コピーしたくないフォルダ。中身は省略) ├── package.json ├── public │ └── index.html └── src └── index.js
実施内容
.dockerignoreファイルの作成
Dockerfile
と同じ階層に.dockerignore
ファイルを作成し、以下の内容を記載した。
.dockerignore
app/node_modules
※package-lock.jsonも入れたほうが良いかも
.dockerignoreファイルの作成ルール
.dockerignore
ファイルはビルドコンテキストルートに配置する。- 中身のパスはすべて.dockerignoreが置かれているパスからの相対パスで記載する。
参考資料
.dockerignoreが効かない?.gitignoreとは書き方が違うよ! - Qiita
ビルドコンテキストルートとは
docker build
する際に指定するパスがビルドコンテキストルートとなる。
今回、
$ sudo docker build -t react-practice-6 .
でビルドしているため.
(Dockerfileがあるフォルダ)がビルドコンテキストルートとなる。
参考資料
Dockerのビルドコンテキスト(build context)について確認したときのメモ - Qiita
おわりに
.dockerignore
ファイルを利用して、不要なファイルをdockerイメージ作成時のCOPY対象から外すことができた。
最終的な構成は以下となった。
React-practice-6 ├── Dockerfile ├── .dockerignore └── app ├── node_modules(コピーしたくないフォルダ。中身は省略) ├── package.json ├── public │ └── index.html └── src └── index.js