shynome / shynome.github.io

8 stars 0 forks source link

穷人的简易 Serverless 平台, 基于 docker service 和 caddy2 tmpdocker #39

Open shynome opened 3 years ago

shynome commented 3 years ago

简介

穷人的简易 Serverless 部署平台, 基于 docker service 和 caddy tmpdocker

使用方法

# 直接在 docker 服务器上构建 docker 镜像省得推送
rdocker build . -t tmp/test:0.0.1
# 创建服务, 仅首次创建时需要
rdocker_create tmp/test:0.0.1 '--network main_link'
# 更新镜像
rdocker build . -t tmp/test:0.0.2
rdocker_deploy tmp/test:0.0.2

设置

环境设置

docker 服务器

  1. 启用 docker http 访问端点, 使用 systemctl edit docker.service 重载 docker.service, 重载内容为
    [Service]
    ExecStart=
    # 192.168.1.168 为内网ip地址, 如果不在同一个内网内请自行组网, 我推荐 wg, tinc 这两个组网软件
    ExecStart=/usr/sbin/dockerd -H tcp://192.168.1.168 -H fd:// $DOCKER_OPTS
  2. 接下来是重启 docker.service 以应用更改, 命令是systemctl restart docker.service

在 docker 服务器上设置 caddy service

  1. 设置 caddy service, 这部分请参考: https://github.com/shynome/caddy2-dockerize/tree/master/example

  2. 添加 test service 访问入口文件, caddy/tmpdocker/test.conf, 内容如下

    http://test.local {
     route {
       tmpdocker tmp_nginx
       reverse_proxy tmp_nginx:80
     }
    }
  3. 重载配置文件使新的配置文件生效, 在caddy service目录下执行make proxy-reload

本地开发机器的设置

  1. 新建一个文件 ~/.rdocker.sh, 保存别名

    # 设置要操控的docker服务器
    alias rdocker="DOCKER_HOST=tcp://192.168.1.168 docker"
    
    __rdocker_local_image(){
     rdocker images $1  --format "{{.ID}}" --no-trunc
    }
    
    __rdocker_service_name(){
     echo $1 | awk -F ':' '{print $1}' | sed "s#/#_#g"
    }
    
    rdocker_create(){
     rdocker service create --name $(__rdocker_service_name $1) --scale=0 $2 $(__rdocker_local_image $1)
    }
    
    rdocker_deploy(){
     rdocker service update --image $(__rdocker_local_image $1) $2 $(__rdocker_service_name $1)
    }
  2. ~/.profile 引用上个文件

    ...
    source ~/.rdocker.sh
  3. 将上述函数应用到当前命令行 source ~/.rdocker.sh

最后就是测试了

  1. 新建一个 Dockerfile 文件, 内容如下
    FROM nginx:alpine
  2. 新建一个 .dockerignore 文件, 内容如下
    *
    !Dockerfile
  3. 进行构建 - rdocker build . -t tmp/nginx:0.0.1
  4. 创建服务 - rdocker_create tmp/nginx:0.0.1 '--network main_link' (main_link是上面caddy service中的链接网络)
  5. 访问测试 - curl -H 'Host: test.local' http://192.168.1.168:80/
  6. 测试更新, 更新 Dockerfile 文件内容为
    FROM nginx:alpine
    RUN echo "helll world" > /usr/share/nginx/html/index.html
  7. 进行构建 - rdocker build . -t tmp/nginx:0.0.2
  8. 更新服务 - rdocker_deploy tmp/nginx:0.0.2
  9. 访问测试 - curl -H 'Host: test.local' http://192.168.1.168:80/