一、创建需求网路
方便虚拟机、Mac、Linux 主机等各种环境下的 docker 部署,先创建虚拟网络,模拟现实中的局域网内网环境(注意 docker 都还是在同一台机器, 只是 docker 的虚拟 ip 不同, 模拟多机)
# 创建一个名为tars的桥接(bridge)虚拟网络,网关172.199.116.0/24,网段为172.199.116.1
sudo docker network create \
--driver=bridge \
--subnet=172.199.116.0/16 \
--ip-range=172.199.116.0/16 \
--gateway=172.199.116.1 \
tars
通过桥连创建虚拟网络,生产建议使用--net host ,宿主机IP和容器IP一致
二、docker安装mysql
#拉取mysql镜像,tag不写默认是最新
sudo docker pull mysql:5.7
sudo docker pull mysql:latest
#在本地宿主机创建数据库目录用于存储docker映射的数据库文件
mkdir -p /opt/software/dmysql/data /opt/software/dmysql/logs /opt/software/dmysql/conf
#docker启动mysql
sudo docker run -p 3307:3306 \
--net=tars \ --privileged=true \
--ip="172.199.116.2" \
--name tars-mysql \
-v /opt/software/dmysql/conf:/etc/mysql/conf \
-v /opt/software/dmysql/logs:/logs \
-v /opt/software/dmysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
#配置mysql配置文件
切换到上述命令配置的主机/opt/software/dmysql/conf目录下,创建 my.cnf文件,使用vim命令对 my.cnf文件添加如下内容,在docker中安装的mysql默认字符集是latin1,需要改成utf8(不配置无法插入中文)
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
-p:将docker的mysql3306端口转发到宿主机3307端口,便于通过localhost:3307进行访问
-v:将docker容器中的数据库文件映射到对应的额宿主机文件地址
--name:容器名称
-e MYSQL_ROOT_PASSWORD=123456:设置初始密码为123456
--privileged=true 用到文件映射的建议都加上
使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。
3、docker安装framework
- framework: Tars框架Docker制作脚本, 制作的docker包含了框架核心服务和web管理平台
- tars: Tars框架Docker制作脚本, 和framework比, 增加了java, nodejs等运行时支持, 即可以把java, nodejs服务发布到docker里面(docker里面安装了jdk, node, php环境)
- 启动framework会自动链接初始化数据库,初始化完才都能登录,首次需要等待一会。
#拉取framework镜像
sudo docker pull tarscloud/framework #运行framework
sudo docker run -d \
--name=tars-framework \
--net=tars \
-e MYSQL_HOST="1172.199.116.2" \
-e MYSQL_ROOT_PASSWORD="123456" \
-e MYSQL_USER=root \
-e MYSQL_PORT=3306 \
-e REBUILD=false \
-e INET=eth0 \
-e SLAVE=false \
--ip="172.199.116.3" \ --privileged=true \
-v /opt/software/framework:/data/tars \
-v /etc/localtime:/etc/localtime \
-p 3000:3000 \
-p 3001:3001 \
tarscloud/framework:latest
挂载的/etc/localtime是用来设置容器时区的,若没有可以去掉
3000端口为web程序端口,3001端口为web授权相关服务端口(docker>=v2.4.7可以不暴露该端口)
- 目录说明
创建时, 会将 docker 的目录/data/tars 映射到宿主机目录//opt/software/data//framework, 启动 docker 后, 请检查宿主机目录: /data/tars, 正常情况下会有创建以下几个目录:
- app_log: tars 服务的日志目录
- tarsnode-data: tarsnode/data 目录(存放发布到 docker 的业务服务), 保证 docker 重启, 数据不丢失
- web_log: web 中 tars-node-web 模块的日志(主机才有)
- demo_log: web 中 tars-user-system 模块的日志(主机才有), (docker>=v2.4.7 这个目录下无内容了)
- patchs: 上传的发布包(主机才有)
浏览器访问http://{IP:3000},访问tars主控
4、docker装tars-node
- tars-node: tarsnode 节点的镜像,包含各语言的运行时环境,可以将服务发布到 tars-node 容器中, tarsnode 每台机器都存在, 它连接到 framework
- 部署完成后, 打开 framework 主节点上 web 管理平台, 你可以通过 web 管理平台部署和发布服务, 将这些服务发布到 tarsnode 所在的机器上
#拉取framework镜像
sudo docker pull tarscloud/tars-node
#运行tarsnode
sudo docker run -d --net=tars -eINET=eth0 -eWEB_HOST=http://172.199.116.3:3000 \
--name=tarsnode01 \--privileged=true \
-v /opt/software/tarsnode01:/data/tars \
-v/etc/localtime:/etc/localtime \
--ip="172.199.116.4" \
-p 9000-9010:9000-9010 \
tarscloud/tars-node
其中地址为:172.199.116.3:3000 是TarsWeb的访问地址,重新登录就可以看到tarsnode01节点