怎么使用dockerfile构建nginx镜像(dockerfile构建lnmp镜像)

怎么使用dockerfile构建nginx镜像(dockerfile构建lnmp镜像)

浏览次数:
信息来源: 用户投稿
更新日期: 2026-04-16
文章简介

dockerfile介绍docker通过读取dockerfile里面的内容可以自动buildimage,dockerfile是一个包含了build过程中需要执行的所有命令的文本文件。也可以理解为

2025阿里云双十一服务器活动

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/

怎么使用dockerfile构建nginx镜像,dockerfile构建lnmp镜像

&&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镜像的详细内容,更多请关注主机测评网其它相关文章!

标签:
共享服务器的作用
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!