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檔案中的內容。