背景
有一台腾讯的Linux云主机,在服务器上部署了一个docker(称为ServiceDocker,名称为sign,下同),ServiceDocker内部使用了80、443、3306端口,分别映射到宿主机(云主机)的相同端口(即80、443、3306)。
ServiceDocker中安装了XAMPP,在此基础上部署了扫码签到小程序的服务器。ServiceDocker的80和443端口分别提供http和https服务,3306为MySQL数据库的端口。
ServiceDocker绑定了域名sign.famend.cn。
目标
云主机中的一个ServiceDocker占用了80、443端口,如果想在主机中再部署一台服务器对外服务,就不能使用80和443端口了。
我们的目标是在主机中可以部署多个ServiceDocker,每个ServiceDocker绑定各自的域名,对外提供服务,保证80和443端口可用。
思路
修改ServiceDocker的端口映射,把ServiceDocker端口80、443分别映射到主机的89、449端口,这样主机的80、443端口释放出来了。
释放出来的80和443端口供Nginx使用。安装带Nginx的docker(称为NginxDocker,名称为mynginx,下同)。NginxDocker内部使用端口80、443,分别映射到主机的80和443端口。
NginxDocker用来做反向代理。当有访问请求时,读取Nginx配置后,不同的URL定向到各自对应的Docker。例如:访问http://sign.famend.cn:80,则自动映射到http://sign.famend.cn:89。
实现步骤
1. 修改ServiceDocker的端口映射,释放80和443端口。
Docker没有提供命令修改端口,从网上我找到了2种方法。
方法1:先停止容器,再将容器打包成镜像,接着运行新的镜像。在运行新的镜像时指定新的端口。使用的命令如下:
#先停止容器 docker stop containerA #将容器commit成为一个镜像 docker commit containerA newImageB #运行容器 docker run -p 8080:8080 -p 8081:8081 -v /home/data/:/home/data/ -dt newImageB
方法2:先停止容器,接着停止容器服务,然后修改容器配置文件,最后启动容器服务、启动容器。步骤如下:
①停止ServiceDocker(ServiceDocker的名称为sign),停止docker服务。
sudo docker stop sign sudo service docker stop
②使用 docker ps -a 命令找到要修改容器的 CONTAINER ID。
③运行 docker inspect 【CONTAINER ID】 | grep Id 命令。
④执行 cd /var/lib/docker/containers 命令令进入找到与 Id 相同的目录。
在执行cd 命令时如果提示permission denied,可以先执行 sudo -s。
进入id对应的目录后,打开文件hostconfig.json。
找到80端口的映射,如下:
"80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "80" }] 把 "HostPort": "80" 修改成 "HostPort": "89" , 如下 "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "89" }]
修改之前,ServiceDocker内部的80端口映射为主机的80端口;修改之后,ServiceDocker内部的80端口映射为主机的89端口。
稍加说明,有文章(参考资料中的2、3)提到还需要修改config.v2.json,亲测不需要。这个文件在启动ServiceDocker时会自动修改。
⑤启动docker服务,然后启动ServiceDocker(名称为sign)。
sudo service docker start sudo docker start sign
方法(1)和方法(2)都可以,我选用了方法(2)。
在执行完方法(2)之后,打开浏览器验证,提示“网站无法访问”。
初步估计docker中的服务器没有启动,运行命令:
sudo /opt/lampp/lampp stop sudo /opt/lampp/lampp start
运行stop的时候,发现apache 没有启动,可能是修改了80端口的缘故。
在执行start之后,打开浏览器验证http://sign.famend.cn:89和https://sign.famend.cn:449,成功访问。
修改Docker端口的方法并不复杂,如果docker以后的版本能够提供相应命令,相信会方便很多。
顺便,运行 crontab -l 查看ServiceDocker中的定时任务是否启动,如果没启动,运行 service cron start 启动定时任务。
下一步,配置NginxDocker反向代理,让http://sign.famend.cn:80和https://sign.famend.cn:443也能成功访问。
2. 配置NginxDocker反向代理。
①下载nginx,并运行它。
docker container run \ -d \ -p 80:80 \ -p 443:443 \ --rm \ --name mynginx \ nginx
②配置nginx的配置文件。
mkdir nginx-files docker container cp mynginx:/etc/nginx . mv nginx conf vi conf/nginx.conf
在nginx.conf中,添加如下反向代理信息。
server{ listen 443 ssl; server_name sign.famend.cn; ssl_certificate /etc/nginx/ssl/sign.famend.cn/1_sign.famend.cn_bundle.crt; ssl_certificate_key /etc/nginx/ssl/sign.famend.cn/2_sign.famend.cn.key; location / { proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://sign.famend.cn:89/; } } server{ listen 80; server_name famend.cn sign.famend.cn; location / { proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr:89; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://sign.famend.cn:89/; } }
对于443端口,需要使用ssl_certificate和ssl_certificate_key。在ServiceDocker中证书使用的LetsEncrypt的SSL证书,每90天更新一次。
SSL证书的来源:一种方法,可以让它们共享LetsEncrypt的SSL证书。除此之外,在腾讯注册的域名,腾讯免费提供SSL证书,有效期为1年。
为了简便,我直接使用了腾讯的SSL证书,当然,一年之内,必须在过期之前更新证书。
③停止mynginx,然后重启它。
docker container run \ --name mynginx \ --volume "$PWD/conf":/etc/nginx \ -p 80:80 \ -p 443:443 \ -d \ nginx
这次,去掉 --rm 参数,以便停止运行的时候保留容器。
至此,配置完成。
验证
浏览器中分别打开
sign.famend.cn:80 sign.famend.cn:89 sign.famend.cn:449 sign.famend.cn:443
都能正常访问。当然,打开449和443时候,可以发现两个URL使用的证书不一样。449是LetsEncrypt提供的,有效期90天;443来自腾讯(颁发机构TrustAsia),有效期1年。
当然,ServiceDocker中的另外一个网站famend.cn,也可以访问:
famend.cn:80
famend.cn:89
总结
以上所述是小编给大家介绍的使用Nginx实现服务器中多容器共存的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]