docker封裝鏡像及優(yōu)化方式
鏡像分層結(jié)構(gòu)
1.共享宿主機(jī)的kernel
2.base鏡像提供的是最小的Linux發(fā)行版
3.同一docker主機(jī)支持運(yùn)行多種Linux發(fā)行版
4.采用分層結(jié)構(gòu)的最大好處是:共享資源
比如當(dāng)你已經(jīng)拉取Nginx 1.17版本的鏡像之后,若再次拉取Nginx 1.16 版本時(shí),只需要下載不同的層即可,相同的層可以共享使用,這樣就可以節(jié)省資源和網(wǎng)絡(luò)帶寬。
當(dāng)你刪除其中某個(gè)鏡像版本時(shí),也只會(huì)刪除掉不一樣的層,因?yàn)槠渲泄蚕淼膶恿硪粋€(gè)版本需要使用。
鏡像的構(gòu)建
運(yùn)行容器+修改容器+將容器保存為新的鏡像
缺點(diǎn):
- 效率低、可重復(fù)性弱、容易出錯(cuò)
- 使用者無法對(duì)鏡像進(jìn)行審計(jì),存在安全隱患

交互式運(yùn)行此鏡像
-it交互式

刪除
docker rm -f 刪除正在運(yùn)行的鏡像

運(yùn)行
新建三個(gè)文件

docker ps -a 顯示已經(jīng)停掉的鏡像
封裝鏡像
把剛才創(chuàng)建的三個(gè)文件封裝到v1,如果只退出docker,不會(huì)被刪

多加了一層,目前所在的操作都在demo里,而不是busybox

–rm 退出時(shí),自動(dòng)刪除,回收


之前的只封裝在最上面一層,刪除時(shí)也只刪除了一層
rmi 是刪除鏡像

Dockfile
和之前的commit是一一對(duì)應(yīng)的



定制一個(gè)首頁,放進(jìn)目錄路徑里

后面的.代表,從各處尋找文件,建立
會(huì)找到之前創(chuàng)建的dockerfile


missing代表在官方構(gòu)建的,而不是本機(jī)執(zhí)行


相對(duì)路徑,不能把文件放在根底下,最好創(chuàng)建一個(gè)空的文件夾比如/docker


換一個(gè)centos鏡像




如果直接ctrl+d就會(huì)刪除,ctrl+q+p之后,就會(huì)暫時(shí)保存。attach又會(huì)恢復(fù)


dockerfile常用命令
FROM
- 指定base鏡像
- 如果本地不存在會(huì)從遠(yuǎn)程倉庫下載
MAINTAINER
- 設(shè)置鏡像的作者
COPY
- 把文件從build context復(fù)制到鏡像
- 支持兩種形式:COPY src dest 和 COPY [“src”, “dest”]
ADD
- 用法與COPY類似,不同的是src可以是歸檔壓縮文件,文件會(huì)被自動(dòng)解壓到
- dest,也可以自動(dòng)下載URL并拷貝到鏡像:
ADD html.tar /var/www ADD http://ip/html.tar /var/www
ENV
- 設(shè)置環(huán)境變量,變量可以被后續(xù)的指令使用:
ENV HOSTNAME sevrer1.example.com
EXPOSE
- 如果容器中運(yùn)行應(yīng)用服務(wù),可以把服務(wù)端口 暴露出去:
- EXPOSE 80
VOLUME
- 申明數(shù)據(jù)卷,通常指定的是應(yīng)用的數(shù)據(jù)掛在點(diǎn):
VOLUME [“/var/www/html”]
WORKDIR
- 為RUN、CMD、ENTRYPOINT、ADD和COPY指令設(shè)置鏡像中的當(dāng)
- 前工作目錄,如果目錄不存在會(huì)自動(dòng)創(chuàng)建。
卷


在宿主機(jī)自動(dòng)創(chuàng)建目錄,掛載在容器內(nèi)



刪除之后還在,卷的目的就是持久化
在centos7中創(chuàng)建




shell和exec的區(qū)別



cmd可以被覆蓋
做一個(gè)完整的nginx封裝
FROM centos:7 ADD nginx-1.21.1.tar.gz /mnt RUN yum install -y gcc make pcre-devel openssl-devel WORKDIR /mnt/nginx-1.21.1 RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc RUN ./configure --with-http_ssl_module --with-http_stub_status_module RUN make RUN make install COPY index.html /usr/local/nginx/html CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]




鏡像的優(yōu)化

太大了,開始優(yōu)化
減少鏡像層
FROM centos:7 ADD nginx-1.21.1.tar.gz /mnt WORKDIR /mnt/nginx-1.21.1 RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --with-http_stub_status_module && make && make install && yum clean all && rm -rf /mnt/nginx-1.21.1 COPY index.html /usr/local/nginx/html CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]


報(bào)錯(cuò)
添加:net.ipv4.ip_forward=1



多階段構(gòu)建
FROM centos:7 as build ADD nginx-1.21.1.tar.gz /mnt WORKDIR /mnt/nginx-1.21.1 RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --with-http_stub_status_module && make && make install && yum clean all && rm -rf /mnt/nginx-1.21.1 FROM centos:7 COPY --from=build /usr/local/nginx /usr/local/nginx COPY index.html /usr/local/nginx/html CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]



選擇更加精簡(jiǎn)的基礎(chǔ)鏡像
FROM nginx:latest as base
ARG TIME_ZONE
RUN mkdir -p /opt/var/cache/nginx && \
cp -a --parents /usr/lib/nginx /opt && \
cp -a --parents /usr/share/nginx /opt && \
cp -a --parents /var/log/nginx /opt && \
cp -aL --parents /var/run /opt && \
cp -a --parents /etc/nginx /opt && \
cp -a --parents /etc/passwd /opt && \
cp -a --parents /etc/group /opt && \
cp -a --parents /usr/sbin/nginx /opt && \
cp -a --parents /usr/sbin/nginx-debug /opt && \
cp -a --parents /lib/x86_64-linux-gnu/ld-* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libc* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libdl* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libpthread* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libcrypt* /opt && \
cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime
FROM gcr.io/distroless/base-debian10
COPY --from=base /opt /
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]




總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker Machine遠(yuǎn)程部署Docker的方法
本篇文章主要介紹了Docker Machine遠(yuǎn)程部署Docker的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
使用Docker部署Spring Boot的實(shí)現(xiàn)方法
這篇文章主要介紹了使用Docker部署Spring Boot的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
dubbo服務(wù)引用創(chuàng)建Invoker代理對(duì)象
這篇文章主要為大家介紹了dubbo服務(wù)引用創(chuàng)建Invoker代理對(duì)象示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
深入理解Docker Load和Docker Import的區(qū)別詳解
Docker是一個(gè)流行的容器化平臺(tái),提供了豐富的命令和功能,其中docker load和docker import是兩個(gè)常用的命令,用于加載Docker鏡像,這篇文章主要給大家介紹了關(guān)于Docker Load和Docker Import區(qū)別的相關(guān)資料,需要的朋友可以參考下2024-03-03
Docker Compose使用手冊(cè)之場(chǎng)景、文件與命令詳解
DockerCompose是Docker官方的多容器應(yīng)用管理和編排工具,它簡(jiǎn)化了多容器應(yīng)用的部署和管理,支持一鍵啟動(dòng)、停止服務(wù),配置服務(wù)依賴和環(huán)境變量,管理網(wǎng)絡(luò)和卷等,下面小編就和大家詳細(xì)介紹一下Docker Compose的使用場(chǎng)景、文件與命令吧2026-05-05
解決Docker pull拉取鏡像報(bào)錯(cuò)“Error response from
解決Docker鏡像拉取問題的步驟包括:檢查報(bào)錯(cuò)信息,修改daemon.json添加網(wǎng)易鏡像加速,重啟Docker服務(wù),排查DNS解析及host配置,最后重新拉取鏡像,總結(jié)為個(gè)人經(jīng)驗(yàn)分享,供參考學(xué)習(xí)2025-08-08

