docker安装常用工具

mysql

安装mysql

需要哪些镜像,可以到docker hub中查找:https://hub.docker.com/ 在hub中搜索mysql,可以看到官方提供的镜像,点开官方镜像,点开Tags标签,下滑可以找到想要的版本,我选择5.7

回到CentOS中,让docker去hub中拉取5.7镜像 sudo docker pull mysql:5.7 Tags中的版本和这里的版本保持一致,镜像名和官方提供的名称保持一致。之后在docker中安装镜像:

sudo docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

--name指定容器名字 -v目录挂载 -p指定端口映射 -e设置mysql参数 -d后台运行。

3306:3306就是外部通过3306访问docker,docker再通过3306访问mysql,你也可以写成3307:3308。

-v就是将docker中的myqsl文件复制到CentOS本机,和一般意义的复制不同,通过更改本机文件配置,可以让docker中mysql使用同样的配置;而在docker中更改这些文件,外部文件也会随之更改。这样可以在外部随意修改配置文件就能更改mysq配置,也可以随时拿到mysql数据库的日志,数据库等数据。

-e就是设置mysql的登录密码。-d就是设置后台运行mysql。

安装好后,我们可以使用 docker ps 查看当前docker内部运行的进程,发现mysql即为安装成功。

配置mysql

设置myql容器在docker启动的时候启动sudo docker update mysql --restart=always

因为之前将mysql的配置文件目录挂载到了本机,所以可以在本机的/mydata/mysql/conf中创建my.cnf文件配置docker内的mysql。

进入mysql房间,可以发现内部就是一个Linux环境,可以使用ls等命令查看 docker exec -it mysql bin/bash

因为有目录映射,所以我们可以直接在镜像外执行vi /mydata/mysql/conf/my.cnf,将以下内容写入my.cnf:

[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

搭建mysql主从复制

新建一个mysql-master实例:

sudo docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

/mydata/mysql-master/conf/my.cnf 下master实例的配置文件需要修改为:

[mysqld]
##设置server_id,同一局域网中需要唯一
server_id=101
##指定不需要同步的数据库名称
binlog-ignore-db=mysql
##开启二进制日志功能
log-bin=mall-mysql-bin
##设置二进制内存使用大小(事务)
binlog_cache_size=1M
##设置使用的二进制日志格式(mixed,statment,row)
binlog_format=mixed
##二进制日志过期清理时间,默认值为0,表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有错误或者指定类型的错误,避免slave端复制中断
##如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

在mysql中创建数据同步用户:
create user 'slave'@'%' identified by '123456';
grant replication slave, replication client on *.* to 'slave'@'%';
新建mysql-slave实例:

sudo docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

修改slave配置文件:

[mysqld]
## 设置server_id,同一局域网内需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备slave作为其他数据库实例的master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事物)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间,默认为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中所遇到的错误
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示salve将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1

在mysql-master实例中查看主从配置状态:
show master status;

+-----------------------+----------+--------------+------------------+-------------------+
| File                  | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mall-mysql-bin.000001 |      617 |              | mysql            |                   |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

在mysql-slave实例中,配置主从:
change master to master_host='172.21.0.11', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
查看mysql-slave实例主从状态,关注Slave_IO_Running,Slave_SQL_Running是否变为yes
show slave status \G;
在mysql-slave实例中开启主从同步:
start slave;

redis

安装redis

docker拉取最新镜像: docker pull redis

这里有个坑:redis配置文件只有一个redis.conf,如果只想挂载该文件,而不是整个目录的话,需要提前在本机创建好文件。否则docker会认为/mydata/redis/conf/redis.conf是个目录。

在宿主机上:
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf

安装redis:

docker run -p 6379:6379 --name redis
-v /mydata/redis/data:/data
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf
-d redis redis-server /etc/redis/redis.conf

配置redis

redis默认不会将内存中的数据持久化,我们需要对其修改持久化策略。

在本机修改配置文件 vim /mydata/redis/conf/redis.conf

打开aof持久化 appendonly yes

重启redis docker restart redis

设置redis容器在docker启动的时候启动 docker update redis --restart=always

进入redis客户端:docker exec -it redis redis-cli

配置redis密码:
redis是内存型数据库,其高效的性能也使得其密码更容易爆破,所以建议密码强度要很高才行。可以使用在线密码生成器(密码长度长,特殊符号多,密码字符不重复)
进入本机配置文件 vim /mydata/redis/conf/redis.conf

插入该命令,保存退出 requirepass test123

重启redis docker restart redis

搭建redis三主三从

首先开启6个redis实例:

docker run -d --name redis-node-1 --net host --privileged=true -v /mydata/redis/share/redis-node-1:/data redis --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /mydata/redis/share/redis-node-2:/data redis --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /mydata/redis/share/redis-node-3:/data redis --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /mydata/redis/share/redis-node-4:/data redis --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v /mydata/redis/share/redis-node-5:/data redis --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /mydata/redis/share/redis-node-6:/data redis --cluster-enabled yes --appendonly yes --port 6386

进入任意一台redis实例,构建主从关系
redis-cli --cluster create 172.21.0.11:6381 172.21.0.11:6382 172.21.0.11:6383 172.21.0.11:6384 172.21.0.11:6385 172.21.0.11:6386 --cluster-replicas 1
执行完后出现:

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.21.0.11:6385 to 172.21.0.11:6381
Adding replica 172.21.0.11:6386 to 172.21.0.11:6382
Adding replica 172.21.0.11:6384 to 172.21.0.11:6383
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 67984dcab154a80e5334cd3968c6467c98034c33 172.21.0.11:6381
   slots:[0-5460] (5461 slots) master
M: f5977a6238cce25288a2ec73d40bb491dfb594e6 172.21.0.11:6382
   slots:[5461-10922] (5462 slots) master
M: aa2f41208cc397fb029c3a61c1fcac19c890bb2e 172.21.0.11:6383
   slots:[10923-16383] (5461 slots) master
S: 4236518e7b26f181a7388900594fbb21f09c590b 172.21.0.11:6384
   replicates aa2f41208cc397fb029c3a61c1fcac19c890bb2e
S: c07570ac49c2d7e7deedb044fa56837b3c04e42d 172.21.0.11:6385
   replicates 67984dcab154a80e5334cd3968c6467c98034c33
S: dbe75f01aa3c3e49308bf0fa218d6806d17b6d14 172.21.0.11:6386
   replicates f5977a6238cce25288a2ec73d40bb491dfb594e6
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
....
>>> Performing Cluster Check (using node 172.21.0.11:6381)
M: 67984dcab154a80e5334cd3968c6467c98034c33 172.21.0.11:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 4236518e7b26f181a7388900594fbb21f09c590b 172.21.0.11:6384
   slots: (0 slots) slave
   replicates aa2f41208cc397fb029c3a61c1fcac19c890bb2e
S: dbe75f01aa3c3e49308bf0fa218d6806d17b6d14 172.21.0.11:6386
   slots: (0 slots) slave
   replicates f5977a6238cce25288a2ec73d40bb491dfb594e6
M: aa2f41208cc397fb029c3a61c1fcac19c890bb2e 172.21.0.11:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: c07570ac49c2d7e7deedb044fa56837b3c04e42d 172.21.0.11:6385
   slots: (0 slots) slave
   replicates 67984dcab154a80e5334cd3968c6467c98034c33
M: f5977a6238cce25288a2ec73d40bb491dfb594e6 172.21.0.11:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

可以看到16384个槽位(0-16383)已经都被分配完成,0-5460、5461-10922、10923-16383分割为3段,每段被一对主从实例占用。端口为6381、6382、6383的redis实例成为了master节点。

进入6381实例查看集群状态:

redis-cli -p 6381
cluster info
cluster nodes

集群模式存取数据:

redis-cli -p 6381 -c
127.0.0.1:6381> set k1 v1
-> Redirected to slot [12706] located at 172.21.0.11:6383
OK
172.21.0.11:6383> set k2 v2
-> Redirected to slot [449] located at 172.21.0.11:6381
OK
172.21.0.11:6381> set k3 v3
OK
172.21.0.11:6381> set k4 v4
-> Redirected to slot [8455] located at 172.21.0.11:6382
OK
172.21.0.11:6382>

查看集群状况和keys存放情况:
redis-cli --cluster check 172.21.0.11:6381

三主三从搭建好后可以尝试关闭一主,查看主从切换情况。

主从扩容至四主四从

手动再启动两个redis实例:

docker run -d --name redis-node-7 --net host --privileged=true -v /mydata/redis/share/redis-node-7:/data redis --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /mydata/redis/share/redis-node-8:/data redis --cluster-enabled yes --appendonly yes --port 6388

6387请求一个master节点(6382)加入集群(在之前尝试主从切换的操作中,6381成为了6385的slave)
redis-cli --cluster add-node 172.21.0.11:6387 172.21.0.11:6382

查看集群分布情况,可以看到6387已经加入集群,但是还未被分配槽位

redis-cli --cluster check 172.21.0.11:6381
172.21.0.11:6383 (aa2f4120...) -> 1 keys | 5461 slots | 1 slaves.
172.21.0.11:6385 (c07570ac...) -> 2 keys | 5461 slots | 1 slaves.
172.21.0.11:6382 (f5977a62...) -> 1 keys | 5462 slots | 1 slaves.
172.21.0.11:6387 (38098977...) -> 0 keys | 0 slots | 0 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 172.21.0.11:6381)
S: 67984dcab154a80e5334cd3968c6467c98034c33 172.21.0.11:6381
   slots: (0 slots) slave
   replicates c07570ac49c2d7e7deedb044fa56837b3c04e42d
M: aa2f41208cc397fb029c3a61c1fcac19c890bb2e 172.21.0.11:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 4236518e7b26f181a7388900594fbb21f09c590b 172.21.0.11:6384
   slots: (0 slots) slave
   replicates aa2f41208cc397fb029c3a61c1fcac19c890bb2e
M: c07570ac49c2d7e7deedb044fa56837b3c04e42d 172.21.0.11:6385
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: f5977a6238cce25288a2ec73d40bb491dfb594e6 172.21.0.11:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: dbe75f01aa3c3e49308bf0fa218d6806d17b6d14 172.21.0.11:6386
   slots: (0 slots) slave
   replicates f5977a6238cce25288a2ec73d40bb491dfb594e6
M: 38098977701bfea1c1308e89c3b1e851d278ef2c 172.21.0.11:6387
   slots: (0 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

重新分配槽号,有四台主实例,可以选择均分16384,即每台分配4096个槽位。在后面的提问命令中输入4096、6387实例的id、all、yes。分配完成后,再次查看cluster分配情况,即可发现每台主节点都分配了4096个槽位。并且是由前三个主节点各自分割一部分,凑够4096个给6387使用。
redis-cli --cluster reshard 172.21.0.11:6381

为6387分配6388slave:
redis-cli --cluster add-node 172.21.0.11:6388 172.21.0.11:6387 --cluster-slave --cluster-master-id <6387的编号>

主从缩容至三主三从

删除6388从实例
redis-cli --cluster del-node 172.21.0.11:6388 <6388的实例编号>

重新分配集群的槽位,这里选择将6387所有的槽位都分配给6382。输入4096、槽位接受者id、槽位提供者id、done。再次查看槽位分配情况,可发现6382的槽位有8192个。
redis-cli --cluster reshard 172.21.0.11:6381

删除6387主实例
redis-cli --cluster del-node 172.21.0.11:6387 <6387的实例编号>

rabbitmq

配置并运行

docker run -d -p 5672:5672 -p 15672:15672 \
--name rabbitmq \
-v /data:/var/lib/rabbitmq \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin

默认运行
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq

consul

启动单点服务
docker run -d --name=cs -p 8500:8500 consul agent -server -bootstrap -ui -client 0.0.0.0

jenkins

https://www.cnblogs.com/fuzongle/p/12834080.html

posted @ 2022-02-13 20:55  moon_orange  阅读(174)  评论(0编辑  收藏  举报