docker dockerfile使用詳解


什么是 Dockerfile

Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。

Dockerfile的作用

安裝dockerfile中的指令定義docker容器或者容器中的應用程序以及服務
Dockerfile制作一個鏡像模板安裝模板統一生成容器

環境介紹

  • 1.Dockerfile中所用的所有文件一定要和Dockerfile文件在同一級父目錄下,可以為Dockerfile父目錄的子目錄
  • 2.Dockerfile中相對路徑默認都是Dockerfile所在的目錄
  • 3.Dockerfile中一定要惜字如金,能寫到一行的指令,一定要寫到一行,原因是分層構建,聯合掛載這個特性。
  • 4.Dockerfile中每一條指令被視為一層
  • 5.Dockerfile中指明大寫(約定俗成)

Docker build 命令

語法

docker build [OPTIONS] PATH | URL | -

OPTIONS說明:

  • --build-arg=[] :設置鏡像創建時的變量;
  • --cpu-shares :設置 cpu 使用權重;
  • --cpu-period :限制 CPU CFS周期;
  • --cpu-quota :限制 CPU CFS配額;
  • --cpuset-cpus :指定使用的CPU id;
  • --cpuset-mems :指定使用的內存 id;
  • --disable-content-trust :忽略校驗,默認開啟;
  • -f :指定要使用的Dockerfile路徑;
  • --force-rm :設置鏡像過程中刪除中間容器;
  • --isolation :使用容器隔離技術;
  • --label=[] :設置鏡像使用的元數據;
  • -m :設置內存最大值;
  • --memory-swap :設置Swap的最大值為內存+swap,"-1"表示不限swap;
  • --no-cache :創建鏡像的過程不使用緩存;
  • --pull :嘗試去更新鏡像的新版本;
  • --quiet, -q :安靜模式,成功后只輸出鏡像 ID;
  • --rm :設置鏡像成功后刪除中間容器;
  • --shm-size :設置/dev/shm的大小,默認值是64M;
  • --ulimit :Ulimit配置。
  • --squash :將 Dockerfile 中所有的操作壓縮為一層。
  • --tag, -t: 鏡像的名字及標簽,通常 name:tag 或者 name 格式;可以在一次構建中為一個鏡像設置多個標簽。
  • --network: 默認 default。在構建期間設置RUN指令的網絡模式

dockerfile常用命令

  • FROM:基礎鏡像,FROM命令必須是dockfile的首個命令
  • LABEL:為鏡像生成元數據標簽信息。
  • USER:指定運行容器時的用戶名或UID,后續RUN也會使用指定用戶
  • RUN:RUN命令是Dockfile執行命令的核心部分。它接受命令作為參數並用於創建鏡像。每條RUN命令在當前鏡像基礎上執行,並且會提交一個新鏡像層。
  • WORKDIR:設置CMD指明的命令的運行目錄。為后續的RUN、CMD、ENTRYPOINT、ADD指令配置工作目錄。
  • ENV:容器啟動的環境變量
  • ARG:構建環境的環境變量
  • COPY:復制文件到鏡像中,格式: COPY 源路徑 目標路徑
  • ADD: 拷復制文件到鏡像中,格式: ADD 源路徑 目標路徑
  • CMD:容器運行時執行的默認命令
  • ENTRYPOINT:指定容器的“入口”
  • HEALTHCHECK:容器健康狀態檢查

關於 ADD ,有如下注意事項:

  • 1、如果源路徑是個文件,且目標路徑是以 / 結尾, 則docker會把目標路徑當作一個目錄,會把源文件拷貝到該目錄下。如果目標路徑不存在,則會自動創建目標路徑。
  • 2、如果源路徑是個文件,且目標路徑是不是以 / 結尾,則docker會把目標路徑當作一個文件。
    如果目標路徑不存在,會以目標路徑為名創建一個文件,內容同源文件;
    如果目標文件是個存在的文件,會用源文件覆蓋它,當然只是內容覆蓋,文件名還是目標文件名。
    如果目標文件實際是個存在的目錄,則會源文件拷貝到該目錄下。 注意,這種情況下,最好顯示的以 / 結尾,以避免混淆。
  • 3、如果源路徑是個目錄,且目標路徑不存在,則docker會自動以目標路徑創建一個目錄,把源路徑目錄下的文件拷貝進來。
    如果目標路徑是個已經存在的目錄,則docker會把源路徑目錄下的文件拷貝到該目錄下。
  • 4、如果源文件是個歸檔文件(壓縮文件),則docker會自動幫解壓。
  • COPY指令和ADD指令功能和使用方式類似。只是COPY指令不會做自動解壓工作。

演示

使用Dockerfile構建nginx容器,添加容器健康檢查

# 基於nginx:1.17.9 鏡像構建
FROM nginx:1.17.9

# 指定信息  maintainer 貢獻者
LABEL maintainer="chenshifeng@163.com"

#設置環境變量
ENV NGINX_VERSION 1.17.9
ARG work_pwd=/data/html

#切換 root 用戶
USER root

#執行命令,安裝curl 軟件,設置軟連接把 nginx 服務的日志顯示到終端輸出
RUN apt-get -yq update && apt-get install -y curl && \ 
ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log

#掛載卷
VOLUME ["/data"]

#設置工作目錄
WORKDIR ${work_pwd}

# 復制 index.html 文件到 WORKDIR 目錄下
COPY index.html .

# 映射 80 端口
EXPOSE 80

# 此處 CMD 作為 ENTRYPOINT 的參數
CMD ["nginx","-g","daemon off;"]

STOPSIGNAL SIGRTMAX

# 檢查容器健康,通過訪問NGINX 服務80端口,來判斷容器是否運行正常
HEALTHCHECK --interval=5s --timeout=3s \ 
    CMD curl -fs http://localhost/ || exit 1

構建
docker build -t n:1 .

chenshifengdeMacBook-Pro:nginx chenshifeng$ docker build -t n:1 .
[+] Building 2265.0s (5/8)                                                                                                                  
 => [internal] load build definition from Dockerfile                                                                                   0.0s
 => => transferring dockerfile: 276B                                                                                                   0.0s
 => [internal] load .dockerignore                                                                                                      0.0s
 => => transferring context: 2B                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/nginx:1.17.9                                                                        2.3s
 => [internal] load build context                                                                                                      0.0s
 => => transferring context: 280B                                                                                                      0.0s
 => [1/4] FROM docker.io/library/nginx:1.17.9@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50                 12.9s
 => => resolve docker.io/library/nginx:1.17.9@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50                  0.0s
 => => sha256:123275d6e508d282237a22fefa5aef822b719a06496444ea89efa65da523fc4b 27.10MB / 27.10MB                                       9.7s
 => => sha256:9a5d769f04f8b7810455a5c19f35a91042cbe6a53d5155b8840c67e90a352e0f 23.92MB / 23.92MB                                       8.2s
 => => sha256:faad4f49180d2ade69590557af5af7695b3659bbf50f59fdfe984aab06269d49 204B / 204B                                             0.3s
[+] Building 2265.1s (5/8)                                                                                                                => [internal] load build definition from Dockerfile                                                                                0.0s
 => => transferring dockerfile: 276B                                                                                                0.0s. => [internal] load .dockerignore                                                                                                   0.0s
 => => transferring context: 2B                                                                                                     0.0s. => [internal] load metadata for docker.io/library/nginx:1.17.9                                                                     2.3s
 => [internal] load build context                                                                                                   0.0s. => => transferring context: 280B                                                                                                   0.0s
 => [1/4] FROM docker.io/library/nginx:1.17.9@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50              1[+] Building 2265.3s (5/8)                                                                                                           => [internal] load build definition from Dockerfile                                                                           0.0s
 => => transferring dockerfile: 276B                                                                                           0.0s  => [internal] load .dockerignore                                                                                              0.0s  => => transferring context: 2B                                                                                                0.0s
 => [internal] load metadata for docker.io/library/nginx:1.17.9                                                                2.3s  => [internal] load build context                                                                                           [+] Building 2265.4s (5/8)                                                                                                       => [internal] load build definition from Dockerfile                                                                       0.0s
 => => transferring dockerfile: 276B                                                                                       0.0s2 => [internal] load .dockerignore                                                                                          0.0s  => => transferring context: 2B                                                                                            0.0s  => [internal] load metadata for docker.io/library/nginx:1.17.9                                                         [+] Building 2265.6s (5/8)                                                                                                    
 => [internal] load build definition from Dockerfile                                                                     0.0s0 => => transferring dockerfile: 276B                                                                                     0.0s0 => [internal] load .dockerignore                                                                                        0.0s  => => transferring context: 2B                                                                                   [+] [+] Building 2267.6s (5/8)                  [+] Building[+] Building[+] Building 2268.9s (5/8)                                                                                                                    => [internal] load build definition from Dockerfile                                                                                    0.0s
 => => transferring dockerfile: 276B                                                                                                    0.0s> => [internal] load .dockerignore                                                                                                       0[+] Building 2269.1s (5/8)                                                                                                                  => [internal] load build definition from Dockerfile                                                                                  0.0s  => => transferring dockerfile: 276B                                                                                                  0.0s  => [internal] load .dockerignore                                                                                              [+] Building 2269.2s (5/8)                                                                                                                => [internal] load build definition from Dockerfile                                                                                0.0s
 => => transferring dockerfile: 276B                                                                                                0.0s[[[+] Building 2364.5s (9/9) FINISHED                                                                                                        => [internal] load build definition from Dockerfile                                                                                 0.0s> => => transferring dockerfile: 276B                                                                                                 0.0s  => [internal] load .dockerignore                                                                                                    0.0s= => => transferring context: 2B                                                                                                      0.0si => [internal] load metadata for docker.io/library/nginx:1.17.9                                                                      2.3sn => [internal] load build context                                                                                                    0.0st => => transferring context: 280B                                                                                                    0.0s
 => [1/4] FROM docker.io/library/nginx:1.17.9@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50               12.9s  => => resolve docker.io/library/nginx:1.17.9@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50                0.0s= => => sha256:123275d6e508d282237a22fefa5aef822b719a06496444ea89efa65da523fc4b 27.10MB / 27.10MB                                     9.7s> => => sha256:9a5d769f04f8b7810455a5c19f35a91042cbe6a53d5155b8840c67e90a352e0f 23.92MB / 23.92MB                                     8.2s  => => sha256:faad4f49180d2ade69590557af5af7695b3659bbf50f59fdfe984aab06269d49 204B / 204B                                           0.3s= => => sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50 1.41kB / 1.41kB                                       0.0s> => => sha256:30d9dde0c4cb5ab4989a92bc2c235b995dfa88ff86c09232f309b6ad27f1c7cd 948B / 948B                                           0.0s  => => sha256:5a8dfb2ca7312ee39433331b11d92f45bb19d7809f7c0ff19e1d01a2c131e959 6.67kB / 6.67kB                                       0.0se => => extracting sha256:123275d6e508d282237a22fefa5aef822b719a06496444ea89efa65da523fc4b                                            1.6s
 => => extracting sha256:9a5d769f04f8b7810455a5c19f35a91042cbe6a53d5155b8840c67e90a352e0f                                            1.0s  => => extracting sha256:faad4f49180d2ade69590557af5af7695b3659bbf50f59fdfe984aab06269d49                                            0.0s= => [2/4] RUN apt-get -yq update && apt-get install -y curl && ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stder  2349.0s> => [3/4] WORKDIR /data/html                                                                                                         0.0s  => [4/4] COPY index.html .                                                                                                          0.0s  => exporting to image                                                                                                               0.3s  => => exporting layers                                                                                                              0.3s  => => writing image sha256:663bf35f3ce6c35b0fbf159382a60ba1f271f89ae59fa32690e12f812801375c                                         0.0s  => => naming to docker.io/library/n:1                                                                                               0.0s 

運行鏡像

chenshifengdeMacBook-Pro:nginx chenshifeng$ docker run -d -p 9090:80 n:1
56b9ed9a0a49bac4e525cdcc8589467a28fbeacae47400770e037b8aee55c3ab

chenshifengdeMacBook-Pro:docker-compose chenshifeng$ docker exec -it nifty_chatelet bash
root@56b9ed9a0a49:/data/html# pwd
/data/html       # 對應WORKDIR 工作目錄
root@56b9ed9a0a49:/data/html# ls
index.html    # 對應 COPY index.html 
root@56b9ed9a0a49:/data/html# env
HOSTNAME=56b9ed9a0a49
PWD=/data/html
PKG_RELEASE=1~buster
HOME=/root
NJS_VERSION=0.3.9
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NGINX_VERSION=1.17.9
_=/usr/bin/env
root@56b9ed9a0a49:/data/html# id
uid=0(root) gid=0(root) groups=0(root)    # 對應#切換 root 用戶 USER root
root@56b9ed9a0a49:/data/html# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay          59G  6.3G   50G  12% /
tmpfs            64M     0   64M   0% /dev
tmpfs           994M     0  994M   0% /sys/fs/cgroup
shm              64M     0   64M   0% /dev/shm
/dev/vda1        59G  6.3G   50G  12% /data       # 掛載卷
tmpfs           994M     0  994M   0% /proc/acpi
tmpfs           994M     0  994M   0% /sys/firmware
root@56b9ed9a0a49:/data/html# 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM