日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker 制作镜像

發(fā)布時(shí)間:2025/5/22 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker 制作镜像 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

docker鏡像制作的兩種方法:
1,基于docker commit 制作鏡像
2,基于dockerfile制作鏡像,為主流鏡像制作方式。

基于基礎(chǔ)鏡像定制后,使用commit制作自定義鏡像
1,使用docker commit利用運(yùn)行的容器來制作自定義鏡像
docker commit 容器id centos7_ifconfig #簡單制作一個(gè)有ifconfig命令的鏡像

2,查看制作的鏡像信息
docker inspect centos7_ifconfig

3,使用自定義的鏡像來啟動容器
docker run -it centos7_ifconfig /bin/bash
ifconfig #測試一下是否支持ifconfig命令

4,使用自定義的鏡像來啟動后臺容器
docker run -d centos7_ifconfig /bin/bash -c 'while true;do echo hello; sleep 3; done'

★以tomcat容器為例:

?啟動 tomcat 容器
docker run -it -p 主機(jī)端口:容器端口 鏡像名稱

?修改tomcat
保存提交重命名鏡像
docker commit -a=”作者” -m=”備注” 容器ID 鏡像名:tag
啟動新的鏡像

●例:
①連接tomcat容器:docker exec -it 容器id /bin/bash #需要提供一個(gè)終端
②修改webapps下的內(nèi)容。
提交:docker commit -a="mydocker_tomcat" -m="delete examples" 容器id nm/tomcat:1.0

基于DockerFile制作自定義鏡像

(1),DockerFile 文件
Docker可以通過從Dockerfile中讀取指令來自動構(gòu)建鏡像。
Dockerfile是一個(gè)文本文檔,包含用戶可以在命令行上調(diào)用的所有命令,以組合鏡像。
使用docker build,docker即可啟動構(gòu)建工作,構(gòu)建過程為連續(xù)執(zhí)行DockerFile中的
多個(gè)命令行指令。
?官方例:
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="20190305"

CMD ["/bin/bash"]

(2),DockerFile 基礎(chǔ)語法
?關(guān)鍵字指令必須為大寫字母,且至少需要一個(gè)參數(shù);
?關(guān)鍵字指令從上到下順序執(zhí)行;
?#表示注釋;
?每條指令執(zhí)行都會創(chuàng)建一個(gè)鏡像層;

(3),DockerFile 執(zhí)行流程
?docker從基礎(chǔ)鏡像運(yùn)行一個(gè)容器。
?執(zhí)行一條指令并對容器做出修改。
?執(zhí)行類似docker commit的操作,提交一個(gè)新的鏡像層。
?docker再基于剛剛提交的鏡像,運(yùn)行一個(gè)新容器。
?執(zhí)行dockerfile中的下一條指令直到所有的指令都執(zhí)行完成。

(4),DockerFile 關(guān)鍵字指令

FROM : FROM指令初始化新的構(gòu)建階段,設(shè)置基本鏡像。
MAINTAINER(過期): 維護(hù)者指令,設(shè)置生成鏡像的作者信息等。
RUN: 將在當(dāng)前鏡像之上的新層中執(zhí)行任何命令,并提交結(jié)果。
EXPOSE: 容器在運(yùn)行時(shí)監(jiān)聽指定的網(wǎng)絡(luò)端口。EXPORT不會讓主機(jī)訪問容器的端口。
WORKDIR: 為文件中跟隨它的任何RUN、CMD、ENTRYPONT、COPY和ADD指令設(shè)置工作目錄。
ENV: 設(shè)置環(huán)境變量
ADD: 復(fù)制文件,并將它們添加到鏡像文件系統(tǒng)的指定目錄。
COPY: 類似ADD,向鏡像中添加文件。
VOLUME: 設(shè)置數(shù)據(jù)卷
CMD: 一個(gè)文件中只能有一條CMD指令。若列出了多個(gè)CMD,則只有最后一個(gè)CMD生效。
ENTRYPOINT: 類似CMD,鏡像啟動時(shí)運(yùn)行的命令,不可替換。
ONBUILD : 當(dāng)鏡像被用作另一個(gè)構(gòu)建的基礎(chǔ)時(shí),ONBUILD指令在鏡像中添加了一個(gè)稍后要執(zhí)行的觸發(fā)指令。

●阿里云鏡像搜索:https://cr.console.aliyun.com/cn-qingdao/instances/images


(5)docker制作鏡像示例1(Centos鏡像)

★自定義鏡像 centos
1、編寫DockerFile 文件
2、使用docker build 構(gòu)建鏡像
3、使用docker run 創(chuàng)建容器

★DockerFile

FROM centos:mytag LABEL author="xxx@zzz.com" #或:MAINTAINER liming liming_01@163.com ENV myhome /tmp WORKDIR $myhome RUN yum -y install vim COPY test.txt /etc/ #拷貝test.txt到etc下。 RUN mkdir /datavolume VOLUME /datavolume #設(shè)置一個(gè)數(shù)據(jù)卷。此時(shí),主機(jī)中的數(shù)據(jù)卷自動生成。CMD /bin/bash

★構(gòu)建鏡像

docker build -f dockerfile_path -t image:tag . #最后的.勿忘。
例:docker build -f /mydocker/DockerFile -t my_centos:1.1 .
測試:docker run -it my_centos:1.1 /bin/bash


(6)docker制作鏡像示例2(tomcat鏡像)
環(huán)境:centos + jdk8 + tomcat + vim

1 #選擇基礎(chǔ)鏡像 2 FROM centos 3 #設(shè)置描述信息 4 LABEL maintainer="xxx@zzz.com" 5 #測試COPY從主機(jī)拷貝文件到容器 6 COPY testcp.txt /usr/local/testcp.txt 7 #在基礎(chǔ)鏡像上安裝軟件 apache-tomcat-9.0.13.tar.gz 和 jdk-8u181-linux-x64.tar.gz 8 ADD jdk-8u181-linux-x64.tar.gz /usr/local/ #從主機(jī)的當(dāng)前路徑拷貝jdk-8u181到容器的/usr/local/ 9 ADD apache-tomcat-9.0.13.tar.gz /usr/local/ 10 #安裝 vim 編輯器 11 RUN yum -y install vim 12 #設(shè)置 容器數(shù)據(jù)卷 13 RUN mkdir /dataVolume 14 VOLUME /dataVolume 15 16 #設(shè)置工作路徑 17 ENV MYPATH /usr/local 18 WORKDIR $MYPATH 19 #設(shè)置環(huán)境變量 20 ENV JAVA_HOME /usr/local/jdk1.8.0_181 21 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 22 ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.13 23 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.13 24 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin 25 #容器監(jiān)聽端口 26 EXPOSE 8080 27 #啟動時(shí)運(yùn)行 tomcat 28 CMD /usr/local/apache-tomcat-9.0.13/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.13/bin/logs/catalina.out View Code

★構(gòu)建鏡像

docker build -t my_tomcat . #省略的參數(shù),從當(dāng)前目錄找。

★利用當(dāng)前鏡像創(chuàng)建容器。
docker run -d -p 8888:8080 --name mytomcat01 mytomcat

?

★附:

docker build [OPTIONS] PATH | URL | -

OPTIONS說明:
--build-arg=[] :設(shè)置鏡像創(chuàng)建時(shí)的變量;
--cpu-shares :設(shè)置 cpu 使用權(quán)重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配額;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的內(nèi)存 id;
--disable-content-trust :忽略校驗(yàn),默認(rèn)開啟;
-f :指定要使用的Dockerfile路徑;
--force-rm :設(shè)置鏡像過程中刪除中間容器;
--isolation :使用容器隔離技術(shù);
--label=[] :設(shè)置鏡像使用的元數(shù)據(jù);
-m :設(shè)置內(nèi)存最大值;
--memory-swap :設(shè)置Swap的最大值為內(nèi)存+swap,"-1"表示不限swap;
--no-cache :創(chuàng)建鏡像的過程不使用緩存;
--pull :嘗試去更新鏡像的新版本;
--quiet, -q :安靜模式,成功后只輸出鏡像 ID;
--rm : 設(shè)置鏡像成功后刪除中間容器;
--shm-size : 設(shè)置/dev/shm的大小,默認(rèn)值是64M;
--ulimit :Ulimit配置。
--tag, -t: 鏡像的名字及標(biāo)簽,通常 name:tag 或者 name 格式;可以在一次構(gòu)建中為一個(gè)鏡像設(shè)置多個(gè)標(biāo)簽。
--network: 默認(rèn) default。在構(gòu)建期間設(shè)置RUN指令的網(wǎng)絡(luò)模式

轉(zhuǎn)載于:https://www.cnblogs.com/mountain2011/p/11223452.html

總結(jié)

以上是生活随笔為你收集整理的Docker 制作镜像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。