Docker容器技术之Docker file
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Docker容器技术之Docker file,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6867字,纯文字阅读大概需要10分钟。
内容图文
![Docker容器技术之Docker file](/upload/InfoBanner/zyjiaocheng/1031/8da56169ed8f413c8aebf5b6fe8994fc.jpg)
前面介绍了:
Docker file简单介绍
Docker可以使用Dockerfile的内容来自动构建镜像。Dockerfile也是一个文件,其中有创建镜像、运行指令等一系列的命令,且每行只支持一个运行命令。
Docker file分为四部分组成:
基础镜像信
维护者信息
镜像操作指令
容器启动时执行指令
dockerfile指令忽略大小写,建议大写,#作为注释,每行只支持一条指令,指令可以带多个参数。
dockerfile指令有:
构建指令:用于构建image,其指定的操作不会在运行image的容器中执行。
设置指令:用于设置image的属性,其指定的操作会在运行image的容器中执行。
Dockerfile指令
Dockerfile指令一共有以下种:
1、FROM
用来指定基础镜像,然后通过在基础镜像上构建新的镜像,基础镜像一般有远程或本地仓库。并且Dockerfile文件第一行必须的FROM指令,如果一个Dockerfile需要创建多个镜像,可以使用多个FROM指令。
#具体使用用法如下:
FROM?<?image_name?>???#默认是latest版本
FROM?<image:version>??#指定版本
2、MAINTAINER
指定镜像的创建者信息
#具体使用法如下:
MAINTAINER?<?name?>
3、RUN
运行所有基础镜像能支持的命令,同样也可以使用多条RUN指令,可以使用\来换行
#具体使用法如下:
RUN?<?command?>
RUN?["executable",?"param1",?"param2"?...?]?(exec?form)?
4、CMD
用于容器启动时的指定操作,它可以是命令,也可以是脚本,但只执行一次,如果有多少默认只会执行最后一个。
#具体使用法如下:
CMD?[“executable”?,”Param1”,?“param2”]使用exec执行,推荐?
CMD?command?param1?param2,在/bin/sh上执行?
CMD?[“Param1”,?“param2”]?提供给ENTRYPOINT做默认参数。
5、EXPOSE
指定容器的端口映射(容器与物理机),运行容器时加上-p参数指定EXPOSE设置的端口。EXPOSE可以设置多个端口号,相应地运行容器配套多次使用-p参数。可以通过docker port +容器需要映射的端口号和容器ID来参考宿主机的映射端口。
#具体使用法如下:
EXPOSE?<port>?[port1?,?port2?............]
6、ENV
在镜像中用于设置环境变量的,然后RUN命令可以使用此设置的环境变量,在容器启动后也以通过docker inspect查看环境变量,可以通过docker run --env key=value来设置或修改环境变量。
#具体使用法如下:
ENV?<key>?<value>
ENV?JAVA_HOME?/usr/local/jdk
7、ADD
复制指定的源文件、目录、URL到容器的指定目录中。所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0。
如果源是一个目录,那么会将该目录下的所有文件添加到container中,不包括目录;
如果源文件是可识别的压缩格式,则docker会帮忙解压缩(注意压缩格式);
如果源是文件且目标目录中不使用斜杠结束,则会将目标目录视为文件,源的内容会写入目标目录;
如果源是文件且目标目录中使用斜杠结束,则会源文件拷贝到目标目录下。
#具体使用法如下:
ADD?<源>?<目标>
8、COPY
复制本地主机的源(默认为Dockerfile所在的目录)到容器中的目标中,目标路径不存在时会自动创建。
#具体使用法如下:
COPY?<源>?<目标>
COPY?web/index.html??/var/web/
路径必须是绝对路径,如果不存在,会自动创建对应目录
路径必须是Dockerfile 所在路径的相对路径
如果是一个目录,只会复制目录下的内容,而目录本身则不会被复制
9、ENTRYPOINT
指定容器启动后执行的命令,多行只执行最后一行。并且不可被docker run提供的参数覆盖。
#具体使用法如下:
ENTRYPOINT?"command"?"param1"?"param2"
10、VOLUME
创建一个可以从本地主机或其它容器挂载的挂载点,一般用于存放数据。与docker run -v也可以实现此功能。
#具体使用法如下:
VOLUME??[directory_name]
VOLUME?/docker_data
11、USER
指定容器运行时使用的用户或UID,后面RUN、CMD、ENTRYPIONT都会使用此用户来运行命令。
#具体使用法如下:
USER?[username/uid]
12、WORKDIR
指定RUN、CMD、ENTRYPIONT指定的命令的运行目录。可以使用多个WORKDIR指令,后续参数如果是相对路径,则会基于之前的命令指定的路径。如:WORKDIR
/data WORKDIR work。最终的路径就是/data/work。path路径也可以是环境变量。
#具体使用方法如下:
WORKDIR?[path]
13、ONBUILD
配置当前所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。就是,这个镜像创建后,如果其它镜像以这个镜像为基础,会先执行这个镜像的ONBUILD命令。
#具体使用法如下:
ONBUILD?[INSTRUCTION]
通过Dockerfile快速构建镜像
接下来,我们通过构建一个Tomcat镜像,来演示Dockerfile的使用方法,前提是安装Docker环境,如何安装Docker环境就不在此赘述了。请猛戳下面的文字:
[root@master?tomcat]#?ll
总用量?190504
-rw-r--r--?1?root?root???9552281?6月???7?15:07?apache-tomcat-8.5.31.tar.gz
-rw-r--r--?1?root?root????????32?7月???3?09:41?index.jsp
-rw-r--r--?1?root?root?185515842?9月??20?2017?jdk-8u144-linux-x64.tar.gz
[root@master?tomcat]#?cat?index.jsp?
welcome?to?mingongge's?web?site
[root@master?tomcat]#?pwd
/root/docker/tomcat
[root@master?tomcat]#?vim?Dockerfile
#config?file?start#
FROM?centos
MAINTAINER?mingongge?<微信公众号:民工哥技术之路>
#add?jdk?and?tomcat?software
ADD?jdk-8u144-linux-x64.tar.gz?/usr/local/
ADD?apache-tomcat-8.5.31.tar.gz?/usr/local/
ADD?index.jsp?/usr/local/apache-tomcat-8.5.31/webapps/ROOT/
#config?java?and?tomcat?ENV
ENV?JAVA_HOME?/usr/local/jdk1.8.0_144
ENV?CLASSPATH?$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV?CATALINA_HOME?/usr/local/apache-tomcat-8.5.31/
ENV?PATH?$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
#config?listen?port?of?tomcat
EXPOSE?8080
#config?startup?command?of?tomcat
CMD?/usr/local/apache-tomcat-8.5.31/bin/catalina.sh?run
#end?of?config-file#
构建过程
[root@master?tomcat]#?docker?build?-t?tomcat-web?.?#这个.不用注释了吧相信懂的人自然懂的
Sending?build?context?to?Docker?daemon?195.1?MB
Step?1/11?:?FROM?centos
?--->?49f7960eb7e4
Step?2/11?:?MAINTAINER?mingongge?<微信公众号:民工哥技术之路>
?--->?Running?in?afac1e218299
?--->?a404621fac22
Removing?intermediate?container?afac1e218299
Step?3/11?:?ADD?jdk-8u144-linux-x64.tar.gz?/usr/local/
?--->?4e22dafc2f76
Removing?intermediate?container?b1b23c6f202a
Step?4/11?:?ADD?apache-tomcat-8.5.31.tar.gz?/usr/local/
?--->?1efe59301d59
Removing?intermediate?container?aa78d5441a0a
Step?5/11?:?ADD?index.jsp?/usr/local/apache-tomcat-8.5.31/webapps/ROOT/
?--->?f09236522370
Removing?intermediate?container?eb54e6eb963a
Step?6/11?:?ENV?JAVA_HOME?/usr/local/jdk1.8.0_144
?--->?Running?in?3aa91b03d2d1
?--->?b497c5482fe0
Removing?intermediate?container?3aa91b03d2d1
Step?7/11?:?ENV?CLASSPATH?$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
?--->?Running?in?f2649b5069be
?--->?9cedb218a8df
Removing?intermediate?container?f2649b5069be
Step?8/11?:?ENV?CATALINA_HOME?/usr/local/apache-tomcat-8.5.31/
?--->?Running?in?39ef620232d9
?--->?ccab256164fe
Removing?intermediate?container?39ef620232d9
Step?9/11?:?ENV?PATH?$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
?--->?Running?in?a58944d03d4a
?--->?f57de761a759
Removing?intermediate?container?a58944d03d4a
Step?10/11?:?EXPOSE?8080
?--->?Running?in?30681437d265
?--->?b906dcc26584
Removing?intermediate?container?30681437d265
Step?11/11?:?CMD?/usr/local/apache-tomcat-8.5.31/bin/catalina.sh?run
?--->?Running?in?437790cc642a
?--->?95204158ee68
Removing?intermediate?container?437790cc642a
Successfully?built?95204158ee68
通过构建的镜像启动容器
[root@master?tomcat]#?docker?run?-d?-p?8080:8080?tomcat-web
b5b65bee5aedea2f48edb276c543c15c913166bf489088678c5a44fe9769ef45
[root@master?tomcat]#?docker?ps
CONTAINER?ID???IMAGE????????COMMAND??????????????????CREATED????????STATUS?????????PORTS????????????????????NAMES
b5b65bee5aed???tomcat-web???"/bin/sh?-c?'/usr/..."???5?seconds?ago??Up?4?seconds???0.0.0.0:8080->8080/tcp???vigilant_heisenberg
访问容器
浏览器输入http://server-ip:8080, 结果如下:
内容总结
以上是互联网集市为您收集整理的Docker容器技术之Docker file全部内容,希望文章能够帮你解决Docker容器技术之Docker file所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。