Skip to the content.

目录

1 介绍

docker 部署 Tars 的文档中介绍了使用 docker 方式部署和启动框架的方式, 这种方案下, tarscloud/tarsnode 的镜像相当于一套虚拟机, 每个业务服务都是运行在这个镜像内部的.

但是有时候你希望服务隔离, 或者又希望服务环境能独立, 那么将业务服务独立到一个 docker 里面是可能更好的方式.

本文正是介绍如何将业务服务独立运行在 docker 里面.

2 前置说明

无论你是使用源码部署还是 docker 部署, 都能够支持业务服务 docker 化, 当然前置条件如下:

版本前置

如果使用源码部署, 则:

如果使用 docker 部署, 则:

在看到本文档时, 建议使用镜像版本>=tarscloud/framework>v3.0.15的镜像来部署tars框架.

服务器

服务器上必须安装 docker, 且 docker 的本地套接字地址最好默认是: /var/run/docker.sock (通常安装都在这里, 如果不在这里, 则需要修改 Tars 框架中 tarsnode/tarsregistry 的模板, 指向实际的地址)

如果是 docker 部署方式, 请请映射宿主机的/var/run/docker.sock到镜像中/var/run/docker.sock, 比如:

docker run -d \
    --name=tars-framework \
    --net=tars \
    -e MYSQL_HOST="172.25.0.2" \
    -e MYSQL_ROOT_PASSWORD="123456" \
    -e MYSQL_USER=root \
    -e MYSQL_PORT=3306 \
    -e REBUILD=false \
    -e INET=eth0 \
    -e SLAVE=false \    
    -e TARS_HOSTPATH=/data/framework \
    --ip="172.25.0.3" \
    -v /data/framework:/data/tars \
    -v /etc/localtime:/etc/localtime \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -p 3000:3000 \
    tarscloud/framework:v3.0.15

docker run -d \
    --name=tars-node \
    --net=tars \
    -e INET=eth0 \
    -e WEB_HOST="http://172.25.0.3:3000" \
    --ip="172.25.0.5" \
    -e TARS_HOSTPATH=/data/tars \
    -v /data/tars:/data/tars \
    -v /etc/localtime:/etc/localtime \
    -p 9000-9010:9000-9010 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    tarscloud/tars-node:latest

注意:

3 使用说明

镜像管理

在使用之前, 需要在 web 平台->运维管理->镜像管理中完成镜像的配置, 这样业务服务可以运行在指定的镜像中, 如图:

镜像管理

服务设置

在服务编辑界面, 设置服务以容器方式启动, 并选择合适的容器

服务设置

主要使用流程如下:

发布机制:

如果服务无法启动, 请查看tarsnode的日志!

4 容器运行机制

业务服务的容器运行时, 采用以下几个条件启动:

<tars>
    <application>
        <container>
            <volumes>
                #宿主机目录 = 容器内目录
                /data/host/path=/data/docker/path
            </volumes>
        </container>
    </application>
</tars>
<tars>
    <application>
        <container>
            <ports>
                #容器端口 = 宿主机host:端口
                80/tcp=192.168.0.1:80
                7778/udp=192.168.0.1:7778
            </ports>
        </container>
    </application>
</tars>