1. 程式人生 > 實用技巧 >Docker File介紹

Docker File介紹

docker file是用來構建dok cer映象的檔案!命令引數指令碼!

構建步驟:

1、編寫一個docker file檔案

2、docker build構建成為一個映象

3、docker run執行映象

4、docker push釋出映象(Docker Hub、阿里雲映象倉庫!)

Docker Hub搜尋映象centos

選擇1個版本點選後進入Github

跳轉後的路徑就是Dockerfile

FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20200809" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-08-09 00:00:00+01:00"

CMD ["/bin/bash"]

很多官方映象都是基礎包,很多功能沒有,我們通常會自己搭建自己的映象!

官方既然可以製作映象,那我們也可以!

Docker File構建過程

基礎知識:

1、每個保留關鍵字(指令)都是必須是大寫字母

2、執行從上到下順序執行

3、#表示註釋

4、每一個指令都會建立提交一個新的映象層,並提交!

dockerfile是面向開發的,我們以後要釋出專案,做映象,就需要編寫dockerfile檔案, 這個檔案十分簡單!

Docker映象逐漸成為企業交付的標準,必須要掌握!

步驟:

DockerFile:構建檔案, 定義了一切的步驟, 原始碼

Dockerlmages:通過Docker File構建生成的映象, 最終釋出和執行的產品!

Docker容器:容器就是映象執行起來提供服務的

開發,部署,運維。。。缺一不可!

Docker File指令

FROM 						#基礎鏡映象,一切從這裡開始構建 

MAINTAINER 					#映象是誰寫的,姓名+郵箱 

RUN 						#映象構建的時候需要執行的命令 

ADD 						#步驟:tomcat映象, 這個tomcat壓縮包!新增內容 

WORKDIR 					#映象的工作目錄 

VOLUME 						#掛載的目錄 

EXPOSE 						#暴露埠配置 

CMD							#指定這個容器啟動的時候要執行的命令,只有最後一個會生效,可被替代 

ENTRYPOINT 					#指定這個容器啟動的時候要執行的命令,可以追加命令 

ON BUILD 					#當構建一個被繼承Docker File這個時候就會執行ON BUILD 的指令。觸發指令。 

COPY 						#類似ADD, 將我們檔案拷貝到映象中 ENV #構建的時候設定環境變數! 

實戰測試

Docker Hub中99%映象都是從這個基礎映象過來的FROM scratch, 然後配置需要的軟體和配置來進行的構建。

構建自己的映象

預設的centos映象只包含了最基礎的東西

編寫dockerfile配置檔案

建立/data目錄,再建立dockerfile目錄,用來專門存放dockerfile檔案。

編寫一個dockerfile檔案,命名為dockerfile-centos

FROM centos
MAINTAINER lwenwu<[email protected]>

ENV MYPATH /usr/local
WORKDIR $MYPATH
 
RUN yum -y install vim
RUN yum -y install net-tools
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "-------end--------"
CMD /bin/bash

通過dockerfile檔案構建映象

docker build -f /data/dockerfile/dockerfile-centos -t mycentos:0.1 .
[root@localhost dockerfile]# docker build -f /data/dockerfile/dockerfile-centos -t mycentos:0.1 .
Sending build context to Docker daemon  2.048kB		#傳送build資訊
Step 1/10 : FROM centos
 ---> 0d120b6ccaa8             #拿到基礎映象,跟docker images下的ID相同,複用基礎映象
Step 2/10 : MAINTAINER lwenwu<[email protected]>		#維護者資訊
 ---> Running in 26a8e7585dcd
Removing intermediate container 26a8e7585dcd
 ---> df741b928f75
Step 3/10 : ENV MYPATH /usr/local
 ---> Running in 7b723400348d
Removing intermediate container 7b723400348d
 ---> fc0f488845c1
Step 4/10 : WORKDIR $MYPATH
 ---> Running in 94198e6a23cb
Removing intermediate container 94198e6a23cb
 ---> df3275a301cf
Step 5/10 : RUN yum -y install vim		#下載vim
 ---> Running in 48e8afc0df08
CentOS-8 - AppStream                            605 kB/s | 5.8 MB     00:09    
CentOS-8 - Base                                 2.2 MB/s | 2.2 MB     00:00    
CentOS-8 - Extras                                10 kB/s | 8.1 kB     00:00    
Dependencies resolved.
================================================================================
 Package             Arch        Version                   Repository      Size
================================================================================
Installing:
 vim-enhanced        x86_64      2:8.0.1763-13.el8         AppStream      1.4 M
Installing dependencies:
 gpm-libs            x86_64      1.20.7-15.el8             AppStream       39 k
 vim-common          x86_64      2:8.0.1763-13.el8         AppStream      6.3 M
 vim-filesystem      noarch      2:8.0.1763-13.el8         AppStream       48 k
 which               x86_64      2.21-12.el8               BaseOS          49 k

Transaction Summary
================================================================================
Install  5 Packages

Total download size: 7.8 M
Installed size: 31 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm         51 kB/s |  39 kB     00:00    
(2/5): vim-filesystem-8.0.1763-13.el8.noarch.rp 314 kB/s |  48 kB     00:00    
(3/5): vim-enhanced-8.0.1763-13.el8.x86_64.rpm  1.3 MB/s | 1.4 MB     00:01    
(4/5): which-2.21-12.el8.x86_64.rpm             314 kB/s |  49 kB     00:00    
(5/5): vim-common-8.0.1763-13.el8.x86_64.rpm    1.8 MB/s | 6.3 MB     00:03    
--------------------------------------------------------------------------------
Total                                           1.7 MB/s | 7.8 MB     00:04  
#下載警告,沒什麼問題
warning: /var/cache/dnf/AppStream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS-8 - AppStream                            158 kB/s | 1.6 kB     00:00    
Importing GPG key 0x8483C65D:
 Userid     : "CentOS (CentOS Official Signing Key) <[email protected]>"
 Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : which-2.21-12.el8.x86_64                               1/5 
  Installing       : vim-filesystem-2:8.0.1763-13.el8.noarch                2/5 
  Installing       : vim-common-2:8.0.1763-13.el8.x86_64                    3/5 
  Installing       : gpm-libs-1.20.7-15.el8.x86_64                          4/5 
  Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64                          4/5 
  Installing       : vim-enhanced-2:8.0.1763-13.el8.x86_64                  5/5 
  Running scriptlet: vim-enhanced-2:8.0.1763-13.el8.x86_64                  5/5 
  Running scriptlet: vim-common-2:8.0.1763-13.el8.x86_64                    5/5 
  Verifying        : gpm-libs-1.20.7-15.el8.x86_64                          1/5 
  Verifying        : vim-common-2:8.0.1763-13.el8.x86_64                    2/5 
  Verifying        : vim-enhanced-2:8.0.1763-13.el8.x86_64                  3/5 
  Verifying        : vim-filesystem-2:8.0.1763-13.el8.noarch                4/5 
  Verifying        : which-2.21-12.el8.x86_64                               5/5 

Installed:
  gpm-libs-1.20.7-15.el8.x86_64         vim-common-2:8.0.1763-13.el8.x86_64    
  vim-enhanced-2:8.0.1763-13.el8.x86_64 vim-filesystem-2:8.0.1763-13.el8.noarch
  which-2.21-12.el8.x86_64             

Complete!		#編譯成功
Removing intermediate container 48e8afc0df08
 ---> 3e3387c3a894
Step 6/10 : RUN yum -y install net-tools		#下載net-tools
 ---> Running in 90f391b8fe89
Last metadata expiration check: 0:00:12 ago on Thu Nov  5 13:18:48 2020.
Dependencies resolved.
================================================================================
 Package         Architecture Version                        Repository    Size
================================================================================
Installing:
 net-tools       x86_64       2.0-0.51.20160912git.el8       BaseOS       323 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 323 k
Installed size: 1.0 M
Downloading Packages:
net-tools-2.0-0.51.20160912git.el8.x86_64.rpm   1.4 MB/s | 323 kB     00:00    
--------------------------------------------------------------------------------
Total                                           184 kB/s | 323 kB     00:01     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 
  Running scriptlet: net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 
  Verifying        : net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 

Installed:
  net-tools-2.0-0.51.20160912git.el8.x86_64                                     

Complete!		#又編譯成功
Removing intermediate container 90f391b8fe89
 ---> da4ad4cd2938
Step 7/10 : EXPOSE 80
 ---> Running in 96f829f08850
Removing intermediate container 96f829f08850
 ---> 3d2d0365e5c7
Step 8/10 : CMD echo $MYPATH
 ---> Running in 00344184eafe
Removing intermediate container 00344184eafe
 ---> 005ee0708a17
Step 9/10 : CMD echo "-------end--------"
 ---> Running in c7019a9bcfd9
Removing intermediate container c7019a9bcfd9
 ---> c964b172bf9e
Step 10/10 : CMD /bin/bash
 ---> Running in 9900c5470588
Removing intermediate container 9900c5470588
 ---> f804e311e9aa
Successfully built f804e311e9aa
Successfully tagged mycentos:0.1		#構建完成
[root@localhost dockerfile]#

測試執行

檢視構建的映象

執行構建的容器

docker run -it mycentos:0.1		#使用映象名稱要加版本號,否則會下載最新的映象

構建的映象vim ifconfig命令可以使用,工作目錄為配置的/usr/local

檢視映象構建歷史

docker history ID

檢視官方映象是如何構建的


通過檢視官方映象的構建歷史可以學習映象是如何構建的。

CMD和ENTRYPOINT區別

CMD #指定這個容器啟動的時候要執行的命令,只有最後一個會生效,可被替代

ENTRYPOINT #指定這個容器啟動的時候要執行的命令,可以追加命令

測試CMD

只有最後一個會執行

進入dockerfile目錄,編寫dockerfile-cmd-test檔案

構建映象

docker build -f dockerfile-cmd-test -t cmdtest .


執行映象,ls -a命令生效

docker run ID


追加-l命令引數測試,

docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.


追加的-l命令替換了CMD["ls""-a"]命令,-l不是命令,所以報錯。

命令被替換

測試ENTRYPOINT

進入dockerfile目錄,編寫dockerfile-entrypoint-test檔案

構建映象

docker build -f dockerfile-entrypoint-test -t entrytest .


執行映象,ls -a命令生效

docker run ID


追加-l命令引數測試

docker run 4c60442a1328 -l

追加-l生效

不會替換掉dockerfile檔案中的內容。