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
-
从DockerHub中拉取一个MySQL指定版本的镜像
docker pull mysql:8.0.24
-
创建目录
/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/ 查看控制台信息