dockerfile介绍
docker通过读取dockerfile里面的内容可以自动buildimage,dockerfile是一个包含了build过程中需要执行的所有命令的文本文件。也可以理解为dockfile是一种被docker程序解释的脚本,由一条一条的指令组成,每条指令对应linux系统下面的一条命令,由docker程序将这些dockerfile指令翻译成真正的linux命令。dockerfile有自己书写格式和支持的命令,docker程序解决这些命令间的依赖关系,类似于makefile。
docker程序将读取dockerfile,根据指令生成定制的image。相比image这种黑盒子,dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是怎么产生的。有了dockerfile,当我们需要定制自己额外的需求时,只需在dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻烦。
docker构建镜像的方法:commit、dockerfile
1、使用commit来构建镜像:
commit是基于原有镜像基础上构建的镜像,使用此方法构建镜像的目的:保存镜像里的一些配置信息和修改的信息。相当于一个镜像的快照。
2、使用dockerfile来构建镜像:
dockerfile是快速构建所需(自定义)镜像。
dockerfile的指令:
from:指定基础镜像(from是必备的指令,并且必须为第一条指令)。
run:用来执行命令行命令。其基本格式:
shell格式:run<命令>,输入在bash环境中的命令即可,一个dockerfile允许使用run不得超过127层,所以,使用一次run,使用‘\'换行,使用‘&&'执行下一条命令。一般使用此种格式;
exec格式:run<"可执行文件","参数1","参数2">,此种方式像是函数调用中的格式;
copy:复制文件。其基本格式:
格式1:copy<源路径>...<目标路径>
格式2:copy[“<源路径1>”,....."<目标路径>"]
add:更高级的复制文件,在copy的基础上增加了一些功能,如果复制的是压缩包的话,会直接解压,而不需要在使用run解压;
cmd:容器启动命令。其基本格式:
shell格式:cmd<命令>
exec格式:cmd["可执行文件","参数1","参数2"...]
参数列表格式:cmd[“参数1”,“参数2”...],在指定了entrypoint指令后,用cmd指定具体的参数
entrypoint:入口点。其基本格式分为exec和shell,
entrypoint的目的和cmd一样,都是在指定容器启动程序及参数。entrypoint在运行中可以替代,不过比cmd繁琐,需要通过dockerrun的参数--entrypoint来指定。当指定了entrypoint后,cmd的含义就发生了改变,不在是直接运行其命令,而是将cmd的内容作为参数传递给entrypoint指令。其执行时就变成了:<entrypoint>"<cmd>"
env:设置环境变量。(都可以使用这里使用的变量)其基本格式:
格式1:env<key><value>
格式2:env<key1>=<value1><key2>=<value>...
arg:构建参数。构建参数和env的效果一样,都是设置环境变量,所不同的是arg所构建的环境变量在将来容器运行时是不存在的。其基本格式:
格式1:arg<参数名>[=<默认值>]
格式2:该默认值可以在构建命令dockerbuild中用--build-arg<参数名>=<值>来覆盖
volume:定义匿名卷。其基本格式:
格式1:volume["<路径1>","<路径2>"...]
格式2:volume<路径>
expose:暴露端口。expose指令是声明运行时容器所提供的端口,在启动容器时不会在因为这个声明而开启端口。其基本格式:
格式1:expose<端口1>[<端口2>...]
workdir:指定工作目录。其基本格式:
格式1:workdir<工作目录路径>
user:指定当前用户。user是帮助你切换到指定用户。其基本格式:
格式1:user<用户名>
healtcheck:健康检查,判断容器的状态是否正常。其基本格式:
格式1:healtcheck[选项]cmd<命令>:设置检查容器健康状况的命令
格式2:healtchecknone:如果基础镜像有健康检查指令,使用此格式可以屏蔽掉其健康检查指令
构建nginx镜像:
创建一个目录,在该目录里编写dockerfile:
[root@docker~]#mkdirmynginx
[root@docker~]#cdmynginx/
[root@dockermynginx]vidockerfile
其内容如下:
runyum-yinstallgccmakepcre-develzlib-develtarzlib
addnginx-1.15.2.tar.gz/usr/src/

&&https://www.fruan.com/post/configure--prefix=/usr/local/nginx&&make&&makeinstall\
&&ln-s/usr/local/nginx/sbin/nginx/usr/local/sbin/\
runrm-rf/usr/src/nginx-1.15.2
expose80
运行docker命令构建镜像:
[root@dockermynginx]#dockerbuild-tnginx:v3.
sendingbuildcontexttodockerdaemon1.029mb
step2/7:runping-c1www.baidu.com
step3/7:runyum-yinstallgccmakepcre-develzlib-develtarzlib
step4/7:addnginx-1.15.2.tar.gz/usr/src/
step5/7:runcd/usr/src/nginx-1.15.2&&mkdir/usr/local/nginx&&https://www.fruan.com/post/configure--prefix=/usr/local/nginx&&make&&makeinstall&&ln-s/usr/local/nginx/sbin/nginx/usr/local/sbin/&&nginx
step6/7:runrm-rf/usr/src/nginx-1.15.2
successfullybuilt384bed72ea6f
successfullytaggednginx:v3
输出两个successfully即为构建成功!
使用dockerimages查看构建的镜像:
[root@docker~]#dockerrun-dit-p80:80--namenginxnginx:v3
ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858
[root@docker~]#dockerps-a
containeridimagecommandcreatedstatusportsnames
ecaafe119044nginx:v3"/bin/bash"3secondsagoup2seconds0.0.0.0:80->80/tcpnginx
注:这时,你无论怎么启动这个容器,它还是一直处于exited状态。
经过各种解决,最终,终于知道问题出在了哪。原来容器启动时,它是在后台对应着一个线程启动的,它在启动时是已经启动了,但它执行完命令后,就退出了,并没有在后台运行着,所以使用-dit参数让它在后台运行即可。
[root@docker~]#dockerrun-dit-p80:80--namenginxnginx:v3
ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858
[root@docker~]#dockerps-a
containeridimagecommandcreatedstatusportsnames
ecaafe119044nginx:v3"/bin/bash"3secondsagoup2seconds0.0.0.0:80->80/tcpnginx
然而.......
此时又出现了问题,它虽然起来了,但nginx的web网页界面访问不了,显示拒绝连接!!!!
[root@docker~]#curl192.168.100.22
curl:(7)failedconnectto192.168.100.22:80;拒绝连接
[root@docker~]#elinks--dump192.168.100.22
elinks:拒绝连接
然后,又经过问百度,fq看谷歌,终于找到了问题的所在。原来只要使用exec进入到容器里启动nginx就可以了。
[root@docker~]#dockerexec-itnginxbash
[root@ecaafe119044/]#nginx
[root@ecaafe119044/]#exit
exit
[root@docker~]#curl192.168.100.22
<title>welcometonginx!</title>
font-family:tahoma,verdana,arial,sans-serif;
<h1>welcometonginx!</h1>
<p>ifyouseethispage,thenginxwebserverissuccessfullyinstalledand
working.furtherconfigurationisrequired.</p>
<p>foronlinedocumentationandsupportpleasereferto
<ahref="http://nginx.org/"rel="externalnofollow">nginx.org</a>.<br/>
commercialsupportisavailableat
<ahref="http://nginx.com/"rel="externalnofollow">nginx.com</a>.</p>
<p><em>thankyouforusingnginx.</em></p>
</html>
以上就是怎么使用dockerfile构建nginx镜像的详细内容,更多请关注主机测评网其它相关文章!
本文来源:国外服务器--怎么使用dockerfile构建nginx镜像(dockerfile构建lnmp镜像)
本文地址:https://www.idcbaba.com/guowai/4784.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



