Giter Club home page Giter Club logo

docker-tars's Introduction

Tencent Tars 的Docker镜像脚本与使用

Docker Pulls Docker Automated build Docker Build Status

约定

本文档假定你的工作环境为 Windows,因为Windows下的docker命令行环境会把C:盘、D:盘等盘符映射为 /c//d/ 这样的目录形式,所以在文档中会直接使用 /c/Users/ 这样的写法来描述C:盘的用户目录。

MySQL

本镜像是Tars的docker版本,未安装mysql,可以使用官方mysql镜像(5.6):

docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -d -p 3306:3306 -v /c/Users/<ACCOUNT>/mysql_data:/var/lib/mysql mysql:5.6 --innodb_use_native_aio=0

注意上面的运行命令添加了 --innodb_use_native_aio=0 ,因为mysql的aio对windows文件系统不支持

如果要使用 5.7 版本的mysql,需要再添加 --sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 参数,因为不支持全零的date字段值( https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_zero_date

docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -d -p 3306:3306 -v /c/Users/<ACCOUNT>/mysql_data:/var/lib/mysql mysql:5.7 --sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION --innodb_use_native_aio=0

如果使用 8.0 版本的mysql,则直接设定 --sql_mode='',即禁止掉缺省的严格模式,(参考 https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html

docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -d -p 3306:3306 -v /c/Users/<ACCOUNT>/mysql_data:/var/lib/mysql mysql:8 --sql_mode='' --innodb_use_native_aio=0

或者你也可以挂载使用一个自定义的 my.cnf 来添加上述参数。

镜像

docker镜像已经由docker hub自动构建:https://hub.docker.com/r/tarscloud/tars/https://hub.docker.com/r/tangramor/docker-tars/ ,使用下面命令即可获取(注意替换 <tag> ):

docker pull tarscloud/tars:<tag>
  • tag 为 latest 的镜像支持C++服务端,包含 CentOS7 的标准C++运行环境;
  • tag 为 php 的镜像支持PHP服务端,包含了 php 7.2 环境和 swoole、phptars 扩展;
  • tag 为 java 的镜像支持Java服务端,包含 JDK 10.0.2 以及 maven 等支持;
  • tag 为 go 的镜像支持Go语言服务端,包含 Golang 1.9.4;
  • tag 为 nodejs 的镜像支持Nodejs服务端,包含 nodejs 8.11.3;
  • tag 为 dev 的镜像包含了C++、PHP、Java、Go和Nodejs的服务端开发支持,用于开发,上述其它镜像则 不包含 make等开发工具以减小镜像体积。

tars-node 之下是只部署 tarsnode 服务的节点镜像脚本,使用下面命令即可获取:

docker pull tarscloud/tars-node:<tag>

注意:

镜像使用的是官方Tars的源码编译构建的,容器启动后,还会有一个自动化的安装过程,因为原版的Tars代码里设置是需要修改的,容器必须根据启动后获得的IP、环境变量等信息修改设置文件,所以会花费一定的时间。可以进入容器运行 ps -ef 命令查看进程信息来判断系统是否已经启动完成。

环境变量

TZ

时区设置,缺省为 Asia/Shanghai

DBIP, DBPort, DBUser, DBPassword

在运行容器时需要指定数据库的 环境变量,例如:

DBIP mysql
DBPort 3306
DBUser root
DBPassword password

DBTarsPass

因为Tars的源码里面直接设置了mysql数据库里tars用户的密码,所以为了安全起见,可以通过设定此 环境变量 DBTarsPass 来让安装脚本替换掉缺省的tars数据库用户密码。

MOUNT_DATA

如果是在 Linux 或者 Mac 上运行,可以设定 环境变量 MOUNT_DATAtrue 。此选项用于将Tars的系统进程的数据目录挂载到 /data 目录之下(一般把外部存储卷挂载为 /data 目录),这样即使重新创建容器,只要环境变量一致(数据库也没变化),那么之前的部署就不会丢失。这符合容器是无状态的原则。可惜在 Windows 下由于文件系统与虚拟机共享文件夹的权限问题,我们 不能 使用这个选项。

INET_NAME

如果想要把docker内部服务直接暴露到宿主机,可以在运行docker时使用 --net=host 选项(docker缺省使用的是bridge桥接模式),这时我们需要确定宿主机的网卡名称,如果不是 eth0,那么需要设定 环境变量 INET_NAME 的值为宿主机网卡名称,例如 --env INET_NAME=ens160。这种方式启动docker容器后,可以在宿主机使用 netstat -anop |grep '8080\|10000\|10001' |grep LISTEN 来查看端口是否被成功监听。

MASTER

节点服务器需要把自己注册到主节点master,这时候需要将tarsnode的配置修改为指向master节点IP或者hostname,此 环境变量 MASTER 用于 tars-node 镜像,在运行此镜像容器前需要确定master节点IP或主机名hostname。

run_docker_tars.sh 里的命令如下,请自己修改:

docker run -d -it --name tars --link mysql --env MOUNT_DATA=false --env DBIP=mysql --env DBPort=3306 --env DBUser=root --env DBPassword=PASS -p 8080:8080 -v /c/Users/<ACCOUNT>/tars_data:/data tarscloud/tars

框架普通基础服务

另外安装脚本把构建成功的 tarslog.tgz、tarsnotify.tgz、tarsproperty.tgz、tarsqueryproperty.tgz、tarsquerystat.tgz 和 tarsstat.tgz 都放到了 /c/Users/<ACCOUNT>/tars_data/ 目录之下,镜像本身已经自动安装了这些服务。你也可以参考Tars官方文档的 安装框架普通基础服务 来了解这些服务。

自己构建镜像

镜像构建命令:docker build -t tars .

tars-node 镜像构建,请检出 tars-node 项目后执行命令:

git clone https://github.com/TarsDocker/tars-node.git
cd tars-node
docker build -t tars-node -f Dockerfile .

开发方式

使用docker镜像进行Tars相关的开发就方便很多了,我的做法是把项目放置在被挂载到镜像 /data 目录的本地目录下,例如 /c/Users/<ACCOUNT>/tars_data 。在本地使用编辑器或IDE对项目文件进行开发,然后开启命令行:docker exec -it tars bash 进入Tars环境进行编译或测试。

举例说明(含PDF下载):

TARS C++服务端与客户端开发

TARS PHP TCP服务端与客户端开发

TARS PHP HTTP服务端与客户端开发

TARS JAVA服务端与客户端开发

TARS Kubernetes部署

以上文档网站基于 https://github.com/tangramor/mkdocs 生成,支持 Gitlab Pages 和 PDF 导出(含中文)。

感谢

本镜像脚本根据 https://github.com/panjen/docker-tars 修改,最初版本来自 https://github.com/luocheng812/docker_tars

docker-tars's People

Contributors

panjen avatar tangramor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

docker-tars's Issues

tars-php 启动不了服务

按照文档和代码,到最后启动服务时出现如下错误
: No such file or directorye/data/PHPTest.PHPHttpServer/bin/src/index.php: line 1: ?php
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 2: require_once: command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 2: $'\r': command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 3: use: command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 3: $'\r': command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 4: =: command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 4: $'\r': command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 5: syntax error near unexpected token (' 'usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 5: $pos = strpos($config_path, '--config=');
: No such file or directorye/data/PHPTest.PHPHttpServer/bin/src/index.php: line 1: ?php
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 2: require_once: command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 2: $'\r': command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 3: use: command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 3: $'\r': command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 4: =: command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 4: $'\r': command not found
/usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 5: syntax error near unexpected token (' 'usr/local/app/tars/tarsnode/data/PHPTest.PHPHttpServer/bin/src/index.php: line 5: $pos = strpos($config_path, '--config=');

<?php
/**
 * Created by PhpStorm.
 * User: dingpanpan
 * Date: 2017/12/2
 * Time: 17:00.
 * index.php
 */
require_once __DIR__.'/vendor/autoload.php';
use \Tars\cmd\Command;
//php tarsCmd.php  conf restart
$config_path = $argv[1];
$pos = strpos($config_path, '--config=');
$config_path = substr($config_path, $pos + 9);
$cmd = strtolower($argv[2]);
$class = new Command($cmd, $config_path);
$class->run();

不知道是哪里设置错了,第一次研究tars-php 还望指教一二,十分感谢

Redis 扩展问题,导致调用taf失败,通讯异常

该Docker内部的redis扩展使用的是phpiredis,使用方式为,

$redis = phpiredis_connect('127.0.0.1', 6379);      // normal connection

对于TarsActDemo,该例子中使用的Redis的用法为

self::$redisInstance[$conf] = new Redis();
self::$redisInstance[$conf]->connect($config['host'], $config['port'], $config['timeout']);

这种用法为php的redis的官方扩展。

如果用该Docker直接去跑TarsActDemo,则会报错,
image

经查log发现,错误为,
image

建议补充php的官方Redis的扩展。

tarslog好多ERROR日志

2019-08-16 14:54:06|1222|ERROR|[TARS][ObjectProxy::doTimeout, objname:tars.tarslog.LogObj, queue timeout error]
2019-08-16 14:54:06|1243|ERROR|[TARS] write to remote log server error:server unknown exception: ret:-7 msg:[ServantProxy::invoke errno:-7,info:,servant:tars.tarslog.LogObj,func:loggerbyInfo,reqid:0]: buffer size:1
2019-08-16 14:54:09|1222|ERROR|[TARS][ObjectProxy::doTimeout, objname:tars.tarslog.LogObj, queue timeout error]
2019-08-16 14:54:09|1243|ERROR|[TARS] write to remote log server error:server unknown exception: ret:-7 msg:[ServantProxy::invoke errno:-7,info:,servant:tars.tarslog.LogObj,func:loggerbyInfo,reqid:0]: buffer size:1
2019-08-16 14:54:12|1222|ERROR|[TARS][ObjectProxy::doTimeout, objname:tars.tarslog.LogObj, queue timeout error]
2019-08-16 14:54:12|1243|ERROR|[TARS] write to remote log server error:server unknown exception: ret:-7 msg:[ServantProxy::invoke errno:-7,info:,servant:tars.tarslog.LogObj,func:loggerbyInfo,reqid:0]: buffer size:1
2019-08-16 14:54:16|1222|ERROR|[TARS][ObjectProxy::doTimeout, objname:tars.tarslog.LogObj, queue timeout error]
2019-08-16 14:54:16|1243|ERROR|[TARS] write to remote log server error:server unknown exception: ret:-7 msg:[ServantProxy::invoke errno:-7,info:,servant:tars.tarslog.LogObj,func:loggerbyInfo,reqid:0]: buffer size:1
2019-08-16 14:54:16|1222|ERROR|[TARS][QueryEpBase::doEndpoints, callback activeEps is empty,objname:tars.tarslog.LogObj]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.