文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

docker怎么打包commit和Dockerfile

2023-07-05 11:39

关注

本篇内容主要讲解“docker怎么打包commit和Dockerfile”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“docker怎么打包commit和Dockerfile”吧!

构建镜像

构建镜像的两种方法:docker commit和docker build。

通过这2种方式构建出来的镜像大小都是一样的;那么既然这2种方式都一样,我们应该使用哪一种呢?

commit

用户提交对容器的修改,并生成新的镜像。

docker commit -a="作者" -m="说明"  -p 容器id/容器名称 镜像新名称:镜像版本# 举例,制作当前的tomcat容器生成镜像docker commit -a="yexindong" -m="首次制作的镜像" tomcat_1 mytomcat:1.0# 参数说明    -a :提交的镜像作者;    -c :使用Dockerfile指令来创建镜像;    -m :提交时的说明文字;    -p :在commit时,将容器暂停。

dockerFile

特点

dickerFile 指令

使用dockerFile创建镜像,实际上就是用脚本文件的方式创建;脚本内指令如下

指令用法

FROM

FROM centos

MAINTAINER

MAINTAINER yexindong<xxx@163.com>

USER

指定用户运行,默认使用root用户,在docker run 中可以通过 -u 选项来覆盖USER指令的设置。

如果不是内置帐户,则必须首先创建该用户;

USER root

ENV

# 环境变量可以随便设置,MYPATH为key ,/user/local是值ENV MYPATH /user/local

EXPOSE

# 开放单个端口EXPOSE 80# 开放多个端口EXPOSE 22 80 8080 3306 8009 8090

ADD

# file 是你当前宿主机的文件名称# /root/home 是你要将file打包到镜像的目录ADD file /root/home

COPY

用法与ADD一致,区别是COPY指令不会解压文件

COPY  file /root/home

CMD

容器内运行命令,只能运行一个命令

# 第一种用法CMD echo 11# 第二种用法CMD ["echo","33"]

ENTRYPOINT

容器内运行命令,用法和CMD一致,区别是可以运行多个命令

# 定义多个 ENTRYPOINT 就可以运行多个命令ENTRYPOINT ["ls","-l"]ENTRYPOINT ["./start.sh"]ENTRYPOINT ps -ef | grep tomcat

CMD 和 ENTRYPOINT 的区别

使用 dockerFile创建镜像

那么现在我们就自己一个tomcat的镜像,首先创建一个文件 dockerFile_1

vim dockerFile_1

脚本内容如下,注意,脚本内的关键字必须是大写的,VOLUME 是匿名挂载的

FROM centosRUN yum install net-tools.x86_64 -yRUN yum -y install vimRUN yum install vi -yVOLUME ["/data/tomcat_file_1","/data/tomcat_file_2"]EXPOSE 8080# 打印当前时间CMD dateWORKDIR /root

创建好脚本文件后,就可以就行构建了,注意后面那个点

docker build -f dockerFile_1 -t xindong_centos_3:1.1 .# 说明 -f 需要构建的脚本文件 -t tag的缩写,构建后的镜像名称:版本号

运行命令后展示以下信息,就表示已经构建成功了

Sending build context to Docker daemon  1.802GBStep 1/8 : FROM centos ---> 5d0da3dc9764Step 2/8 : RUN yum install net-tools.x86_64 -y ---> Using cache ---> a3d489e47eebStep 3/8 : RUN yum -y install vim ---> Using cache ---> f7dfc03c0fd9Step 4/8 : RUN yum install vi -y ---> Using cache ---> c111382ba821Step 5/8 : VOLUME ["data/tomcat_file_1","/data/tomcat_file_2"] ---> Using cache ---> 37a5e93cbe4aStep 6/8 : EXPOSE 8080 ---> Using cache ---> 1a2305853377Step 7/8 : CMD date ---> Using cache ---> 8102785d418dStep 8/8 : WORKDIR /root ---> Using cache ---> ad8a585d32e3Successfully built ad8a585d32e3Successfully tagged xindong_centos_3:latest

查看镜像,这就是我们刚刚创建好的镜像

[root@VM_0_5_centos ~]# docker imagesREPOSITORY       TAG       IMAGE ID       CREATED          SIZExindong_tomcat   1.1       f72aa7e90980   37 seconds ago   680MB

运行这个镜像

# 通过镜像id运行docker run -d 镜像id/镜像名称# 通过镜像名称运行docker run -d 镜像名称:版本号

镜像保存、加载

如果需要将自己构建的镜像发送给别人,又不想通过仓库来共享,就可以用镜像保存的功能,

镜像保存

首先我们将镜像以文件的方式保存到本地磁盘,使用save命令

docker save 镜像id/镜像名称 -o /本地目录/文件名称# 比如这样docker save ad8a585d32e3 -o /root/dockerFile/xx.tar# 运行后,就可以看到,文件已经保存成功了[root@VM_0_5_centos dockerFile]# lltotal 356440-rw------- 1 root root 364991488 Oct 28 18:45 xx.tar

加载已保存的镜像

使用load命令加载,看到如下内容,表示镜像已经加载成功了

[root@VM_0_5_centos dockerFile]# docker load -i /root/dockerFile/xx.tar 2fefb3e7f055: Loading layer [==================================================>]   47.6MB/47.6MB8b589f61fd94: Loading layer [==================================================>]  58.82MB/58.82MB753a6b1d88c8: Loading layer [==================================================>]  19.99MB/19.99MBLoaded image ID: sha256:ad8a585d32e34b301aab4b278704a908f6eca53884fd531a79859dd6054a22ae

接下来我们看看镜像已经加载好了,但是还没有名字

[root@VM_0_5_centos dockerFile]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED       SIZE<none>       <none>    ad8a585d32e3   2 hours ago   356MB

接下来使用tag命令给这个镜像起个名字和版本号吧

[root@VM_0_5_centos dockerFile]# docker tag ad8a585d32e3 xindong_tomcat_2:1.0# 在看看镜像,已经有名字了[root@VM_0_5_centos dockerFile]# docker imagesREPOSITORY         TAG       IMAGE ID       CREATED       SIZExindong_tomcat_2   1.0       ad8a585d32e3   2 hours ago   356MB

区别

其实说白了,不管是docker commit 和是dockefile,都是将目前已有的镜像经过处理后在生成一个新的镜像,它们之间的流程图如下

docker怎么打包commit和Dockerfile

到此,相信大家对“docker怎么打包commit和Dockerfile”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯