武昌專業(yè)的網(wǎng)絡(luò)推廣團(tuán)隊(duì)seo的特點(diǎn)是什么
目錄
docker的創(chuàng)建鏡像的方式
dockerfile形成(原理)
docker的核心作用
docker的文件結(jié)構(gòu)
dockerfile的語法
CMD和ENTRPOINT的區(qū)別
創(chuàng)建dockerfile鏡像
區(qū)別
RUN命令的優(yōu)化
如何把run命令寫在一塊
copy和ADD區(qū)別
區(qū)別
centos7 構(gòu)建Apache的dockerfile(編譯安裝)
頁面訪問
?編輯
centos7 構(gòu)建nginx的dockerfile(編譯安裝)
創(chuàng)建鏡像,創(chuàng)建自定義的鏡像
包括配置文件,掛載點(diǎn),對(duì)外暴露的端口,設(shè)置環(huán)境變量
docker的創(chuàng)建鏡像的方式
1、基于已有的鏡像進(jìn)行創(chuàng)建,根據(jù)官方提供的鏡像源,創(chuàng)建鏡像,然后拉起容器,是一個(gè)白版,值能提供基礎(chǔ)的功能,
擴(kuò)展性的功能還是需要自定義(進(jìn)入容器進(jìn)行操作)
2、基于模版進(jìn)行創(chuàng)建
導(dǎo)入鏡像到本地
docker import 模版 -- 模版(Ubuntu:14)
3、dockerfile 聯(lián)合文件系統(tǒng)(unionFS),docker鏡像的基礎(chǔ)(鏡像通過分層來進(jìn)行集成,特性:一次同時(shí)加載多個(gè)文件系統(tǒng),但是從外面來看,就是一個(gè)文件系統(tǒng))
docker鏡像世紀(jì)上就是由一層一層的文件系統(tǒng)組成,這種層級(jí)的文件系統(tǒng)就是unionFS
每層都是layers,每一層都包含文件系統(tǒng)的一部分,這些層次疊加在一起,最終形成的就是rootfs
dockerfile形成(原理)
bootfs 宿主機(jī)的引導(dǎo)文件系統(tǒng),啟動(dòng)操作系統(tǒng)的文件,啟動(dòng)容器需要的最基本的文件,包含宿主機(jī)的bootloader和kernel(提供內(nèi)核)
rootfs 鏡像的操作系統(tǒng),拉取鏡像會(huì)給鏡像自動(dòng)創(chuàng)建一惡搞操作系統(tǒng)(拉取鏡像)
run add 創(chuàng)建容器時(shí)的命令
container
從而形成鏡像
bootfs 宿主機(jī)提供的內(nèi)核和引導(dǎo)程序
rootfs 就是容器的操作系統(tǒng),在dockerfile中,我們可以自己指定(是多個(gè)基礎(chǔ)鏡像和應(yīng)用鏡像結(jié)合起來的只讀層,鏡像實(shí)際上就死一個(gè)只讀文件)
容器基于鏡像實(shí)例,運(yùn)行起來之后,容器變成可讀可寫層
在dockerfile當(dāng)中每創(chuàng)建一個(gè)指定都是一個(gè)鏡像層
鏡像層會(huì)被緩存和復(fù)用
一旦有一層鏡像失敗那么所有的鏡像層都會(huì)失敗,鏡像也不會(huì)創(chuàng)建
鏡像層是不可變的,你在某一層當(dāng)中添加一個(gè)新的命令,但是下一層刪除了指令,鏡像中基于這個(gè)命令創(chuàng)建的文件依然存在,但是在容器中看不見
docker的核心作用
用戶個(gè)性化定制docker的鏡像
docker的文件結(jié)構(gòu)
1、基礎(chǔ)鏡像信息
2、維護(hù)者信息
3、鏡像的操作指令
4、容器啟動(dòng)時(shí),執(zhí)行的命令(nginx定義好了容器執(zhí)行的命令,bin/bash,覆蓋了容器內(nèi)的標(biāo)準(zhǔn)輸出)
dockerfile的語法
FROM:指定基礎(chǔ)鏡像信息,指定容器的操作系統(tǒng)
MAINTAINER:指定維護(hù)者信息(可有可無)
RUN:在基礎(chǔ)的鏡像上執(zhí)行的命令,每個(gè)run就是一層,分層越多,鏡像越大
ENTRYPOINT:設(shè)置容器運(yùn)行時(shí)的默認(rèn)命令(容器內(nèi)部運(yùn)行的主程序)
CMD:指定容器運(yùn)行時(shí)的默認(rèn)命令(docker run /bin/bash 后面加了其他的命令,CMD的指令將會(huì)被覆蓋)
EXPOSE:暴漏端口(指定容器的運(yùn)行端口)
ENV:設(shè)置環(huán)境變量,環(huán)境變量可以被run命令使用(聲明容器運(yùn)行需要的環(huán)境變量)
ADD:復(fù)制,解壓,解壓不支持.zip和.rar tar.gz tar.bz2 支持url地址解壓和復(fù)制(解壓)
COPY:復(fù)制文件,不能解壓,只能復(fù)制本地文件,文件要和dockerfile在一個(gè)目錄(官方推薦復(fù)制用copy)
VOLUME:創(chuàng)建一個(gè)容器內(nèi)的掛載點(diǎn),既可以為宿主機(jī)掛載,也可以供容器掛載
USER:設(shè)置運(yùn)行鏡像時(shí)使用的用戶或者UID(可以不加)
WORKDIR:為后續(xù)指令設(shè)置的工作目錄
ONBUILD:這個(gè)鏡像可以被其他鏡像引用,需要這個(gè)命令
ARG:傳參,用于創(chuàng)建容器時(shí),傳遞參數(shù),ENV用于容器運(yùn)行時(shí)設(shè)置環(huán)境變量
CMD和ENTRPOINT的區(qū)別
都是可以作為容器啟動(dòng)時(shí)的默認(rèn)命令
創(chuàng)建dockerfile鏡像
vim Dockerfile
FROM centos:7
MAINTAINER "this is my docker <xb>"
ENTRYPOINT ["echo","hello"]
CMD ["world"]構(gòu)建鏡像
[root@docker1 test1]# docker build -t centos7:test .
[+] Building 17.0s (5/5) FINISHED docker:default=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 183B 0.0s=> [internal] load metadata for docker.io/library/centos:7 4.5s=> [1/1] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 12.5s=> => resolve docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 0.0s=> => sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc 76.10MB / 76.10MB 8.6s=> => sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 1.20kB / 1.20kB 0.0s=> => sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f 529B / 529B 0.0s=> => sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9 2.75kB / 2.75kB 0.0s=> => extracting sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc 3.8s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:95db50faac27607f675dd62ed2fd7a54e573f28c4b4c6b6b19f8c0718a71c0bc 0.0s=> => naming to docker.io/library/centos7:test 0.0s
創(chuàng)建容器
[root@docker1 test1]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7 test 95db50faac27 2 years ago 204MB
[root@docker1 test1]# docker run -it --name test1 centos7:test
hello world
[root@docker1 test1]#
區(qū)別
1、cmd可以把參數(shù)傳給ENTRYPOINT
2、多個(gè)ENTRYPOINT和多個(gè)cmd只會(huì)運(yùn)行最后一個(gè)(一個(gè)Dockerfile當(dāng)中只會(huì)有一個(gè)ENTRYPOINT和CMD)
3、ENTRYPOINT的指令不會(huì)被覆蓋,CMD的指令如果在docker run的后面加上輸出,會(huì)被覆蓋
4、ENTRYPOINT的指令在容器啟動(dòng)時(shí)啟動(dòng)時(shí)執(zhí)行,都會(huì)成為容器的主進(jìn)程,主進(jìn)程負(fù)責(zé)接收信號(hào),處理容器的生命周期,主進(jìn)程退出,容器也將會(huì)終止運(yùn)行
RUN命令的優(yōu)化
主要是減少鏡像的層數(shù):把多個(gè)run命令寫在一塊
如何把run命令寫在一塊
&& 符號(hào)
RUN yum -y install nginx && make -j 4 && make install
前一個(gè)命令執(zhí)行成功才會(huì)執(zhí)行下一個(gè)命令; 符號(hào)
RUN yum -y install nginx ; make -j 4 ; make install
不管前一個(gè)命令是否成功,后面的命令都會(huì)執(zhí)行|| 符號(hào)
RUN yum -y install nginx || make -j 4 || make install
如果前面的命令執(zhí)行失敗,才會(huì)執(zhí)行后面的操作反斜杠\ 換行 符號(hào)
RUN yum -y install nginx \
&& make j 4\
&& make install
可讀性更高
copy和ADD區(qū)別
copy和add都可以吧本地文件復(fù)制到鏡像中,但是官方推薦如果是復(fù)制使用copy
區(qū)別
add可以解壓,如果是一個(gè)壓縮文件,add在復(fù)制之后會(huì)自動(dòng)解壓(tar.gz和tar.bz2) 可以支持URL下載源文件,支持下載,但不能解壓,通過URL拷貝的文件無法自動(dòng)解壓
copy只能復(fù)制,不能解壓,而且只能是本地文件,不支持URL路徑
centos7 構(gòu)建Apache的dockerfile(編譯安裝)
把源碼包拖到opt目錄下
vim Dockerfile
#創(chuàng)建基礎(chǔ)鏡像
FROM centos:7
MAITAIENR "this is my apache <dn>"
RUN yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt
ADD httpd-2.4.29.tar.bz2 /opt
ADD apr-util-1.6.0.tar.gz /opt
RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr && mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util &&\
cd /opt/httpd-2.4.29 &&\
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &&\
make -j 4 && make install
EXPOSE 80
CMD ["/usr/local/httpd/bin/apachectl","-D","FOREGROUND"]docker build -t apache:centos .docker run -itd --name httpd1 -p 50:80 apache:centos基于鏡像的二次構(gòu)建
FROM centos:7 AS first
MAITAIENR "this is my apache <dn>"
RUN yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt
ADD httpd-2.4.29.tar.bz2 /opt
ADD apr-util-1.6.0.tar.gz /opt
RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr && mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util &&\
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &&\
make -j 4 && make install
#二層構(gòu)建
FROM centos:7
COPY --from=first /usr/local/httpd /usr/local/httpd
RUN yum -y cre pcre-devel expat-devel perl
EXPOSE 80
CMD ["/usr/local/httpd/bin/apachectl","-D","FOREGOUND"]docker build -t apache1:centos .docker run -itd --name httpd1 -p 50:80 apache:centos
頁面訪問
centos7 構(gòu)建nginx的dockerfile(編譯安裝)
把源碼包拖到opt/test目錄下
vim Dockerfile
FROM centos:7
MAINTAINER "this is nginx <xb>"
ADD nginx-1.22.0.tar.gz /opt/test/
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel &&\
useradd -M -s /sbin/nologin nginx &&\
cd /opt/test/nginx-1.22.0/ &&\
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module &&\
make -j 4 && make install &&\
chown -R nginx.nginx /usr/local/nginx/ &&\
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"][root@docker1 test]# docker build -t nginx:centos .
[+] Building 0.0s (8/8) FINISHED docker:default=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 791B 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [internal] load metadata for docker.io/library/centos:7 0.0s=> [internal] load build context 0.0s=> => transferring context: 95B 0.0s=> [1/3] FROM docker.io/library/centos:7 0.0s=> CACHED [2/3] ADD nginx-1.22.0.tar.gz /opt/test/ 0.0s=> CACHED [3/3] RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel &&useradd -M -s /sb 0.0s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:5f90f4b42382377324edf884560f8118d6873889dd8179df68b47de39b6fb334 0.0s=> => naming to docker.io/library/nginx:centos 0.0s
[root@docker1 test]# docker run -itd --name xiaobu -p 8080:80 nginx:centos
61beb14328b28a424a4c2e88d7e3a1f63e4ac55b551ec32a3656bcff3cb0711b
[root@docker1 test]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61beb14328b2 nginx:centos "/usr/local/nginx/sb…" 5 seconds ago Exited (1) 4 seconds ago xiaobu
6068029975ff apache1:centos "/usr/local/httpd/bi…" 3 hours ago Up 3 hours 0.0.0.0:1314->80/tcp, :::1314->80/tcp httpd1
5b6c5af75176 apache:centos "/usr/local/httpd/bi…" 3 hours ago Exited (0) 3 hours ago http1
頁面訪問