使用Dockerfile编写源码安装Nginx镜像

这篇具有很好参考价值的文章主要介绍了使用Dockerfile编写源码安装Nginx镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        其实在Docker仓库中,存在nginx容器镜像,但是我们为什么还有自己来编写呢,是因为有的时候仓库中的版本,并非我们在需要的版本镜像,还有一点就因为安全问题,毕竟别人家的东西哪有自己家的东西用着安心呢。

        Dockerfile是使用源代码构建docker的镜像,编辑一个Dockerfile,而后根据此文件制作;docker可以自动通过读取Dockerfile中的指令,自动构建镜像。Dockerfile是一个文本文档包含所有用户的命令,可以在命令行上调用组建一个镜像。使用docker build命令的用户可以读取docker file中的连续指令,自动构建一个镜像。

一,构建nginx镜像

创建目录存放相关文件

mkdir nginxdockerfile
cd nginxdockerfile
echo "docker nginx build successful" > index.html

创建dockerfile文件

vi Dockerfile
FROM centos:7
LABEL version="nginx v1"
LABEL "emill"="243254384@qq.com"
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
WORKDIR /usr/local/src
ENV NG_VERSION=nginx-1.25.1
RUN yum -y install epel-release
RUN yum -y install wget
RUN wget http://nginx.org/download/$NG_VERSION.tar.gz && tar xzvf $NG_VERSION.tar.gz 
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel && yum install -y pcre-devel libxslt-devel gd-devel GeoIP GeoIP-devel GeoIP-data
RUN yum clean all 
RUN useradd -M -s /sbin/nologin nginx 
WORKDIR /usr/local/src/$NG_VERSION 
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install
ADD index.html /usr/local/nginx/html 
VOLUME /usr/local/nginx/html 
ENV PATH /usr/local/nginx/sbin:$PATH 
EXPOSE 80/tcp 
ENTRYPOINT ["nginx"]
CMD ["-g","daemon off;"]

构建镜像

docker build -t centos7:nginx .

运行容器

docker run -d --name nginx -p 8080:80 centos7:nginx

访问即可

http://IP:8080

二,详细介绍使用的模块

#基准镜像
FROM centos:7
#作者信息
LABEL version="nginx v1"
LABEL "emill"="243254384@qq.com"
#调整系统时间差
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#工作目录
WORKDIR /usr/local/src/ 
#定义环境变量
ENV NG_VERSION nginx-1.21.0 
#安装epel仓库
RUN yum -y install epel-release 
#安装wget
RUN yum -y install wget 
#下载nginx文件并解压
RUN wget http://nginx.org/download/$NG_VERSION.tar.gz && tar xzvf $NG_VERSION.tar.gz 
#安装编译依赖包
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel && yum install -y pcre-devel libxslt-devel gd-devel GeoIP GeoIP-devel GeoIP-data
#清理仓库
RUN yum clean all 
#创建nginx用户
RUN useradd -M -s /sbin/nologin nginx 
#切换工作目录
WORKDIR /usr/local/src/$NG_VERSION 
#编译安装nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install
#复制测试页面到容器中
ADD index.html /usr/local/nginx/html 
#设置容器中要挂在到宿主机的目录
VOLUME /usr/local/nginx/html 
#设置sbin环境变量
ENV PATH /usr/local/nginx/sbin:$PATH 
#暴露80端口
EXPOSE 80/tcp 
ENTRYPOINT ["nginx"]
CMD ["-g","daemon off;"]
#当ENTRYPOINT和CMD连用时,CMD的命令是ENTRYPOINT命令的参数,两者连用相当于nginx -g "daemon off;"而当一起连用的时候命令格式最好一致(这里选择的都是json格式的是成功的,如果都是sh模式可以试一下)
1.FROM

功能为指定基础镜像,并且必须是第一条指令。 如果不以任何镜像为基础,那么写法为:FROM scratch。 同 时意味着接下来所写的指令将作为镜像的第一层开始

2.RUN

功能为运行指定的命令

注意:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层. 多少个RUN就构建了多 少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。 RUN书写时的换行 符是\

3.CMD

功能为容器启动时要运行的命令

注意:补充细节:这里边包括参数的一定要用双引号,就是",不能是单引号。千万不能写成单引号。 原因是参数传递后,docker解析的是一个JSON array

4.RUN和CMD的区别

不要把RUN和CMD搞混了。 RUN是构件容器时就运行的命令以及提交运行结果 CMD是容器启动时执行的命 令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子

5.LABEL

功能是为镜像指定标签,为镜像写一些注释信息

但是并不建议这样写,最好就写成一行,如太长需要换行的话则使用\符号 如下:

注意:LABEL会继承基础镜像种的LABEL,如遇到key相同,则值覆盖

6.EXPOSE

功能为暴漏容器运行时的监听端口给外部 但是EXPOSE并不会vim 使容器访问主机的端口 如果想使得容器与主 机的端口有映射关系,必须在容器启动的时候加上 -P参数

注意:如果在端口号后面加/tcp,默认为tcp协议,如果需要UDP端口需要添加/udp

7.ENV

功能为设置环境变量

8.ADD

一个复制命令,把文件复制到镜象中。 如果把虚拟机与容器想象成两台linux服务器的话,那么这个命令就类似 于scp,只是scp需要加用户名和密码的权限验证,而ADD不用。

注意:尽量不要把写成一个文件夹,如果是一个文件夹了,复制整个目录的内容,包括文件系统元数据

9.WORKDIR

设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次

10.VOLUME

可实现挂载功能,可以将内部文件夹挂载到外部

11.ENTRYPOINT

该命令与CMD类似,用于执行命令使用,还可以与CMD命令一起拼合使用

它与CMD的区别: ​ 相同点:只能写一条,如果写多条,那么只有最后一条生效

不同点:CMD在创建容器时,在后面添加其他的CMD指令,CMD会被覆盖,但是ENTRYPOINT不会被覆盖,如果两个同时使用,CMD会变成ENTRYPOINT的参数文章来源地址https://www.toymoban.com/news/detail-685695.html

到了这里,关于使用Dockerfile编写源码安装Nginx镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 编写.NET Dockerfile文件构建镜像

    创建一个WebApi项目,并且创建一个Dockerfile空文件,添加以下代码,7.0代表的你项目使用的SDK的版本,构建的时候也需要选择好指定的镜像tag 我们一步一步来进行讲解,首先第一步,FROM指定了一个mcr.microsoft.com/dotnet/aspnet:7.0镜像,并且AS别名base,这一步是选择aspnet:7.0作为基础

    2024年01月23日
    浏览(44)
  • 【Docker】如何编写Dockerfile,深入理解 Dockerfile:构建精简且高效的容器镜像

    Docker 是一种轻量级的容器化技术,使得应用程序和它们的依赖可以被打包到一个容器中,方便在不同环境中运行。Dockerfile 是用于定义 Docker 镜像的文本文件,其中包含了一系列的指令,这些指令描述了镜像中应该包含哪些内容和如何配置。 在开始编写 Dockerfile 之前,确保你

    2024年01月24日
    浏览(53)
  • dockerfile 构建nginx镜像

    http://ip:80

    2024年01月20日
    浏览(47)
  • Dockerfile制作Nginx应用镜像

    创建Dockerfile 创建镜像 上传镜像-harbor 修改hosts文件 修改daemon.json 重启DOCKER 登录并上传 测试镜像

    2024年02月12日
    浏览(38)
  • dockerfile以alpine为基础镜像构建nginx镜像

    Alpine Linux 是一个社区开发的面向安全应用的轻量级Linux发行版。 Alpine 的意思是“高山的”,它采用了musl libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk。 由于其小巧、安全、简单以及功能完备的特点,被广泛应用于众多Docker容器中。 a

    2023年04月22日
    浏览(56)
  • Dockerfile制作Web应用系统nginx镜像

    目录 1.所需实现的具体内容 2.编写Dockerfile Dockerfile文件内容: 默认网页内容: 3.构建镜像 4.现在我们运行一个容器,查看我们的网页是否可访问 5.现在再将我们的镜像打包并上传到镜像仓库 基于centos基础镜像。 指定作者信息。 安装nginx服务,将提供的dest目录(提供默认主页

    2024年02月12日
    浏览(44)
  • Dockerfile构建Tomcat镜像(源码)

    目录 Dockerfile构建Tomcat镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 5、浏览器访问测试: [root@huyang1 tomcat]# vim Dockerfile 配置如下: [root@huyang1 tomcat]# docker build -t tomcat:new . [root@huyang1 ~]# docker images tomcat:new [root@huyang1 tomcat]# docker run -d -p 8080:8080 --name tomca

    2024年02月14日
    浏览(43)
  • Dockerfile构建SSH、Systemctl、Nginx、Tomcat、MySQL镜像实验

    目录 一、构建SSH镜像 二、构建Systemctl镜像 三、构建Nginx镜像 四、构建Tomcat镜像 五、构建MySQL镜像 1、创建镜像目录方便管理 2、创建编写dockerfile文件 3、生成镜像 4、启动容器并修改root密码 1、创建镜像目录方便管理 2、创建编写dockerfile文件 3、生成镜像 4、进入容器 1、创建

    2024年02月15日
    浏览(40)
  • Docker容器学习:Dockerfile制作Web应用系统nginx镜像

    目录 编写Dockerfile 1.文件内容需求: 2.编写Dockerfile: 3.开始构建镜像  4.现在我们运行一个容器,查看我们的网页是否可访问 推送镜像到私有仓库 1.把要上传的镜像打上合适的标签 2.登录harbor仓库 3.上传镜像 1.文件内容需求: 基于centos基础镜像。 指定作者信息。 安装nginx服

    2024年02月11日
    浏览(79)
  • 基于dockerfile构建sshd、httpd、nginx、tomcat、mysql、lnmp、redis镜像

    一、镜像概述 Docker 镜像是Docker容器技术中的核心,也是应用打包构建发布的标准格式。一个完整的镜像可以支撑多个容器的运行,在Docker的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务。 如果想要把已

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包