Docker 制作镜像
docker鏡像制作的兩種方法:
1,基于docker commit 制作鏡像
2,基于dockerfile制作鏡像,為主流鏡像制作方式。
【基于基礎鏡像定制后,使用commit制作自定義鏡像】
1,使用docker commit利用運行的容器來制作自定義鏡像
docker commit 容器id centos7_ifconfig #簡單制作一個有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 主機端口:容器端口 鏡像名稱
?修改tomcat
保存提交重命名鏡像
docker commit -a=”作者” -m=”備注” 容器ID 鏡像名:tag
啟動新的鏡像
●例:
①連接tomcat容器:docker exec -it 容器id /bin/bash #需要提供一個終端
②修改webapps下的內容。
提交:docker commit -a="mydocker_tomcat" -m="delete examples" 容器id nm/tomcat:1.0
【基于DockerFile制作自定義鏡像】
(1),DockerFile 文件
Docker可以通過從Dockerfile中讀取指令來自動構建鏡像。
Dockerfile是一個文本文檔,包含用戶可以在命令行上調用的所有命令,以組合鏡像。
使用docker build,docker即可啟動構建工作,構建過程為連續執行DockerFile中的
多個命令行指令。
?官方例:
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 基礎語法
?關鍵字指令必須為大寫字母,且至少需要一個參數;
?關鍵字指令從上到下順序執行;
?#表示注釋;
?每條指令執行都會創建一個鏡像層;
(3),DockerFile 執行流程
?docker從基礎鏡像運行一個容器。
?執行一條指令并對容器做出修改。
?執行類似docker commit的操作,提交一個新的鏡像層。
?docker再基于剛剛提交的鏡像,運行一個新容器。
?執行dockerfile中的下一條指令直到所有的指令都執行完成。
(4),DockerFile 關鍵字指令
FROM : FROM指令初始化新的構建階段,設置基本鏡像。
MAINTAINER(過期): 維護者指令,設置生成鏡像的作者信息等。
RUN: 將在當前鏡像之上的新層中執行任何命令,并提交結果。
EXPOSE: 容器在運行時監聽指定的網絡端口。EXPORT不會讓主機訪問容器的端口。
WORKDIR: 為文件中跟隨它的任何RUN、CMD、ENTRYPONT、COPY和ADD指令設置工作目錄。
ENV: 設置環境變量
ADD: 復制文件,并將它們添加到鏡像文件系統的指定目錄。
COPY: 類似ADD,向鏡像中添加文件。
VOLUME: 設置數據卷
CMD: 一個文件中只能有一條CMD指令。若列出了多個CMD,則只有最后一個CMD生效。
ENTRYPOINT: 類似CMD,鏡像啟動時運行的命令,不可替換。
ONBUILD : 當鏡像被用作另一個構建的基礎時,ONBUILD指令在鏡像中添加了一個稍后要執行的觸發指令。
●阿里云鏡像搜索:https://cr.console.aliyun.com/cn-qingdao/instances/images
(5)docker制作鏡像示例1(Centos鏡像)
★自定義鏡像 centos
1、編寫DockerFile 文件
2、使用docker build 構建鏡像
3、使用docker run 創建容器
★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 #設置一個數據卷。此時,主機中的數據卷自動生成。CMD /bin/bash★構建鏡像
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鏡像)
環境:centos + jdk8 + tomcat + vim
★構建鏡像
docker build -t my_tomcat . #省略的參數,從當前目錄找。
★利用當前鏡像創建容器。
docker run -d -p 8888:8080 --name mytomcat01 mytomcat
?
★附:
docker build [OPTIONS] PATH | URL | -
OPTIONS說明:
--build-arg=[] :設置鏡像創建時的變量;
--cpu-shares :設置 cpu 使用權重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配額;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的內存 id;
--disable-content-trust :忽略校驗,默認開啟;
-f :指定要使用的Dockerfile路徑;
--force-rm :設置鏡像過程中刪除中間容器;
--isolation :使用容器隔離技術;
--label=[] :設置鏡像使用的元數據;
-m :設置內存最大值;
--memory-swap :設置Swap的最大值為內存+swap,"-1"表示不限swap;
--no-cache :創建鏡像的過程不使用緩存;
--pull :嘗試去更新鏡像的新版本;
--quiet, -q :安靜模式,成功后只輸出鏡像 ID;
--rm : 設置鏡像成功后刪除中間容器;
--shm-size : 設置/dev/shm的大小,默認值是64M;
--ulimit :Ulimit配置。
--tag, -t: 鏡像的名字及標簽,通常 name:tag 或者 name 格式;可以在一次構建中為一個鏡像設置多個標簽。
--network: 默認 default。在構建期間設置RUN指令的網絡模式
轉載于:https://www.cnblogs.com/mountain2011/p/11223452.html
總結
以上是生活随笔為你收集整理的Docker 制作镜像的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio2005入门.
- 下一篇: Psscor2 - 微软内部的SOS升级