部署Docker环境注意
二维码发送端只需要安装Redis,MySql, 接收端安装Redis,MySql,Rabbitmq,Canal
配置文件都从192.168.1.178:/data目录拷贝下来,解压放到根目录下面
1.Docker
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$sudo apt insall docker.io
#基本命令如下
$sudo docker ps -a #查看容器运行
$sudo docker stop <CONTAINER ID> #停止容器
$sudo docker rm <CONTAINER ID> #删除容器
$sudo docker logs -f <CONTAINER ID>
$sudo docker rmi 镜像ID #删除镜像
$sudo docker images #查看镜像
$sudo exec -it CONTAINER ID 或者--name 指定容器名 #进入docker 容器
$sudo exit #退出docker
$sudo docker stats #查看容器占用资源
$sudo docker save -o images.tar image1 image2 #多个镜像一起打包
$sudo docker load < images.tar #加载镜像
|
2.Redis
1
2
3
4
5
6
7
8
9
10
|
$sudo docker pull redis
$sudo mkdir -p /data/redis/{conf,data}
$sudo vim /etc/redis/conf/redis.conf
#加入如下两行
protected-mode no
appendonly yes
$wq #保存
$sudo docker run -p 6379:6379 --name redis \
-v /data/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf
|
3.Rabbitmq
1
2
3
4
5
6
7
8
9
10
11
12
|
$sudo mkdir -p /data/rabbitmq/data
$sudo docker pull rabbitmq:management
$sudo docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 \
-v /data/rabbitmq/data:/var/lib/rabbitmq --hostname rabbitmq \
-e RABBITMQ_DEFAULT_VHOST=/ -e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin rabbitmq:management
#登陆http://ip:15672/
#用户名:admin
#密码:admin
#创建exchange: canal_exchange
#创建queue: canal_queue
#点击canal_queue: bind canal_exchange 和 canal_key
|
4.MySql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$sudo mkdir -p /data/mysql/{data,conf,logs}
$sudo docker pull mysql:5.7
$sudo docker run -d -p 3306:3306 --name mysql-service \
-e MYSQL_ROOT_PASSWORD=root mysql:5.7
$sudo docker exec -it mysql-service bash
$mysql --help|grep my.cnf #查找配置文件
#/etc/mysql/mysql.conf.d
$sudo docker cp mysql-service:/etc/msyql/msyql.conf.d/msyqld.conf /data/mysql/conf/ #拷贝容器配置文件到宿主机
$sudo docker stop <CONTAINER ID>
$sudo docker rm <CONTAINER ID>
#以下映射本地配置到docker容器
$sudo docker run -p 3307:3306 --name mysql \
-v /data/mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /data/mysql/logs:/logs -v /data/mysql/data:/mysql_data \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
|
5.Canal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
$sudo mkdir -p /data/canal/conf
$sudo mkdir -p /data/canal/example
$sudo docker pull canal/canal-server
$sudo docker run --name canal-service --rm -d canal/canal-server:latest
$sudo docker cp canal-server:/home/admin/canal-server/conf/canal.properties /data/canal/conf #从容器复制到宿主机
$sudo docker cp canal-server:/home/admin/canal-server/conf/example/instance.properties /data/canal/conf/example # 同上
#修改canal.properties文件
$sudo vim /data/canal/conf/canal.properties
# tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ
canal.serverMode =rabbitMQ
# rabbitmq配置
rabbitmq.host =192.168.1.178
rabbitmq.virtual.host =/
rabbitmq.exchange =canal_exchange #同管理界面创建
rabbitmq.username =admin
rabbitmq.password =admin
rabbitmq.deliveryMode =direct
# 修改example.properties配置
$sudo vim /data/canal/conf/example/instance.properties
canal.instance.master.address=192.168.1.178:3307 #摆渡机接收端数据库地址
canal.instance.master.journal.name=mysql-bin.000003 #binlog文件
canal.instance.master.position=922123 #binlog偏移位置,具体参见7,8点命令
canal.instance.dbUsername=admin
canal.instance.dbPassword=123456
canal.instance.filter.regex=qr_recv.recv_data_tb #监听那个表
canal.mq.topic=canal_key #同管理平台bind
# rm /canal/config/meta.dat
$sudo docker run --name canal -p 11111:11111 \
-v /data/canal/conf/example/instance.properties:/home/admin/canal-server/conf/example/instance.properties \
-v /data/canal/conf/canal.properties:/home/admin/canal-server/conf/canal.properties \
-v /data/canal/logs/:/home/admin/canal-server/logs/ -d canal/canal-server:latest
|
6.非Docker版本MySql设置
1
2
3
4
5
6
7
8
9
|
$vim /etc/mysql/mysql.conf.d/mysqld.cnf
增加配置:
log_bin=mysql-bin
binlog_format=ROW
server_id=1
expire_logs_days=7
$wq
$/etc/init.d/mysql restart
$mysql -u admin -p
|
7.是否开启日志
1
|
$show variables like '%log_bin%';
|
8.查看日志文件及偏移量
9.Docker 容器开机自启
-
开启自启
1
|
$sudo docker update --restart=always <CONTAINER ID>
|
-
取消自启
1
|
$sudo docker update --restart=no <CONTAINER ID>
|
10.Docker桥接
-
Bridge:桥接网络。默认情况下启动的Docker容器,都是使用Bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了。
-
None:无指定网络。使用 –network=none,Docker容器就不会分配局域网的IP。
-
Host:主机网络。使用–network=host,此时,Docker容器的网络会附属在主机上,两者是互通的。例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。
1
|
$sudo docker network create --subnet=172.18.0.0/16 mynetwork
|
11.Kafka
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
$sudo docker pull wurstmeister/zookeeper
$sudo docker pull wurstmeister/kafka
$sudo docker pull sheepkiller/kafka-manager
$sudo mkdir -p /data/zookeeper/{data, log}
$sudo docker run -d --name zookeeper -p 2181:2181
\ -v /data/zookeeper/data:/data -v /data/zookeeper/log:/datalog zookeeper
$sudo docker exec -it zookeeper bash
$cd bin
$bash zkCli.sh
$ls /
$ls /brokers
#启动kafka管理,添加集群
$sudo docker run -d --name kafka-manager \
--link zookeeper:zookeeper \
--link kafka:kafka -p 9001:9000 \
--restart=always \
--env ZK_HOSTS=zookeeper:2181 \
sheepkiller/kafka-manager
$sudo docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0
\ -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --link zookeeper
\ -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.178:9092
\ -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
$sudo mkdir -p /data/kafka/logs
#单机启动
$sudo docker run -d --name kafka --publish 9092:9092 \
--link zookeeper \
--env KAFKA_ZOOKEEPER_CONNECT=192.168.200.178:2181 \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.200.178 \
--env KAFKA_ADVERTISED_PORT=9092 \
--env KAFKA_LOG_DIRS=/kafka/kafka-logs-1 \
-v /data/kafka/logs:/kafka/kafka-logs-1 \
wurstmeister/kafka
$sudo chmod 666 /var/run/docker.sock #启动报权限问题解决
#-e KAFKA_BROKER_ID=0 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
#-e KAFKA_ZOOKEEPER_CONNECT=10.9.44.11:2181 /kafka 配置zookeeper管理kafka的路径10.9.44.11:2181/kafka
#-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.9.44.11:9092 把kafka的地址端口注册给zookeeper
#-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口
#-v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间
|
12.Docker compose install
1
2
3
4
5
6
7
8
9
|
$sudo apt install docker-compose
#启动服务
$sudo docker-compose -f docker-compose.yml -d
#停止服务
$sudo docker-compose -f docker-compose.yml stop
#停止并删除服务
$sudo docker-compose -f docker-compose.yml down
# 重启单个容器
$sudo docker-compose restart rabbitmq
|
13.Docker 国内镜像地址
1
2
3
4
5
6
7
8
|
$sudo vim /etc/docker/daemon.json
{
"registry-mirrors":[
"https://9cpn8tt6.mirror.aliyuncs.com",
"https://registry.docker-cn.com"
]
}
$sudo service docker restart
|
docker问题
1
2
3
4
5
6
|
Just in case anyone else stumbles upon the same error message. I also received the error: docker.socket: Failed to resolve group docker. And for me the solution as posted in this issue resolved the error:
sudo groupadd docker
sudo usermod -aG docker $USER
sudo systemctl enable docker
sudo systemctl start docker
|
14.docker-compose 启动kafka
1
|
$ docker compose -f docker-compose.yml up -d
|