エンジニアを目指す日常ブログ

日々勉強したことのメモ。独学ですので間違っていたらコメント等で教えてください。

【.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