Cómo AGREGAR todos los archivos / directorios excepto un directorio oculto como.git en Dockerfile


Una de las cosas que hacemos a menudo es empaquetar todo el código fuente en Dockerfile cuando construimos una imagen de Docker.

ADD . /app

¿Cómo podemos evitar incluir el directorio .git de manera sencilla ?

Probé la forma Unix de manejar esto usando ADD [^.]* /app/

Muestra completa:

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 .
Sending build context to Docker daemon 4.096 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu
 ---> 04c5d3b7b065
Step 1 : ADD [^.]* /app/
d ---> 5d67603f108b
Removing intermediate container 60159dee6ac8
Successfully built 5d67603f108b
docker@boot2docker:/mnt/sda1/tmp/abc$ docker run -it abc
root@1b1705dd66a2:/# ls -l app
total 4
-rw-r--r-- 1 1000 staff 30 Jan 22 01:18 Dockerfile
-rw-r--r-- 1 root root   0 Jan 22 01:03 a1
-rw-r--r-- 1 root root   0 Jan 22 00:10 c

Y en segundo lugar, perderá la estructura de directorios, ya que good\a1 se cambia a a1.

El código fuente relacionado en Docker es https://github.com/docker/docker/blob/eaecf741f0e00a09782d5bcf16159cc8ea258b67/builder/internals.go#L115

Author: Michael Mügge, 2015-01-22

3 answers

Puede excluir archivos no deseados con la ayuda de .dockerignore file

 50
Author: Mykola Gurov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-26 11:57:38

¿Cómo podemos evitar incluir el.git directorio de manera sencilla ?

Simplemente cree un archivo llamado .dockerignore en la carpeta de contexto raíz con las siguientes líneas

**/.git
**/node_modules

Con tales líneas Docker excluirá los directorios .git y node_modules de cualquier subdirectorio incluyendo root. Docker también admite una cadena comodín especial ** que coincide con cualquier número de directorios (incluido cero).

Y en segundo lugar, perderá la estructura de directorios, ya que good\a1 obtiene cambiado a a1

Con .dockerignore no lo hará

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

3 directories, 3 files

Referencia a documentos oficiales: .dockerignore

 16
Author: ALex_hha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-18 19:27:21

Añadir .dockerignore archivo en su directorio raíz (sintaxis como la .gitignore archivo)

 0
Author: Mohammad Trabelsi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-05 08:32:36