1. 程式人生 > >為什麼需要.dockerignore及最佳實踐

為什麼需要.dockerignore及最佳實踐

1. 為什麼需要.dockerignore檔案

當使用docker build構建映象的時,預設會將Dockerfile所在目錄下的所有檔案或資料夾,新增到構建docker映象的上下文中,如果該上下文中包含太多不需要的檔案或資料夾,將導致構建速度變慢。如:構建node專案映象,上下文包含node_modules資料夾,該資料夾中包含N多執行時不需要的檔案或資料夾,嚴重降低docker build速度。

[root@influx jdk1.8.0_191-centos7.6.1810]# ls -al
total 187304
drwxr-xr-x  2 root root      4096 Jul 23 17:20 .
drwxr-xr-x 14 root root      4096 Jul 23 17:29 ..
-rwxr-xr-x  1 root root       392 Jul 15 15:32 build-push.sh
-rwxr-xr-x  1 root root       153 Jul 15 15:32 build-run.sh
-rwxr-xr-x  1 root root       138 Jul 15 15:32 build.sh
-rwxr-xr-x  1 root root       125 Jul 15 16:01 config.sh
-rw-r--r--  1 root root       840 Jul 23 17:20 Dockerfile
-rw-r--r--  1 root root        51 Jul 15 15:32 .dockerignore
-rwxr-xr-x  1 root root      5638 Jul 15 15:32 dump.sh
-rw-r--r--  1 root root 191753373 Jul 15 15:49 jdk-8u191-linux-x64.tar.gz
[root@influx jdk1.8.0_191-centos7.6.1810]# ./build.sh 
Sending build context to Docker daemon  191.8MB # 構建時,建立上下文的步驟,此處可知上下文大小為191MB
Step 1/12 : FROM thub.xxxx.com.cn/digo/centos7.6.1810:2019-07-23_15-00-00
 ---> 4331b9283ea1
......

2. 存放位置

預設與Dockerfile檔案同級目錄

3. 最佳實踐

  • 常規的做法-排除法
    與.gitignore的常規做法一樣,排除不需要的檔案或資料夾
  • 最佳實踐-包含法
    實際構建過程中,上下文需要的檔案或資料夾只佔整個專案所有檔案或資料夾中的一小部分,尤以java專案突出,構建時,上下文只需要一個jar或war包即可。所以我們建議:.dockerignore中配置只包含需要的檔案或資料夾即可,更為簡潔、方便。

4. 包含法-應用例項

  • 需求
    構建一個springboot專案映象,上下文只要jar包和Dockerfile本身即可
  • .dockerignore寫法
# 目的:提升docker編譯速度
# 做法:排除所有,包含需要的
# Reference: https://stackoverflow.com/questions/28097064/dockerignore-ignore-everything-except-a-file-and-the-dockerfile

# Ignore everything
**

# Allow files and directories
!source/template-provider/target/template.jar