web-dev-qa-db-ja.com

Dockerfileの.gitなどの隠しディレクトリを除くすべてのファイル/ディレクトリを追加する方法

よく行うことの1つは、DockerイメージをビルドするときにすべてのソースコードをDockerfileにパッケージ化することです。

ADD . /app

.gitディレクトリを簡単な方法で含めないようにするにはどうすればよいですか?

ADD [^.]* /app/を使用してこれを処理するUnixの方法を試しました

完全なサンプル:

 docker @ boot2docker:/ mnt/sda1/tmp/abc $ find。
。
 ./ c 
 ./。git 
 ./ Dockerfile 
 ./ good 
 ./ good/a1 
 docker @ boot2docker:/ mnt/sda1/tmp/abc $ cat Dockerfile 
 FROM ubuntu 
 
 ADD [^。] * /app/
docker@boot2docker:/mnt/sda1/tmp/abc$ docker build -t abc。
ビルドコンテキストをDockerデーモンに送信4.096 kB 
ビルドコンテキストをDockerデーモンに送信
ステップ0:ubuntu 
から---> 04c5d3b7b065 
ステップ1:[^。] */app /を追加
 d ---> 5d67603f108b 
中間コンテナを削除しますabc 
 root @ 1b1705dd66a2:/#ls -l app 
 total 4 
-rw-r--r-- 1 1000スタッフ30 Jan 22 01:18 Dockerfile 
-rw-r--r-- 1ルートルート0 Jan 22 01:03 a1 
-rw-r--r-- 1ルートルート0 Jan 22 00:10 c 
 

第二に、good\a1a1に変更されるため、ディレクトリ構造が失われます。

Dockerの関連ソースコードは https://github.com/docker/docker/blob/eaecf741f0e00a09782d5bcf16159cc8ea258b67/builder/internals.go#L115

47
Larry Cai

。dockerignore file を使用して、不要なファイルを除外できます。

63
Mykola Gurov

どうすれば簡単に.gitディレクトリを含めないようにできますか?

次の行を使用して、ルートコンテキストフォルダーに.dockerignoreというファイルを作成するだけです。

**/.git
**/node_modules

このような行を使用すると、Dockerは、ルートを含むサブディレクトリから.gitおよびnode_modulesディレクトリを除外します。 Dockerは、任意の数のディレクトリ(ゼロを含む)に一致する特別なワイルドカード文字列**もサポートしています。

次に、good\a1がa1に変更されるため、ディレクトリ構造が失われます。

.dockerignoreでは、

$ docker run -it --rm sample tree /opt/
/opt/
├── Dockerfile
├── c
│   └── no_sslv2.patch
└── good
    └── a1
        └── README

3 directories, 3 files

公式ドキュメントへの参照: 。dockerignore

21
ALex_hha

ルートディレクトリに。dockerignoreファイルを追加します(。gitignoreファイルのような構文)

0
user6830821