- 修改了代码/配置怎么办?
- 只要挂载了 volumes,改本地文件,容器里会自动同步。
- 如果是镜像内容变了,需要重新构建:docker-compose build,然后 docker-compose up -d。
- 服务之间怎么通信?
- Compose 会自动给每个服务分配一个网络,服务之间可以用服务名互相访问,比如 backend:3000。
- 端口冲突怎么办?
动态修改端口
- 有一个问题,启动nuxt服务的端口是3000,我希望修改该端口, 可以通过命令方式来动态修改容器端口吗
- 有时候可能3000端口被其他应用占用, 而又不想修改docker的配置,如何通过命令来修改端口
- 通过pm2来指定node的启动端口
如何解决“部署中断”
- 使用
docker rm -f 会导致线上服务挂掉
- 虽然
docker rm -f 到 docker run 成功的中间过程可能只有几秒钟,但这几秒钟内:
- 服务完全中断: 用户访问你的域名会看到
502 Bad Gateway 或 连接被拒绝。
- Nuxt 初始化时间: Nuxt (Node.js) 启动后还需要几秒钟来初始化。这意味着实际的中断时间是:删除时间 + 创建时间 + 程序启动时间
双容器切换
- 双容器切换,A容器8081 A副本8082,更新时进行A副本进行构建 构建完成后执行A副本 然后检查127.0.0.1:8082/healthy 存活则在负载均衡那写upstream为A副本8082 进行reload sleep个30秒然后A容器8081 rm
- 滚动更新 就是搞多副本更新A再更B,更到最后切网关
K8s 滚动更新
- 会先启一个新 Pod,等新 Pod 准备好了(Ready),再删一个旧 Pod,用户完全无感知