一条nginx命令引发的对于容器的思考

a3726435e2a5b803d6fdd476a2885297.gif

去年的时候写了一篇原创《前后端分离,如何在前端项目中动态插入后端API基地址?(in docker)》, 我自认为这篇生产实践是对大前端、 容器化、CI/CD的得意之作。

对于前后端分离的web项目,在容器启动的瞬间,通过脚本替换待部署环境的特定变量,形成了一个镜像,多环境部署的效果。

92087e338a900337e48d58b9a34d5bcf.png

Dockerfile  CMD指示容器运行过程:

  • 用真实值替换前端chunk files中插入的API_BASE_URL字符

  • 使用nginx承载替换后的chunk files

# FILE: Dockerfile
...
EXPOSE 80
COPY --from=builder /react-frontend/replace_api_url.sh /
CMD ["sh", "replace_api_url.sh"]

下面是replace_api_url.sh的内容

#!/usr/bin/env sh
find '/usr/share/nginx/html' -name '*.js' -exec sed -i -e 's,API_BASE_URL,'"$API_BASE_URL"',g' {} \;
nginx -g "daemon off;"

51cb91a76e7a06e684ab5d8a503be380.png537b780cd727c9e6a700485b5e2704b6.png7d5c720f74739ec2f6209f874ff211a0.png  为什么要加 nginx -g "daemon  off;"

在常规的虚机上,nginx默认是以守护进程来运行的(daemon on),在后台默默提供服务,同时部署多个ngxin服务也不会相互干扰。

在容器环境,one container ==  one  process,容器要能持续运行,必须有且仅有一个前台进程,所以对nginx进程容器化,需要将nginx转为前后进程( daemon off)。

我们能顺利执行docker run nginx,启动容器并不退出,是因为nginx的官方镜像Dockerfile[1] 已经指定 nginx -g "daemon off;"

再回到上文,为什么此处脚本中要加"nginx  -g  "daemon off;" 呢?

If you add a custom CMD in the Dockerfile, be sure to include -g daemon off; in the CMD in order for nginx to stay in the foreground, so that Docker can track the process properly (otherwise your container will stop immediately after starting)!

CMD在执行的shell脚本["sh", "replace_api_url.sh"],实际上是启动shell进程来执行,脚本执行完,进程就会退出(此时nginx还是一摊死的物理文件),

所以我们要在脚本内再添加nginx -g "daemon off;" ,将整个shell进程转为前台能持续运行的进程。

Last

  • 容器= 进程, 有且仅有一个前台能持续运行的进程

  • nginx 默认是后台守护进程的形式运行, nginx -g  "daemon off;" 以前台形式持续运行。

今天是2021年的最后一天,这也是马甲哥的134篇原创深度技术文章,马甲哥今年时间有限, 写的文章连贯性不够、技能点犬牙交错,我自己回头看之前的文章,一坨翔, 也欢迎童鞋们加我好友(hihuangjun) 进群怼我。

后面会整理几篇复盘文章, 帮助童鞋们整理头绪,加深印象, 新的一年,忘掉过去的不悦,开启新气象。  Happy Year!4c7e20eeced031c056d8de20f12bfe53.png86721fa6e8e800817ddf6e59fd3dc451.png

参考资料

[1]

nginx的官方镜像Dockerfile: https://github.com/nginxinc/docker-nginx/blob/master/Dockerfile-alpine.template

●前后端分离,如何在前端项目中动态插入后端API基地址?(in docker)

●掌握了Docker Layer Caching才敢自称精通Dockerfile

●如何向K8s,Docker-Compose注入镜像Tag

●如何利用Gitlab-CI持续部署到远程机器?

鹅厂二面,Nginx回忆录

●分享我在前后端分离项目中Gitlab-CI的经验

基于docker-compose的Gitlab CI/CD实践&排坑指南

●大揭秘| 我司项目组Gitlab Flow && DevOps流程

难缠的布隆过滤器,这次终于通透了

822d0ea327575aea545cbadd83fe0548.png

点个在看你最好看

54c4d98012d4c9e07e1a92db015c3cfb.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

部门树形结构,使用Treeview控件显示部门

部门树形结构。设计张部门表用于存储部门编码、名称、上级部门id,使用Treeview控件显示部门树,并实现部门增删改、移动、折叠等功能。特别提示,部门有层级关系,可用donetbar的adtree控件 代码如下 1 using System;2 using System.…

移动端 登陆 模板 html_聚会邀请函请柬模板 免费设计制作生成

制作邀请函 请关注我们聚会并非你的个人发布会和生活成果展,而在于描绘经历了风雨沧桑的那道彩虹,世事变化,聚会不是为了显示某人身居高位,也不是衣锦还乡或日过斗金、大富大贵的炫耀,重温那充满梦想的花样年华&#x…

他们是你学生时期的噩梦,但现在你可以把他们按在墙上摩擦了……

全世界只有3.14 % 的人关注了爆炸吧知识用艺术家的眼光去看科学,用人生的角度去看艺术。——尼采看过日剧的朋友都不会陌生下面的场景:日本主妇会将存放在冰箱中的东西列出清单,然后用磁贴将之贴在冰箱门上。每次购物或煮食后,她们…

推荐系统相关算法(1):SVD

假如要预测Zero君对一部电影M的评分,而手上只有Zero君对若干部电影的评分和风炎君对若干部电影的评分(包含M的评分)。那么能预测出Zero君对M的评分吗?答案显然是能。最简单的方法就是直接将预测分定为平均分。不过这时的准确度就难…

vSphere日志分析器(vCenter Log Insight)安装、配置

很久没更新博客,最近在网上看到了1.0版本的vSphere分析器可下载并可测试,测试完后发觉以前人肉全手动分析log,看得眼前飘白雪的情况不会出现了。这里和大家分享一下。1 关于vCenter Log Insight当ESX/ESXi主机发生故障,很多用户或…

android开发将h5转换成pdf_一键将PDF转换成PPT,秒懂!

PDF因能良好的兼容各操作系统和软件版本的差异性,使得PDF文档在查阅播放的时候不影响排版变化,很多时候,我们因为工作上的需要,经常需要再次将PDF转换成PPT,那么怎样将PDF转换成PPT呢?需要下载专业的转换工…

MongoDB 权限认证

MongoDB已经使用很长一段时间了,基于MongoDB的数据存储也一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),因为考虑到数据安全的原因特地花了一点时间研究了一下,网上搜出来的解决方法大都是3.0以下的版本的…

推荐系统相关算法(2):k-nearest neighbor

1. kNN 1.1 基本的kNN模型 kNN(k-nearest neighbor)的思想简单来说就是,要评价一个未知的东西U,只需找k个与U相似的已知的东西,并通过k个已知的,对U进行评价。假如要预测风炎君对一部电影M的评分,根据kNN的思想&#…

看了《OCP/OCA认证考试指南全册:Oracle Database 11g(1Z0-051,...

为什么80%的码农都做不了架构师?>>> 一直对考试用书没好感,觉得里边的内容都刻板不实用。在查找Oracle书籍时,无意中看到有人在豆瓣里说,如果给他一次重新的机会,他只看OCP 052、053,Oracle编程…

.net 集合分成几个等数量集合_巧用数学游戏,帮助幼儿轻松掌握12种数量关系!...

网校在手 轻松教研线上学习灵活高效海量资源轻松获取一键搞定园本教研感知数量关系是幼儿园数学教育的核心内容,是发展幼儿数学思维的重要因素。那么,孩子在幼儿园阶段需要了解哪些数量关系呢?幼儿园有哪些数学教育内容包含着数量关系呢&…

我做的百度飞桨PaddleOCR .NET调用库

.NET Conf 2021中国我做了一次《.NET玩转计算机视觉OpenCV》的分享,其中提到了一个效果特别好的OCR识别引擎——百度飞桨PaddleOCR,后来我逐步把它封装了一下,代码全部开源(可点击查看原文跳转到Github):ht…

超棒的在线Bootstrap主题编辑工具 - lollytin

lollytin 是一款帮助制作Bootstrap3主题的在线工具,虽然现在仍旧是Beta版本,但是已经非常不错了。 主要功能: 通过拖拽来生成主题支持拖拽页头,页脚,内容,幻灯,地图,表单&#xff0c…

CentOS 5.9 yum安装LAMP(Apache+MySQL+PHP)

2019独角兽企业重金招聘Python工程师标准>>> 1、 yum -y install mysql mysql-server /*yum安装MySQL*/ 2、chkconfig --levels 235 mysqld on /*设置开机启动*/ 3、以MySQL用户root登陆: mysql -u root 登陆后设置root密码: set password for rootl…

C#获2021年度编程语言奖,开发者们最该关注这些亮点!

2022年的第一个好消息,应该就是C#获得“TIOBE 年度编程语言奖”。虽然眼下TIOBE的新闻尚未发布,但早在21年12月榜单发布的同时,TIOBE的CEO Paul Jansen表示,C#将获取“TIOBE 年度编程语言奖”。C#有着21年的悠久历史了&#xff0c…

编写程序在窗口中写出自己名字的拼音缩写_各类英文缩写:全称居然这么朴素?网友:最后一个我笑了...

提到听起来很牛的缩写,小优第一个想到的单词是VIP,一直认为它是一个很厉害的单词,那它的全称一定更厉害吧!直到初中,被英语老师打破幻想,原来VIP的全称就只是 Very Important Person! Excuse me ??好吧!那…

如何像Uber一样给工程师派单,解放外包生产力?

2019独角兽企业重金招聘Python工程师标准>>> 2014年,陈柯好的第一个创业项目失败,半年之内,陈柯好以技术合伙人的方式游走于旅游、电商、团购、票务等各种领域。正当他对职业方向感到迷茫时,“大众创业、万众创新”的口…

为什么越来越多的人消失在朋友圈?

全世界只有3.14 % 的人关注了爆炸吧知识微博上有个热门话题讨论:#越来越多的人开始消失在朋友圈#。网友们纷纷评论,也道出了背后的辛酸真相。“越来越觉得自己渺小和不重要。”“其实根本没人关心你朋友圈写的是什么。”……是的,越来越多的人…

教你10分钟对接人大金仓EF Core 6.x

【导读】目前.NET Core中据我了解到除了官方的EF Core外,还用的比较多的ORM框架(恕我孤陋寡闻哈,可能还有别的)有FreeSql、SqlSugar(排名不分先后)。FreeSql和SqlSugar都已早早支持国产数据库比如人大金仓、…