Docker 制作镜像
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
★構(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio2005入门.
- 下一篇: Psscor2 - 微软内部的SOS升级