最近很抑郁。
这是句无关紧要的话
事情是这样的,我们有一台服务器。
1.没联网2.只对外开放8080端口
后端喊我把我的服务反向代理。我没做过这玩意,我就只知道接口的反向代理。
后面通过求助大佬,解决了这一个问题
服务
先来看一下我的服务
有三个服务、客户端、服务端和数据库。
nginx配置
服务器中nginx的配置
就是当我访问服务器ip+端口+zk-service
时,帮我代理到前端的服务上。
我的前端容器里面也有个内置的nginx。
前端的页面和访问后端的反向代理就是在这里执行的
前端容器中的nginx配置
先进入前端容器
docker exec -it ad4 sh
然后进入到 /etc/nginx/conf.d
cat 一下 default.conf 看一下配置
我们的打包后的静态文件是放在nginx的/usr/share/nginx/html
里面的
因为我当时为了 做 前端的反向代理,就给前端的项目加了个根路径。然后就location 根路径
,加个alias
,因为当时我没在最上面写root 文件的根路径
,一刷新就404,后面大哥给我加上了。就好了
后端的话是获取到请求接口是zk-api,然后反向代理到 http://server:3000/zk-manager
。因为我是容器之间的通信,所以直接用容器的名字就可以访问。
整个容器编排的docker-compose
再来看下我的docker-compose
[root@iZay6018wp6ydt57r8rresZ home]# cat docker-compose.yml
version: '3'
// 服务
services:
// 前端服务名
frontend:
// 前端镜像,这镜像是我从另一台服务器导入进来的
image: frontend-image
// 容器名称
container_name: frontend-container
#entrypoint:
# - sleep
# - '3600'
// 端口
ports:
- 4000:80
// 内部网络,有了它,容器之间才能通信
networks:
- mysql_bridge
// 依赖关系 不写的话 因为这个镜像构建容器比后台服务快,构建的时候没找到后台就容易起不来
depends_on:
- server
// 挂载卷,单纯的代码更新,可以直接挂载进去容器
volumes:
// nginx的更新
- ./default.conf:/etc/nginx/conf.d/default.conf
如果不涉及到新的 npm package 直接挂载代码进去,相对方便
- ./dist:/usr/share/nginx/html
// 后端服务名 也就是我们后端请求接口时用到的
server:
// 同样是我导入进来的
image: server-image:dianxinyun
container_name: server-container
ports:
- 8081:3000
networks:
- mysql_bridge
depends_on:
- db
db:
restart: always
image: db-image:dianxinyun
container_name: mysql-db
ports:
- 3307:3306
networks:
- mysql_bridge
environment:
- MYSQL_ROOT_PASSWORD=syq123456
volumes:
#- /home/mysql/conf/my.cnf:/etc/mysql/my.cnf
#- /home/mysql/initdb/:/docker-entrypoint-initdb.d/
// 将本地数据挂载过去? 这一步我没咋注意,后面再说吧
- /home/mysql/data/:/var/lib/mysql/
// 容器之间通信的网络
networks:
mysql_bridge:
docker-compose up -d
就启动了
至于我导入的镜像,命令是这个
docker image load -i XXX.tar
从另一台机器导出的镜像,命令是
docker image save 镜像id 新的镜像名.tar
我以前还写了 docker常用命令,现在看看,没有实践,当时的记录卵用没有
回顾上一次
再去看看我的几个镜像的Dockerfile吧
其实应该先看 联网状态下的 docker-compose ,跟无网络的是不一样的,因为比如mysql的镜像就可以直接从网上拉取
算了,没在公司,连不上,看不了。就这吧
看一个月之前的文章都可以
记录一次部署流程docker-compose+nestjs+vue+prisma+mysql – 掘金 (juejin.cn)
记录一下吧,真的很烦,虽然没卵用。
像这天气,一会晴天、一会阴沉、一会打雷、一会闷热、一会下雨,一会又开始暴晒。
记录一个bug
对了我当时还遇到一个bug
是这样的
cannot mount volume over existing file
因为我这个前端镜像,第一次构建的时候,是跟随网上的教程,用docker commit
提交了一下,然后save导出来,再重新 docker run
的时候,又创建了一个内部的nginx想要挂载进去。就不行了。具体的也不太懂,以后再研究吧
解决办法就是在 docker-compose 里面 ,让一个外部的配置文件直接覆盖掉里面的已经存在的配置。上面有写
记录清除docker-iamge
上面那个bug 有人给我出了个主意,删掉 那一长串存在冲突的文件,这样就导致了别的容器也有问题,不要这样做。
只能把全部的镜像清除掉,重新导入,幸好当时只有我自己在用dokcer,不然就栓q了
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/\*
sudo systemctl start docker