跳到主要内容

docker问题

  • 修改了代码/配置怎么办?
    • 只要挂载了 volumes,改本地文件,容器里会自动同步。
    • 如果是镜像内容变了,需要重新构建:docker-compose build,然后 docker-compose up -d。
  • 服务之间怎么通信?
    • Compose 会自动给每个服务分配一个网络,服务之间可以用服务名互相访问,比如 backend:3000。
  • 端口冲突怎么办?
    • 改 ports 映射,比如 "8081:80"。

动态修改端口​

  • 有一个问题,启动nuxt服务的端口是3000,我希望修改该端口, 可以通过命令方式来动态修改容器端口吗
  • 有时候可能3000端口被其他应用占用, 而又不想修改docker的配置,如何通过命令来修改端口
  • 通过pm2来指定node的启动端口

如何解决“部署中断”​

  • 使用docker rm -f 会导致线上服务挂掉
  • 虽然 docker rm -f 到 docker run 成功的中间过程可能只有几秒钟,但这几秒钟内:
    1. 服务完全中断: 用户访问你的域名会看到 502 Bad Gateway 或 连接被拒绝。
    2. 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,用户完全无感知