docker使用教程相關(guān)系列 目錄
基礎(chǔ)鏡像和項(xiàng)目鏡像介紹
既然是搭建鏡像那就簡(jiǎn)單地說一下,在企業(yè)中的鏡像分類:
基礎(chǔ)鏡像是運(yùn)行項(xiàng)目的基礎(chǔ)環(huán)境,因?yàn)槭腔A(chǔ)服務(wù),所以相對(duì)簡(jiǎn)易一些
如:Nginx,Tomcat
項(xiàng)目鏡像就是放在線上進(jìn)行運(yùn)行的,是基于基礎(chǔ)鏡像之上 在進(jìn)行構(gòu)成的。
簡(jiǎn)單理解,就是把項(xiàng)目放到了 Nginx基礎(chǔ)鏡像里
構(gòu)建Nginx基礎(chǔ)鏡像
在使用 Dockerfile 之前 一定要梳理自己的步驟。
切記、切記
- 安裝Nginx
- 你要啟用哪些模塊
- Nginx初始化
- 啟動(dòng)
有了 步驟之后就要想到 以上的步驟在Dockerfile中要使用那些指令運(yùn)行
1 RUN
2 RUN
3 RUN
4 CMD / ENTRIPONIT
編譯Dockerfile的技巧:
先在from的鏡像中編譯一遍,再把腳本復(fù)制出來到Dockerfile中,可以提高成功率
加快鏡像構(gòu)建速度:Dockerfile腳本將多個(gè)RUN指令合并為一個(gè),多用“\”和"&&"這兩個(gè)符號(hào)。
"&&"符號(hào)連接命令,這樣執(zhí)行后,只會(huì)創(chuàng)建 1 層鏡像
“\”位于行末進(jìn)行格式換行
減少Docker鏡像的大小:每個(gè) RUN 指令后刪除多余文件
更多好的優(yōu)化dockerfile方案,請(qǐng)查看這位博主的內(nèi)容,寫得很詳細(xì)
如何編寫最佳的Dockerfile
開工
# 你要給他一個(gè)
vim Dockerfile-nginx

然后在里面寫這些
FROM centos:7
MAINTAINER www.zenghw.com
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel gd-devel iproute net-tools telnet wget curl && yum clean all && rm -rf /var/cache/yum/*
RUN wget http:///download/nginx-1.15.5.tar.gz && tar zxf nginx-1.15.5.tar.gz && cd nginx-1.15.5 && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module && make -j 4 && make install && rm -rf /usr/local/nginx/html/* && echo "ok" >> /usr/local/nginx/html/status.html && cd / && rm -rf nginx-1.12.2* && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/nginx/sbin
#COPY nginx.conf /usr/local/nginx/conf/nginx.conf
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

build 生成本地鏡像
docker build -t nginx:v1 -f Dockerfile-nginx . # 使用 Dockerfile-nginx 文件構(gòu)建一個(gè)基礎(chǔ)鏡像 nginx:v1
-t nginx:v1 # 指定版本tag=v1
-f Dockerfile-nginx # 指定dockerfile的名稱
. # 指定上下文(比如配置文件在那個(gè)位置等)
執(zhí)行過程中,可能會(huì)失敗,控制臺(tái)會(huì)有失敗報(bào)錯(cuò),根據(jù)報(bào)錯(cuò)提示,進(jìn)行處理即可。
這回運(yùn)行得很順利,一遍過。
docker images # 查看 nginx:v1 鏡像是否創(chuàng)建成功

這個(gè) V1就是我們構(gòu)建的基礎(chǔ)鏡像了?
docker run -d --name nginx01 -p 88:80 nginx:v1 # 使用 nginx:v1 鏡像創(chuàng)建一個(gè)容器 nginx01
http://你的IP/status.html # 測(cè)試是否可以訪問容器nginx01的web服務(wù)
# 瀏覽器顯示 ok 就沒問題了
服務(wù)是啟動(dòng)了,但為什么會(huì)找不到頁(yè)面呢??

是因?yàn)槲覀冊(cè)赿ockerfile里寫了?把nginx/html/*目錄下的文件全刪除了,訪問html/status.html就可以訪問到的


使用nginx:v1 基礎(chǔ)鏡像構(gòu)建一個(gè)項(xiàng)目鏡像
# 生成文件頁(yè)面展示
touch index.html
?
# 編輯里面的內(nèi)容
vim index.html

# 在里面寫入
hello nginx

# 新創(chuàng)建本地鏡像 并寫入內(nèi)容,指定剛才的 index.html文件
vim Dockerfile_nginx_project_hello
FROM nginx:v1
COPY index.html /usr/local/nginx/html # 需要在當(dāng)前目錄中創(chuàng)建index.html文件

docker build -t nginx:v2 -f Dockerfile_nginx_project_hello . # 使用Dockerfile創(chuàng)建一個(gè)項(xiàng)目鏡像 nginx:v2
docker run -d --name nginx02 -p 89:80 nginx:v2 # 使用 nginx:v2 創(chuàng)建一個(gè)容器 nginx02
http://你的IP/ # 測(cè)試訪問 容器 nginx:v2中的nginx服務(wù)
瀏覽器顯示: I Love





dockerfile的作用是從無到有的構(gòu)建鏡像。它包含安裝運(yùn)行所需的環(huán)境、程序代碼等。這個(gè)創(chuàng)建過程就是使用 dockerfile 來完成的。Dockerfile - 為 docker build 命令準(zhǔn)備的,用于建立一個(gè)獨(dú)立的 image 。
參考于:https://pea328.blog.csdn.net/article/details/104705357