搜索
首页运维Nginx怎么使用dockerfile构建nginx镜像

dockerfile介绍

docker通过读取dockerfile里面的内容可以自动build image,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 99a2c3ea6fd7e6f38f79ffc1b9e66846 ,输入在bash环境中的命令即可,一个dockerfile允许使用run不得超过127层,所以,使用一次run, 使用 ‘ \' 换行,使用‘ && '执行下一条命令。一般使用此种格式;

      exec格式: run c691a4f95f2e98a4b734f6c1ea3560c5,此种方式像是函数调用中的格式;

  copy: 复制文件。 其基本格式:

      格式1:copy 0a0e58789b71ddc0f0b4adb1fb57e597...9446284aab835e198854318423b30101

      格式2:copy [“b8a7b7f7ad42d5c9f4c738d073852cfa”,....."9446284aab835e198854318423b30101"]

  add: 更高级的复制文件,在copy的基础上增加了一些功能,如果复制的是压缩包的话,会直接解压,而不需要在使用run解压;

  cmd:容器启动命令。其基本格式:

      shell格式: cmd 99a2c3ea6fd7e6f38f79ffc1b9e66846

      exec格式: cmd ["可执行文件", "参数1", "参数2"...]

      参数列表格式: cmd [“参数1”, “参数2”...],在指定了entrypoint指令后,用cmd指定具体的参数

  entrypoint: 入口点。其基本格式分为exec和shell,

      entrypoint的目的和cmd一样,都是在指定容器启动程序及参数。entrypoint在运行中可以替代,不过比cmd繁琐,需要通过docker run 的参数--entrypoint 来指定。当指定了entrypoint后,cmd的含义就发生了改变,不在是直接运行其命令,而是将cmd的内容作为参数传递给entrypoint指令。其执行时就变成了: 8a39e2698e9eef0572a9b4b9fa5c7dff "50d4d6a8af5bf45485b99ee0b073768a"

  env: 设置环境变量。(都可以使用这里使用的变量)其基本格式:

      格式1:env 42538adbdb6240b2b083a000a615d5bd 8487820b627113dd990f63dd2ef215f3

      格式2:env 3ba5e49051ccc5a4114efbc8db02360d=d4ee4c91dc10443f1c00a11ae5c3942e d8fc47613031c90c3cd0bd51c24a5cae=8487820b627113dd990f63dd2ef215f3...

  arg: 构建参数。构建参数和env的效果一样,都是设置环境变量,所不同的是arg所构建的环境变量在将来容器运行时是不存在的。其基本格式:

      格式1: arg f0b2417ea7f70d4e2aa98099157b4694 [=b9124a323e4c592b98b178c47207a463]

      格式2: 该默认值可以在构建命令 docker build 中用 --build-arg f0b2417ea7f70d4e2aa98099157b4694=f0464fc328e77ed3a5392ffbcda634c1 来覆盖

  volume: 定义匿名卷。 其基本格式:

      格式1: volume ["fcac428736e838fcaec689f608a3005f", "b54243297245a6f0cd4daf337513ac45"...]

      格式2: volume e45cbf031722b49857b1ccbd4272d4cb

  expose: 暴露端口。expose指令是声明运行时容器所提供的端口,在启动容器时不会在因为这个声明而开启端口。 其基本格式:

      格式1: expose c0d6d87bef2e1f1b0f01dee3b41ece82 [df0ea443e75185958b8f7ac0ff370e62...]

  workdir: 指定工作目录。其基本格式:

      格式1: workdir 2cd408308f109866ccf9a5df4ccc4c31

  user: 指定当前用户。user是帮助你切换到指定用户。 其基本格式:

      格式1: user 86221bd1fc879dffc233e57aa17d879d

  healtcheck: 健康检查,判断容器的状态是否正常。 其基本格式:

      格式1: healtcheck [选项] cmd 99a2c3ea6fd7e6f38f79ffc1b9e66846 :设置检查容器健康状况的命令

      格式2: healtcheck none: 如果基础镜像有健康检查指令,使用此格式可以屏蔽掉其健康检查指令

构建nginx镜像:

创建一个目录,在该目录里编写dockerfile:

[root@docker ~]# mkdir mynginx
[root@docker ~]# cd mynginx/
[root@docker mynginx]# pwd
/root/mynginx
[root@docker mynginx]#

下载nginx源码包到创建的目录下(mynginx目录下):

[root@docker ~]# wget -p /root/mynginx/ http://nginx.org/download/nginx-1.15.2.tar.gz

编写dockerfile:

[root@docker mynginx]# vi dockerfile

其内容如下:

from centos
run ping -c 1 www.baidu.com
run yum -y install gcc make pcre-devel zlib-devel tar zlib
add nginx-1.15.2.tar.gz /usr/src/
run cd /usr/src/nginx-1.15.2 \
  && mkdir /usr/local/nginx \
  && ./configure --prefix=/usr/local/nginx && make && make install \
  && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ \
  && nginx
run rm -rf /usr/src/nginx-1.15.2
expose 80

运行docker命令构建镜像:

[root@docker mynginx]# docker build -t nginx:v3 .
sending build context to docker daemon 1.029mb
step 1/7 : from centos
 ---> 5182e96772bf
step 2/7 : run ping -c 1 www.baidu.com
 ---> using cache
 ---> 2f70f8abaf2a
step 3/7 : run yum -y install gcc make pcre-devel zlib-devel tar zlib
 ---> using cache
 ---> dbdda4b7ae6f
step 4/7 : add nginx-1.15.2.tar.gz /usr/src/
 ---> using cache
 ---> 18ace6285668
step 5/7 : run cd /usr/src/nginx-1.15.2   && mkdir /usr/local/nginx   && ./configure --prefix=/usr/local/nginx && make && make install   && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/   && nginx
 ---> using cache
 ---> 99629488ede9
step 6/7 : run rm -rf /usr/src/nginx-1.15.2
 ---> using cache
 ---> 869fbad71879
step 7/7 : expose 80
 ---> using cache
 ---> 384bed72ea6f
successfully built 384bed72ea6f
successfully tagged nginx:v3

输出两个successfully即为构建成功!

启动自定义镜像:

使用 docker images 查看构建的镜像:

怎么使用dockerfile构建nginx镜像

启动自定义的镜像:

[root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3
ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858
[root@docker ~]# docker ps -a
container id    image        command       created       status       ports        names
ecaafe119044    nginx:v3      "/bin/bash"     3 seconds ago    up 2 seconds    0.0.0.0:80->80/tcp  nginx

注:这时,你无论怎么启动这个容器,它还是一直处于exited状态。

经过各种解决,最终,终于知道问题出在了哪。 原来容器启动时,它是在后台对应着一个线程启动的,它在启动时是已经启动了,但它执行完命令后,就退出了,并没有在后台运行着,所以使用 -dit 参数让它在后台运行即可。

[root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3
ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858
[root@docker ~]# docker ps -a
container id    image        command       created       status       ports        names
ecaafe119044    nginx:v3      "/bin/bash"     3 seconds ago    up 2 seconds    0.0.0.0:80->80/tcp  nginx

然而.......

此时又出现了问题,它虽然起来了,但nginx的web网页界面访问不了,显示拒绝连接!!!!

[root@docker ~]# curl 192.168.100.22
curl: (7) failed connect to 192.168.100.22:80; 拒绝连接
[root@docker ~]# elinks --dump 192.168.100.22
elinks: 拒绝连接

然后,又经过问百度,fq看谷歌,终于找到了问题的所在。原来只要使用 exec 进入到容器里启动nginx就可以了。

[root@docker ~]# docker exec -it nginx bash
[root@ecaafe119044 /]# nginx
[root@ecaafe119044 /]# exit
exit
[root@docker ~]# curl 192.168.100.22
<!doctype html>
<html>
<head>
<title>welcome to nginx!</title>
<style>
  body {
    width: 35em;
    margin: 0 auto;
    font-family: tahoma, verdana, arial, sans-serif;
  }
</style>
</head>
<body>
<h1>welcome to nginx!</h1>
<p>if you see this page, the nginx web server is successfully installed and
working. further configuration is required.</p>

<p>for online documentation and support please refer to
<a href="http://nginx.org/" rel="external nofollow" >nginx.org</a>.<br/>
commercial support is available at
<a href="http://nginx.com/" rel="external nofollow" >nginx.com</a>.</p>

<p><em>thank you for using nginx.</em></p>
</body>
</html>

以上是怎么使用dockerfile构建nginx镜像的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:亿速云。如有侵权,请联系admin@php.cn删除
NGINX单元与其他应用程序服务器NGINX单元与其他应用程序服务器Apr 24, 2025 am 12:14 AM

NGINXUnit优于ApacheTomcat、Gunicorn和Node.js内置HTTP服务器,适用于多语言项目和动态配置需求。1)支持多种编程语言,2)提供动态配置重载,3)内置负载均衡功能,适合需要高扩展性和可靠性的项目。

NGINX单元:架构及其工作原理NGINX单元:架构及其工作原理Apr 23, 2025 am 12:18 AM

NGINXUnit通过其模块化架构和动态重配置功能提高了应用的性能和可管理性。1)模块化设计包括主控进程、路由器和应用进程,支持高效管理和扩展。2)动态重配置允许在运行时无缝更新配置,适用于CI/CD环境。3)多语言支持通过动态加载语言运行时实现,提升了开发灵活性。4)高性能通过事件驱动模型和异步I/O实现,即使在高并发下也保持高效。5)安全性通过隔离应用进程提高,减少应用间相互影响。

使用NGINX单元:部署和管理应用程序使用NGINX单元:部署和管理应用程序Apr 22, 2025 am 12:06 AM

NGINXUnit可用于部署和管理多种语言的应用。1)安装NGINXUnit。2)配置它以运行不同类型的应用,如Python和PHP。3)利用其动态配置功能进行应用管理。通过这些步骤,你可以高效地部署和管理应用,提升项目效率。

NGINX与Apache:Web服务器的比较分析NGINX与Apache:Web服务器的比较分析Apr 21, 2025 am 12:08 AM

NGINX更适合处理高并发连接,而Apache更适合需要复杂配置和模块扩展的场景。 1.NGINX以高性能和低资源消耗着称,适合高并发。 2.Apache以稳定性和丰富的模块扩展闻名,适合复杂配置需求。

NGINX单元的优势:灵活性和性能NGINX单元的优势:灵活性和性能Apr 20, 2025 am 12:07 AM

NGINXUnit通过其动态配置和高性能架构提升应用的灵活性和性能。1.动态配置允许在不重启服务器的情况下调整应用配置。2.高性能体现在事件驱动和非阻塞架构以及多进程模型上,能够高效处理并发连接和利用多核CPU。

NGINX与Apache:性能,可伸缩性和效率NGINX与Apache:性能,可伸缩性和效率Apr 19, 2025 am 12:05 AM

NGINX和Apache都是强大的Web服务器,各自在性能、可扩展性和效率上有独特的优势和不足。1)NGINX在处理静态内容和反向代理时表现出色,适合高并发场景。2)Apache在处理动态内容时表现更好,适合需要丰富模块支持的项目。选择服务器应根据项目需求和场景来决定。

终极摊牌:nginx vs. apache终极摊牌:nginx vs. apacheApr 18, 2025 am 12:02 AM

NGINX适合处理高并发请求,Apache适合需要复杂配置和功能扩展的场景。1.NGINX采用事件驱动、非阻塞架构,适用于高并发环境。2.Apache采用进程或线程模型,提供丰富的模块生态系统,适合复杂配置需求。

nginx行动:示例和现实应用程序nginx行动:示例和现实应用程序Apr 17, 2025 am 12:18 AM

NGINX可用于提升网站性能、安全性和可扩展性。1)作为反向代理和负载均衡器,NGINX可优化后端服务和分担流量。2)通过事件驱动和异步架构,NGINX高效处理高并发连接。3)配置文件允许灵活定义规则,如静态文件服务和负载均衡。4)优化建议包括启用Gzip压缩、使用缓存和调整worker进程。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。