centos/nginx-116-centos7该容器镜像包含Nginx 1.16服务器和反向代理服务器,适用于OpenShift和通用场景。用户可选择基于RHEL、CentOS或Fedora的镜像版本:RHEL镜像可在Red Hat容器目录获取,CentOS镜像在Quay.io,Fedora镜像在Fedora Registry。生成的镜像可使用podman运行。
注意:本文档示例中使用
podman命令,所有此类命令均可替换为docker,参数保持不变。
Nginx是一款HTTP、SMTP、POP3和IMAP协议的Web服务器及反向代理服务器,专注于高并发、高性能和低内存占用。本容器镜像提供nginx 1.16守护进程的容器化打包,可作为基于nginx 1.16 Web服务器的其他应用的基础镜像,并支持通过OpenShift的Source构建功能进行扩展。
以下示例假设使用rhel8/nginx-116镜像(通过OpenShift中的nginx:1.16镜像流标签可用)。构建简单test-app应用的步骤:
bashoc new-app nginx:1.16~[***] --context-dir=1.16/test/test-app/
访问应用:
bash$ oc get pods $ oc exec <pod> -- curl 127.0.0.1:8080
本镜像支持OpenShift的Source-to-Image(S2I)构建策略。S2I框架可将应用源代码与构建器镜像(如本nginx镜像)结合,生成可运行的应用镜像。
/usr/libexec/s2i/assemble:用于将应用源代码(HTML页面、配置文件等)组装到镜像中,放置到正确目录/usr/libexec/s2i/run:作为容器默认命令,启动nginx服务应用源代码应遵循以下结构:
./nginx.conf:主nginx配置文件./nginx-cfg/*.conf:需包含的nginx配置文件./nginx-default-cfg/*.conf:默认服务器块的配置片段./nginx-start/*.sh:nginx启动前执行的shell脚本./nginx-perl/*.pm:供perl_modules和perl_require指令使用的Perl模块./:nginx应用源代码(如HTML文件)相比S2I策略,Dockerfile提供更灵活的构建方式,适用于非OpenShift环境或需要自定义构建流程的场景。
bashpodman pull rhel8/nginx-116
以示例应用([***]
bashgit clone [***] nginx-container cd nginx-container/examples/1.16/
需完成以下任务:将应用源代码放入容器、移动配置文件到正确位置、设置默认命令。可通过两种方式实现:
3.1 手动配置(自定义设置)
创建Dockerfile:
dockerfileFROM registry.access.redhat.com/ubi8/nginx-116 # 添加应用源代码 ADD test-app/nginx.conf "${NGINX_CONF_PATH}" ADD test-app/nginx-default-cfg/*.conf "${NGINX_DEFAULT_CONF_PATH}" ADD test-app/nginx-cfg/*.conf "${NGINX_CONFIGURATION_PATH}" ADD test-app/*.html . # 运行nginx(前台模式) CMD nginx -g "daemon off;"
3.2 使用S2I脚本(推荐)
创建Dockerfile:
dockerfileFROM registry.access.redhat.com/ubi8/nginx-116 # 添加应用源代码到S2I脚本预期目录,并设置权限(非root运行) # 若使用不支持--chown选项的旧版docker,替换为: # USER 0 # ADD app-src /tmp/src # RUN chown -R 1001:0 /tmp/src # USER 1001 ADD --chown 1001:0 app-src /tmp/src # 执行assemble脚本组装应用 RUN /usr/libexec/s2i/assemble # 使用S2I run脚本启动服务 CMD /usr/libexec/s2i/run
bashpodman build -t nginx-app .
bashpodman run -d nginx-app
bash$ ls -lZ /wwwdata/html -rw-r--r--. 1 1001 1001 54321 1月 01 12:34 index.html -rw-r--r--. 1 1001 1001 5678 1月 01 12:34 page.html
将宿主机/wwwdata目录挂载为容器卷,启动nginx服务:
bash$ podman run -d --name nginx -p 8080:8080 -v /wwwdata:/opt/app-root/src:Z rhel8/nginx-116 nginx -g "daemon off;"
访问服务:
bash$ curl -Lk 127.0.0.1:8080
注意:挂载路径需为绝对路径(podman要求)。
NGINX_LOG_TO_VOLUME/var/log/nginx/。对于RHEL-7和CentOS-7镜像,该路径为/var/opt/rh/rh-nginx116/log/nginx/的符号链接。默认日志位置:访问日志输出到标准输出,错误日志输出到标准错误,可通过以下命令查看:
bashpodman logs <container>
设置NGINX_LOG_TO_VOLUME后:日志写入/var/log/nginx/(RHEL-7/CentOS-7镜像为/var/opt/rh/rh-nginx116/log/nginx/),可通过卷挂载到宿主机查看。
本容器镜像的Dockerfile及源代码托管于:[***]Dockerfile,RHEL7对应Dockerfile.rhel7,RHEL8对应Dockerfile.rhel8,Fedora对应Dockerfile.fedora。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务