我的编程空间,编程开发者的网络收藏夹
学习永远不晚

docker打包commit和Dockerfile过程

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

特点

  • 每个指令都必须是大写
  • 执行顺序是从上到下顺序执行
  • # 表示注释
  • 每个指令都会创建提交一个新的镜层,并提交(每个指令都是一个docker commit)
  • dockerFile是面向开发人员的;由开发人员构建镜像,就需要写dockerFile文件,然后将镜像交付给运维直接部署即可;不需要运维配置繁杂的jvm参数命令;
  • dockerFile正在逐渐称为企业的交付标注,所以开发人员必须要掌握;

dickerFile 指令

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

  • FROM:指定基础镜像(它的妈妈是谁)
  • MAINTAINER:指定作者(告诉别人,是谁创造了它),一般都是姓名 + 邮箱
  • LABEL:指定标签信息
  • USER:设置容器运行时的用户
  • RUN:在build过程要运行的命令  (在容器外运行,也就是在宿主机运行的命令,在这里我们可以给容器安装一些应用程序 yum install xxxx)
  • ADD:添加文件到镜像中(往它肚子里放点东西),如果.tar.gz文件的话, 会自动解压
  • COPY:类似ADD,将文件拷贝到镜像,不会解压压缩文件
  • ENV:设置环境变量
  • VOLUME:设置文件挂载(给它一个存放行李的地方),默认是匿名挂载
  • EXPOSE:暴露端口,指定容器运行时开放的端口,运行也需要开放这个端口才能访问  docker run -d  -p 8080:8080 镜像id (打开一扇窗,让风(数据)可以来去自如)
  • CMD:容器运行时要执行的命令(在容器内运行的命令),可用来运行默认要运行的程序,只有最后一个CMD才会运行,且只运行一次
  • ENTRYPOINT:和CMD一样,但是可以追加命令;
  • ONBIUILD:当构建一个被继承dockerFile,这个时候就会运行ONBUILD 指令,属于触发指令
  • WORKDIR:指定工作目录,也就是登陆后默认进去的目录;

指令用法

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 的区别

  • CMD 相同的指令只有最后一个会生效
  • ENTRYPOINT可以追加命令;

使用 dockerFile创建镜像

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

vim dockerFile_1

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

FROM centos

RUN yum install net-tools.x86_64 -y
RUN yum -y install vim
RUN yum install vi -y
VOLUME ["/data/tomcat_file_1","/data/tomcat_file_2"]
EXPOSE 8080
# 打印当前时间
CMD date
WORKDIR /root

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

docker build -f dockerFile_1 -t xindong_centos_3:1.1 .

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

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

Sending build context to Docker daemon  1.802GB
Step 1/8 : FROM centos
 ---> 5d0da3dc9764
Step 2/8 : RUN yum install net-tools.x86_64 -y
 ---> Using cache
 ---> a3d489e47eeb
Step 3/8 : RUN yum -y install vim
 ---> Using cache
 ---> f7dfc03c0fd9
Step 4/8 : RUN yum install vi -y
 ---> Using cache
 ---> c111382ba821
Step 5/8 : VOLUME ["data/tomcat_file_1","/data/tomcat_file_2"]
 ---> Using cache
 ---> 37a5e93cbe4a
Step 6/8 : EXPOSE 8080
 ---> Using cache
 ---> 1a2305853377
Step 7/8 : CMD date
 ---> Using cache
 ---> 8102785d418d
Step 8/8 : WORKDIR /root
 ---> Using cache
 ---> ad8a585d32e3
Successfully built ad8a585d32e3
Successfully tagged xindong_centos_3:latest

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

[root@VM_0_5_centos ~]# docker images
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
xindong_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]# ll
total 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.6MB
8b589f61fd94: Loading layer [==================================================>]  58.82MB/58.82MB
753a6b1d88c8: Loading layer [==================================================>]  19.99MB/19.99MB
Loaded image ID: sha256:ad8a585d32e34b301aab4b278704a908f6eca53884fd531a79859dd6054a22ae

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

[root@VM_0_5_centos dockerFile]# docker images
REPOSITORY   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 images
REPOSITORY         TAG       IMAGE ID       CREATED       SIZE
xindong_tomcat_2   1.0       ad8a585d32e3   2 hours ago   356MB

区别

  • 使用commit的话,其他人或者过一段时间后自己也不知道这个镜像是怎么做出来的,都安装了什么。。但是使用Dockerfile构建的镜像,我们能够很清楚看到是执行了哪些命令。
  • 既然使用docker commit这么不方便,那我们为什么还要学习它呢?其实仔细想一下docker build的每一步构建出来的镜像是不是就是通过docker commit构建出来的。因此学习docker commit可以让我们更好的理解docker build;

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

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

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

docker打包commit和Dockerfile过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

docker打包commit和Dockerfile过程

这篇文章主要介绍了docker打包commit和Dockerfile过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-12

docker怎么打包commit和Dockerfile

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

docker打包golang应用的过程分析

这篇文章主要介绍了docker打包golang应用的过程分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-14

python元组打包和解包过程详解

1、在将多个以逗号分隔的值赋给一个变量时,多个值被打包成一个元组类型。当我们将一个元组赋给多个变量时,它将解包成多个值,然后分别将其赋给相应的变量。# 打包 a = 1, 10, 100 print(type(a), a) #
2022-06-02

chatgpt-web之docker打包流程

这篇文章主要介绍了chatgpt-web中docker的打包流程,文中有详细的代码示例,对学习或工作有一定的帮助,需要的朋友可以参考下
2023-05-19

python flask项目打包成docker镜像发布的过程

这篇文章主要介绍了python flask项目打包成docker镜像发布,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-19

python中元组打包和解包的过程分析

这篇文章主要讲解了“python中元组打包和解包的过程分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中元组打包和解包的过程分析”吧!1、在将多个以逗号分隔的值赋给一个变量时,
2023-06-20

webpack打包过程如何调试?

本文适用于已经会使用webpack的前端开发人员,但是想进一步了解webpack细节和进阶。首先请读者按照我前一篇文章 Webpack 10分钟入门介绍的步骤,在本地搭建一个webpack的hello world项目。搭好之后的项目结构如下
2023-06-03

docker打包python镜像的全教程分享

Docker打包Python镜像教程指导您构建和打包PythonDocker镜像。先决条件:安装Docker和Python。步骤:创建Dockerfile和requirements.txt文件。编写主Python脚本。构建Docker镜像。运行Docker容器。推送到DockerHub(可选)。最佳实践:使用多阶段构建优化镜像。分开代码和依赖项。使用最新Python版本。优化Dockerfile。使用注册表存储镜像。
docker打包python镜像的全教程分享
2024-04-02

基于tsup打包TypeScript实现过程

这篇文章主要为大家介绍了基于tsup打包TypeScript实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-21

编程热搜

目录