记一次 docker 安装Mysql Redis RocketMQ

1.CentOS安装Docker

Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。

1.1.卸载(可选)

如果之前安装过旧版本的Docker,可以使用下面命令卸载:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

1.2.安装docker

首先需要大家虚拟机联网,安装yum工具

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

然后更新本地镜像源:

# 设置docker镜像源
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
​
yum makecache fast

然后输入命令:

yum install -y docker-ce

docker-ce为社区免费版本。稍等片刻,docker即可安装成功。

1.3.启动docker

服务器不推荐关闭防火墙

Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,可以直接关闭防火墙!

# 关闭防火墙
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

通过命令启动docker:

systemctl start docker  # 启动docker服务
​
systemctl stop docker  # 停止docker服务
​
systemctl restart docker  # 重启docker服务

然后输入命令,可以查看docker版本:

docker -v

1.4.配置镜像加速

docker官方镜像仓库网速较差,我们需要设置国内镜像服务:

参考阿里云的镜像加速文档:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://qd6196li.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker安装mysql

  1. 从DockerHub中拉取一个MySQL指定版本的镜像

docker pull mysql:8.0.24
  1. 创建目录/tmp/mysql/data /docker/mysql/conf

mkdir -p /docker/mysql/data
mkdir -p /docker/mysql/conf

创建myCnf.cnf文件

代码如下

#随便一段英文配数字即可
数据库唯一id
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000

可以在本地电脑创建好后,上传到 docker/mysql/conf目录下

myCnf.cnf文件上传到/tmp/mysql/conf

创建并运行容器

docker run --name=mysql \
  -e MYSQL_ROOT_PASSWORD=password \
  -v /docker/mysql/conf:/etc/mysql/conf.d \
  -v /docker/mysql/data:/var/lib/mysql \
  -p 3306:3306 \
  -d \
  mysql:8.0.24

-e MYSQL_ROOT_PASSWORD:该参数指定root用户密码

但远程连接还是可以使用root密码登录:

进入容器,再次修改密码,主要是有两个用户,远程连接的用户root密码没有修改。

#进入容器 docker exec -it mysql bash

//进入数据库 mysql -u root -p

密码 ​

alter user 'root' identified by 'password';

docker安装redis

#根据项目依赖选择版本
docker pull redis:3.0.7
创建文件夹
mkdir -p /docker/redis/conf
mkdir -p /docker/redis/data
​
在/docker/redis/conf目录下添加配置文件,文件名称:redis.conf
#在redis官网找到对应的版本配置文件:https://redis.io/docs/management/config/
#在配置文件第70行添加:bind 0.0.0.0   #允许任何ip访问
#在398行添加密码    requirepass password   #或者搜索requirepass关键字
​
​创建并运行容器
docker run --restart=always \
-p 6379:6379 \
--name redis \
-v /docker/redis/conf:/etc/redis/conf \
-v /docker/redis/data:/data \
-d redis:3.0.7 redis-server /etc/redis/conf/redis.conf

docker安装RocketMq

拉取指定版本镜像

docker pull apache/rocketmq:4.9.4

创建namesrv数据存储路径

mkdir -p  /docker/rocketmq/data/namesrv/logs   /docker/rocketmq/data/namesrv/store

构建namesrv容器

docker run -d \
--restart=always \
--name rmqnamesrv \
-p 9876:9876 \
-v /docker/rocketmq/data/namesrv/logs:/root/logs \
-v /docker/rocketmq/data/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
apache/rocketmq:4.9.4 \
sh mqnamesrv 

参数

-restart=always| docker重启时候容器自动重启

-name rmqnamesrv | 把容器的名字设置为rmqnamesrv

-p 9876:9876| 把容器内的端口9876挂载到宿主机9876上面

-v /docker/rocketmq/data/namesrv/logs:/root/logs | 把容器内的/root/logs日志目录挂载到宿主机的 /docker/rocketmq/data/namesrv/logs目录

-v /docker/rocketmq/data/namesrv/store:/root/store | 把容器内的/root/store数据存储目录挂载到宿主机的 /docker/rocketmq/data/namesrv目录 rmqnamesrv | 容器的名字

-e “MAX_POSSIBLE_HEAP=100000000” | 设置容器的最大堆内存为100000000 apache/rocketmq | 使用的镜像名称 sh mqnamesrv | 启动namesrvice服务

2.创建broker节点

创建broker数据存储路径

mkdir -p /docker/rocketmq/data/broker/logs   /docker/rocketmq/data/broker/store /docker/rocketmq/conf

创建配置文件

vi /docker/rocketmq/conf/broker.conf
# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
#配置服务器ip地址
brokerIP1 = 170.254.231.321
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95

构建broker容器

需要开放10911,9876,9999端口

docker run -d  \
--restart=always \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-v  /docker/rocketmq/data/broker/logs:/root/logs \
-v  /docker/rocketmq/data/broker/store:/root/store \
-v /docker/rocketmq/conf/broker.conf:/opt/rocketmq-4.9.4/conf/broker.conf \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
apache/rocketmq:4.9.4 \
sh mqbroker -c /opt/rocketmq-4.9.4/conf/broker.conf 

-name rmqbroker | 把容器的名字设置为rmqbroker

–link rmqnamesrv:namesrv | 和rmqnamesrv容器通信

-p 10911:10911 | 把容器的非vip通道端口挂载到宿主机

-p 10909:10909 | 把容器的vip通道端口挂载到宿主机

-e “NAMESRV_ADDR=namesrv:9876” | 指定namesrv的地址为本机namesrv的ip地址:9876

-e “MAX_POSSIBLE_HEAP=200000000” rocketmqinc/rocketmq sh mqbroker | 指定broker服务的最大堆内存 apache/rocketmq | 使用的镜像名称 sh mqbroker

-c /opt/rocketmq-4.4.0/conf/broker.conf | 指定配置文件启动broker节点

3.创建rockermq-console服务

拉取镜像

docker pull styletang/rocketmq-console-ng

构建rockermq-console容器

需要把ip换成自己服务器的地址

docker run -d \
--restart=always \
--name rmqadmin \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=服务器地址:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 9999:8080 \
--ulimit nofile=1024 \
styletang/rocketmq-console-ng:latest

-restart=always| docker重启时候镜像自动重启

-name rmqadmin | 把容器的名字设置为rmqadmin

-e “JAVA_OPTS=-Drocketmq.namesrv.addr=170.215.215.214:9876 | 设置namesrv服务的ip地址

-Dcom.rocketmq.sendMessageWithVIPChannel=false” | 不使用vip通道发送消息

–p 9999:8080 | 把容器内的端口8080挂载到宿主机上的9999端口

需要开放namesrv和broker端口 如果不设置,控制台服务将无法访问namesrv服务 异常信息如下 org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to failed

开放指定端口

firewall-cmd --permanent --zone=public --add-port=9876/tcp
firewall-cmd --permanent --zone=public --add-port=10911/tcp
firewall-cmd --permanent --zone=public --add-port=9999/tcp
# 立即生效
firewall-cmd --reload

访问控制台 网页访问http://服务器ip地址:9999/ 查看控制台信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值