1、拉取镜像
docker pull cockroachdb/cockroach:v1.0.2 docker run --rm cockroachdb/cockroach:v1.0.2 version // 确认镜像正常使用
2、新建网桥
在单机环境运行多个容器,之间需要使用docker的网桥模式使得容器间能够进行互访,同时保证容器间在外网环境是互相隔离
docker network create -d bridge roachnet
3、启动第一个节点
docker run -d \ --name=roach1 \ --hostname=roach1 \ --net=roachnet \ -p 26257:26257 -p 8080:8080 \ -v "${PWD}/cockroach-data/roach1:/cockroach/cockroach-data" \ cockroachdb/cockroach:v1.0.2 start --insecure
--hostname:容器间通过hostname加入集群
26257:cockroach默认的端口
8080:监控UI的端口
-p:映射容器宿主机和容器的端口
-v:挂载宿主机目录
start --insecure 在容器内启动节点
4、加入另外节点到集群
docker run -d \ --name=roach2 \ --hostname=roach2 \ --net=roachnet \ -v "${PWD}/cockroach-data/roach2:/cockroach/cockroach-data" \ cockroachdb/cockroach:v1.0.2 start --insecure --join=roach1 docker run -d \ --name=roach3 \ --hostname=roach3 \ --net=roachnet \ -v "${PWD}/cockroach-data/roach3:/cockroach/cockroach-data" \ cockroachdb/cockroach:v1.0.2 start --insecure --join=roach1
--join:容器节点加入集群,通过前面指定的hostname
5、集群测试
docker exec -it roach1 ./cockroach sql --insecure
输出:
# Welcome to the cockroach SQL interface.
# All statements must be terminated by a semicolon.
# To exit: CTRL + D.
执行sql:
CREATE DATABASE bank;
CREATE TABLE bank.accounts (id INT PRIMARY KEY, balance DECIMAL);
INSERT INTO bank.accounts VALUES (1, 1000.50);
SELECT * FROM bank.accounts;
节点1的结果
+----+---------+ | id | balance | +----+---------+ | 1 | 1000.50 | +----+---------+ (1 row) \q 退出
节点2,节点3:
SELECT * FROM bank.accounts;
查询结果:
+----+---------+ | id | balance | +----+---------+ | 1 | 1000.50 | +----+---------+ (1 row) \q 退出节点
6、集群监控
启动集群时已管理宿主机的8080端口,可以查看容器
docker ps
55e09b83cdba cockroachdb/cockroach:v1.0.2 "/cockroach/cockroach" 40 minutes ago Up 40 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:26257->26257/tcp roach1
在浏览器中打开地址,http://localhost:8080,本例是在云服务器中执行,所以通过外网查看