使用 docker-rollout 滚动更新(热更新)

1、docker-rollout 安装

# Create directory for Docker cli plugins
$ mkdir -p ~/.docker/cli-plugins

# Download docker-rollout script to Docker cli plugins directory
$ curl https://raw.githubusercontent.com/wowu/docker-rollout/master/docker-rollout -o ~/.docker/cli-plugins/docker-rollout

# Make the script executable
$ chmod +x ~/.docker/cli-plugins/docker-rollout

$ ln -s ~/.docker/cli-plugins/docker-rollout /usr/bin/docker-rollout

2、nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  10240;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    # 刷新 DNS
    resolver 127.0.0.11 ipv6=off valid=10s; # 127.0.0.1 comes from /etc/resolv.conf on the nginx container

    server {
        listen 80;
        location / {
            # 假设api端口是3000, api_server是 docker-compose.yml 文件内 service 的名字
            set $backend_servers api_server:3000;
            proxy_pass http://$backend_servers;
        }

    }
    include /etc/nginx/conf.d/*.conf;
}
daemon off;

3、docker-compose.yml

  这里的 docker-compose 的版本要在2.0以上, 笔者使用 v2.17.1

version: "3.7"

services:
  api_server:
    image: api_server:0.0.1
    restart: always
    # 不指定暴露的端口
    ports:
      - 3000
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      - TZ=Asia/Shanghai
      - HTTP_HOST=192.168.29.32
      - HTTP_PORT=3000


  nginx-proxy:
    image: nginxproxy/nginx-proxy
    # image: nginx:latest
    ports:
      - "8000:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./nginx.conf:/etc/nginx/nginx.conf:ro

3、启动容器

$ docker-compose up -d && docker-compose logs -f

4、浏览器访问http://localhost:8000

5、启动容器使用 docker-rollout 滚动更新 api server, 实现不停服更新

$ docker-rollout api_server

==> Scaling 'api_server' to 2 instances
[+] Running 2/2
 ✔ Container api_server-1  Running                                                                                                                                                                               0.0s 
 ✔ Container api_server-2  Started                                                                                                                                                                               1.3s 
==> Waiting for new container to be ready (10 seconds)
==> Stopping old container
2e09feb1d8df2fb66f4e2cfef186df70cbbf9eb0e1dd5dc599d88ef98cd303ed
2e09feb1d8df2fb66f4e2cfef186df70cbbf9eb0e1dd5dc599d88ef98cd303ed

How to achieve a rolling update with docker-compose? - Stack Overflow

docker - nginx refresh upstream server IP - Server Fault

GitHub - Wowu/docker-rollout

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值