首页 > 系统相关 >编写简单的nginx Dockerfile文件

编写简单的nginx Dockerfile文件

时间:2024-03-24 16:34:04浏览次数:26  
标签:Nginx -- dev nginx html https 编写 Dockerfile

.1.创建 Dockerfile 文件

touch Dockerfile

添加如下相关的配置信息

 

# 设置维护者信息

LABEL maintainer="[email protected]"

 

# 使用官方Nginx基础镜像

FROM nginx:1.24.0

 

# 安装构建Nginx模块所需的工具和依赖

RUN apk add --no-cache --virtual .build-deps \

    gcc \

    libc-dev \

    make \

    openssl-dev \

    pcre-dev \

    zlib-dev \

    libxml2-dev \

    libxslt-dev \

    gd-dev \

    geoip-dev \

    perl-dev

 

# 将Nginx源码包解压并进入目录(需提前准备Nginx源码包,并放在Dockerfile同目录下)

ARG NGINX_VERSION=1.24.0

ADD http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz /opt/u01/exam/nginx

WORKDIR /opt/u01/exam/nginx/nginx-${NGINX_VERSION}

 

# 编译Nginx并安装所需模块

RUN ./configure \

    --with-http_ssl_module \

    --with-http_v2_module \

    --with-http_gzip_static_module \

    --with-ngx_http_core_module \

    --with-http_secure_link_module \

    --with-ngx_http_proxy_module \

    --with-ngx_http_rewrite_module \

    --ngx_http_upstream_module \

 

 

RUN make && make install

 

 

# 复制必要的配置文件和静态资源到容器

COPY nginx.conf /etc/nginx/nginx.conf

 

# 将静态网页资源复制到镜像中

COPY html/ /usr/share/nginx/html

 

# 设置环境变量

ENV NGX_CONF_FILE=/etc/nginx/nginx.conf

 

# 清理临时文件

# RUN rm -rf /tmp/*

 

 

# 将Nginx配置为随容器启动

# RUN echo "[Unit]\nDescription=The NGINX HTTP and reverse proxy server\nAfter=network.target\n\n[Service]\nUser=root\nExecStartPre=/usr/bin/rm -f /run/nginx.pid\nExecStart=/usr/local/nginx/sbin/nginx -c $NGX_CONF_FILE\nExecReload=/bin/kill -s HUP $MAINPID\nRestart=on-failure\n\n[Install]\nWantedBy=multi-user.target" > /etc/systemd/system/nginx.service

 

 

# 设置容器启动时运行Nginx服务

CMD ["nginx", "-g", "daemon off;"]

 

# 暴露80端口

EXPOSE 80

 

.2.手动创建html、log等目录,nginx.conf配置文件。

 

可根据实际需要创建其他目录。

 

.3.执行构建容器命令

docker build -f Dockerfile -t mynginx .

一定要注意,最后面有一个小数点,据网友说表示当前目录

https://www.cnblogs.com/wjdzh/p/16372088.html

如果不添加最后面的小数点,则会出现如下的错误信息,

ERROR: "docker buildx build" requires exactly 1 argument.

 

 

修改后重新构建结果如下,

 

 

导致该问题的原因,FROM语句需要放在第一句中,不能放在其他位置。参考博客如下,

https://www.cnblogs.com/fengyinxu/p/fix-docker-no-build-stage-in-current-context.html

 

修改之后,重新执行命令,发现出现新的错误信息如下。

ERROR [2/7] RUN apk add --no-cache --virtual .build-deps     gcc     libc-dev     make     openssl-dev     pcre-dev     zlib-dev     libxm  0.3s

 

从错误信息来看,可以看出错误信息是在大致第九行的位置。

 

 

尝试着使用网友使用的方式,

https://www.cnblogs.com/sxshaolong/p/14144752.html

 

 

再次执行仍然报错,

 

找到一篇博客,尝试着添加一行代码,问题未解决。

 

 

https://serverfault.com/questions/951526/run-yum-in-docker-file-not-working-but-yum-its-working-inside-the-container

 

 

查看过的博文贴在这里,或许会对您有帮助,

https://juejin.cn/post/6992848354753380389

https://blog.csdn.net/zltliqi/article/details/129992030

https://blog.51cto.com/u_16175496/9342968

 

找了N多个解决方案都没有解决,最终找到一篇博文,对于解决问题有进步。

https://blog.csdn.net/a975719898/article/details/119346919

 

最终还是构建失败,大致猜测是在下载一些文件的时候,可以需要外网之类的,导致下载不下来。

继续寻找解决方案,找到如下的博客

https://cloud.tencent.com/developer/article/2194297

 

执行到第三行命令时还是失败。

 

注释掉图片标记中的第三行代码,重新执行,继续报错。

 

 

暂时仍然未解决。

不过找到一种替代方案,那就是先在Linux环境下,安装好必要的nginx编译工具和需要模块,编译好之后,在进行打包。

这样可以简化Dockerfile文件的编写,最终内容如下

# 使用官方Nginx基础镜像

FROM nginx:1.24.0

 

# 设置维护者信息

LABEL maintainer="[email protected]"

 

# 将Nginx源码包解压并进入目录(需提前准备Nginx源码包,并放在Dockerfile同目录下)

ARG NGINX_VERSION=1.24.0

ADD http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz /opt/u01/exam/nginx

WORKDIR /opt/u01/exam/nginx/nginx-${NGINX_VERSION}

 

# 复制必要的配置文件和静态资源到容器

COPY nginx.conf /etc/nginx/nginx.conf

 

# 将静态网页资源复制到镜像中

COPY html/ /usr/share/nginx/html

 

# 设置环境变量

ENV NGX_CONF_FILE=/etc/nginx/nginx.conf

 

 

# 设置容器启动时运行Nginx服务

CMD ["nginx", "-g", "daemon off;"]

 

# 暴露80端口

EXPOSE 80

 

注释掉下面的代码,大概意思就是工作目录的意思,猜测是用来编译nginx二进制代码使用的。

WORKDIR /opt/u01/exam/nginx/nginx-${NGINX_VERSION}

 

然后再次执行,终于执行成功,可以使用docker images命令进行查看。

 

 

上面的显示方式不太友好,删除刚刚构建的这个镜像,docker rmi 镜像名或镜像ID

优化一下,添加一个版本号 docker build -f Dockerfile -t mynginx:V1 .

 

 

使用自定义的nginx镜像,启动nginx容器如下,

 

 

 

打开浏览器测试访问,报错403 Forbidden

 

 

 

 排查问题,发现html目录下没有文件,然后创建一个文件,添加如下代码。

 

 

最后测试,发现可以正确访问。

到此,初步完成通过自己编写Dockerfile文件,然后构建镜像,

 

参考博文如下。

https://cikeblog.com/nginx-manual-packaging-tutorial.html

https://www.cnblogs.com/you-men/p/14944023.html

https://soulteary.com/2021/03/22/how-to-use-nginx-third-party-modules-efficiently-in-the-container-era.html

https://juejin.cn/post/7319541661939286067

https://nowtime.cc/docker/1636.html

标签:Nginx,--,dev,nginx,html,https,编写,Dockerfile
From: https://www.cnblogs.com/yilangcode/p/18092598

相关文章

  • macbook(M1芯片)搭建php+nginx运行环境
    macbook(M1芯片)搭建php+nginx运行环境php安装phpbrewinstallphp//低版本php需要这样安装brewinstallshivammathur/php/[email protected]配置环境变量(低版本的php才需要)echo'exportPATH="/usr/local/opt/[email protected]/bin:$PATH"'>>~/.zshrcecho'exportPATH=&quo......
  • 补充--关于nginx服务器多个网站如何设置404的问题?
    补充--关于nginx服务器多个网站如何设置404的问题?需求1:设置多个网站404页面为一个都需配置网站的nginx.conf,以上面的多网站为例,404发布目录下,每个的nginx.conf1.知道每个网站的(nginx.conf)配置路径www.it.com/usr/local/nginx/conf/nginx.confbbs.it.com/usr/loc......
  • nginx挂载配置文件和日志-静态目录-方式二
    环境说明linux系统版本:lsb_release-a docker版本:docker-v Nginx镜像版本:1.24.0 不同的操作系统以及软件版本,可能会遇到不一样的问题,一定要注意版本问题。 .1.创建需要挂载的文件目录,比如html和log,还有配置文件nginx.conf.自己首先创建一个目录,结构如下。 ......
  • 配置vscode运行Java与更好的编写markdown文档
    下载vscode官网选择下载版本,根据自己的需求选择,蓝色的stable版本是非常稳定的发行版本,绿色的insiders版本是测试版,可能会有一点小bug安装完成以后第一步当然是让我们的vscode变成中文需要安装以下插件插件名称:Chinese(Simplified)(简体中文)LanguagePackforVisua......
  • 使用CSDN编写一元二次方程
    一元二次方程标准形式:ax2+bx......
  • nginx location匹配规则顺序总结
    Nginx的location匹配顺序是Nginx配置中非常核心且重要的概念,它决定了Nginx如何处理进入服务器的请求。理解location匹配顺序不仅有助于优化Nginx的性能,还能确保网站或应用的正确运行。下面将详细阐述Nginx的location匹配顺序,并通过实例加以说明。Nginxlocation匹配顺序详解精......
  • nginx高级篇rewrite
    url重写技术更改请求的urlhttp://www.yuchaoit.cn/自动跳转到new.yuchaoit.cn比如早期的京东官网,域名叫做360buy.com企业就进行域名修改。jd.com老用户他又不知道你改名了,360buy.com看到网页无响应,以为京东挂了。。不用这个网站了,京东跑路了,以后用拼多多吧。。......
  • nginx高级访客日志切割
    切割理念(先纯手动的去切割日志,备份日志)给nginx进程发送信号,让nginx重新生成一个新日志文件,这就是一个日志切割根本/var/log/nginx/access.log.bak#1.备份原本日志文件nginxreloadreopen信号#配置文件中定义的日志文件名,是这个2./var/log/nginx/access.log #......
  • 服务器上配置nginx
    如何在Ubuntu20.04上安装Nginx-知乎(zhihu.com)就像是在本机进行下载配置一般,成功后你自己可以通过浏览器输入网址访问,本地环回地址或者连接上互联网后的ip地址(那么处于同一局域网的其他设备也可以访问)。在本机部署tomcat也是同理。那么什么情况下可以让互联网下的其......
  • Nginx配置搭建m3u8格式的视频播放服务
    Nginx配置搭建m3u8格式的视频播放服务 本文采用Nginx+FFmpeg来进行m3u8格式的视频播放服务,解决:nginx如何搭建视频服务器,要求流媒体服务,视频hls分片加载FFmpeg概念介绍FFmpeg是一个开源的计算机程序,可以用来记录、转换、编辑和流化数字音频和视频。FFmpeg的名称来自MPEG视频......