对于实际的docker来说,其容器本身在ps aux就直接是一个本地运行的进程,只不过这个进程被dockerd进程通过针对命名空间的限制,完成了一次本地资源环境的适配。
所以,针对原有的docker服务改造与nginx的部署需要以下几步:
首先是本地把nginx的环境搭建好(服务器有时候已经提供了1panel服务)
配置好nginx的路由服务
通过重启服务时关闭-p命令(docker run时不要进行-p绑定)
nginx启用systemctl,并完成nginx到docker的建链
使用本地socket查看命令可以首先帮你理清当前本级的IP有哪些,他们的socket连接关系是什么样子的:
ss -tulnp
对于容器内部的socket使用情况,由于镜像里面一般把支撑的工具都删了,其实不怎么好看见。
具体来说,服务器首先会由systemd启动dockerd这个开机自启的后台监控软件。当你在服务器中执行了docker run命令,且指定--restart参数为always时,这个容器就总是会随着开机而自启。此时,如果在输入参数中还指定了-p来描述容器IP到公网端口的映射关系,那么在每次开机重启的时候,也会一并重新执行。在执行带参数的docker run命令后,这个容器的相关参数集合可以使用docker inspect [docker-id]的方式来具体确认。有关docker的port映射关系,则可以通过docker port [docker-id]来确认,docker-id参数本身可以用docker ps命令来确认。
当docker启动容器时,如果容器的inspect参数中描述了port关系,那么在启动时会创建docker-proxy专门用于公网IP到容器内的映射。
而对于公网IP的监听,则是以1panel的方式进行的,这可以从ss命令中以openresty命令完成0.0.0.0:80的监听看出来。
最终,可以在腾讯云的管理界面看到如下配置:

这其实说明了这个1panel是以/opt/1panel/apps/openresty/conf/nginx.conf文件的配置,来实现最终的公网到halo的映射关系的。
nignx配置文件
根据前文的描述,主配置文件位于/opt/1panel/apps/openresty/conf/nginx.conf,同时你还可以通过systemctl status查看当前1panel的情况:
server {
listen 80 default_server;
listen 443 ssl default_server;
server_name halo.localhost;
index index.php index.html index.htm default.php default.htm default.html;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
access_log /www/sites/halo.localhost/log/access.log;
error_log /www/sites/halo.localhost/log/error.log;
location ^~ /.well-known/acme-challenge {
allow all;
root /usr/share/nginx/html;
}
location /wangpan/ {
proxy_pass http://127.0.0.1:5000;
}
location / {
proxy_pass http://127.0.0.1:8080;
}
include /www/sites/halo.localhost/ssl/*.conf;
http2 on;
}启用本地server服务
由于目前nginx的alias功能费拉不堪,因此,静态网页加载的技术最好直接依托python展开,在静态网页位置加载
前往静态网页路径下执行:
python3 -m http.server 8110 --bind 0.0.0.0 --directory /home/ubuntu/fenghuo完成部署:
