- 基于Docker-Compose部署应用
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the “License”); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an “AS IS” BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- 所属集群名字
- broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,
- 在 broker-b.properties 使用: broker-b
- 0 表示 Master,> 0 表示 Slave
- nameServer地址,分号分割
- namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
- 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
- 解决方式1 加上一句 producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
- brokerIP1=192.168.0.253
- 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
- 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
- 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
- Broker 对外服务的监听端口
- 删除文件时间点,默认凌晨4点
- 文件保留时间,默认48小时
- commitLog 每个文件的大小默认1G
- ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
- destroyMapedFileIntervalForcibly=120000
- redeleteHangedFileInterval=120000
- 检测物理文件磁盘空间
- 存储路径
- storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
- commitLog 存储路径
- storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
- 消费队列存储
- storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
- 消息索引存储路径
- storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
- checkpoint 文件存储路径
- storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
- abort 文件存储路径
- abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
- 限制的消息大小
- flushCommitLogLeastPages=4
- flushConsumeQueueLeastPages=2
- flushCommitLogThoroughInterval=10000
- flushConsumeQueueThoroughInterval=60000
- Broker 的角色
- - ASYNC_MASTER 异步复制Master
- - SYNC_MASTER 同步双写Master
- - SLAVE
- 刷盘方式
- - ASYNC_FLUSH 异步刷盘
- - SYNC_FLUSH 同步刷盘
- 发消息线程池数量
- sendMessageThreadPoolNums=128
- 拉消息线程池数量
- pullMessageThreadPoolNums=128
基于Docker-Compose部署应用
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Docker Compose安装
下载Docker Compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
修改文件权限为可执行
chmod +x /usr/local/bin/docker-compose
查看Docker Compose 版本
正常显示版本说明安装成功
docker-compose --version
Docker Compose 使用
Docker Compose 使用需要先编写docker-compose.yml文件来编排容器的环境,然后通过Docker Compose命令来执行docker-compose.yml文件。
使用Dockerfile定义应用程序环境,一般需要修改初始镜像行为时才需要使用,Dockerfile文件可以在docker-compose.yml文件中引入,也可以不使用Dockerfile文件直接编写docker-compose.yml文件
使用docker-compose.yml定义需要部署的应用程序服务,以便执行脚本一次性部署
使用docker-compose up命令将所有应用服务一次性部署起来
Docker Compose Yml文件常用指令
docker-compose.yml文件是用来编排一组容器的的文件,在这个文件中将多个镜像编排在一起组成一个服务,通过docker-compose命令就可以启动编排的所有容器,实现一键启动所有服务。
举个例子:
SpringWeb项目需要连接Myql数据库,所以我们除了部署项目以外还需要安装Mysql数据库。采用Dockerfile的方式,需要分别编写SpringWeb和mysql两个dockerfile文件来分别执行,需要执行两次。采用Docker Compose的方式,我们只需要将SpringWeb和mysql的编排写进docker-compose.yml文件,执行这一个编排文件即可部署和安装好我们的应用,避免多次执行dockerfile文件。
images 指定运行的镜像名称
# 运行的是mysql5.7的镜像
image: mysql:5.7
container_name 指定容器的名称
# 容器名称为mysql
container_name: mysql
ports指定宿主机和容器的端口映射
# 将宿主机的3306端口映射到容器的3306端口
# 宿主机端口:容器开放端口
ports:
- 3306:3306
volumes 将宿主机的目录挂载到容器目录
# 将宿主机文件挂载到myql容器中
# 宿主机目录:容器中的目录
volumes:
- /mydata/mysql/log:/var/log/mysql
- /mydata/mysql/data:/var/lib/mysql
- /mydata/mysql/conf:/etc/mysql
environment 配置环境变量
# 设置mysqlroot帐号密码的环境变量
environment:
- MYSQL_ROOT_PASSWORD=root
external_links 链接其他容器
# 容器名称:别名
# 表示在当前容器中可以用别名的方式访问对应的容器
external_links:
- mysql:database
Docker Compose常用命令
- 执行Docker-compose文件
-f 指定docker compose 文件,默认为docker-compose.yml -d表示后台运行
docker-compose -f docker-compose-evn.yml up -d
仅重启修改过的容器
docker-compose --compatibility up -d
停止所有容器
docker-compose stop
列出所有容器信息
docker-compose ps
Docker Compose部署应用
Docker Compose将所管理的容器分为三层,工程、服务及容器。docker-compose.yml中定义所有服务组成了一个工程,services节点下即为服务,服务之下为容器。容器与容器直之间可以以服务名称为域名进行访问。
docker-compose.yml文件
version: '3'
services:
#指定服务名称
db:
#指定服务使用的镜像
image: mysql:5.7
#指定容器名称
container_name: mysql
#指定服务运行的端口号
ports:
- 3306:3306
#指定容器中需要挂载的文件
volumes:
- /mydata/mysql/log:/var/log/mysql
- /mydata/mysql/data:/var/lib/mysql
- /mydata/mysql/conf:/etc/mysql
#指定容器环境变量
environment:
- MYSQL_ROOT_PASSWORD=root
privileged: true
#指定服务名称
myspring-compose:
#指定服务使用的镜像
image: spring/my-spring:0.0.5-SNAPSHOT
build:
Dockerfile
#指定容器名称
container_name: myspring
#指定服务运行的端口
ports:
- 8080:8080
# 指定使用localhost域名访问db这个容器
links:
- db:localhost
#指定容器中需要挂载的文件
volumes:
- /etc/localtime:/etc/localtime
- /mydata/app/myspring/logs:/var/logs
privileged: true
执行Docker-compose文件
docker-compose -f docker-compose.yml up -d
[root@localhost mall]# docker-compose -f docker-compose.yml up -d
WARNING: Found orphan containers (kibana, logstash, mongo, rabbitmq, elasticsearch, nginx, redis) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Creating myspring ... done
Creating mysql-compose ... done
查看容器 ```properties [root@localhost mall]# docker-compose ps Name Command State Ports
myspring java -jar /my-spring-0.0.5 … Up 0.0.0.0:8080->8080/tcp
mysql-compose docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
<a name="NeaBm"></a>
### Docker Compose 安装RocketMQ
- docker-compose.yml 文件
```yaml
version: '3.5'
services:
rmqnamesrv:
image: foxiswho/rocketmq:server
container_name: rmqnamesrv
ports:
- 9876:9876
volumes:
- ./data/logs:/opt/logs
- ./data/store:/opt/store
networks:
rmq:
aliases:
- rmqnamesrv
rmqbroker:
image: foxiswho/rocketmq:broker
container_name: rmqbroker
ports:
- 10909:10909
- 10911:10911
volumes:
- ./data/logs:/opt/logs
- ./data/store:/opt/store
- ./data/brokerconf/broker.conf:/etc/rocketmq/broker.conf
environment:
NAMESRV_ADDR: "rmqnamesrv:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"
command: mqbroker -c /etc/rocketmq/broker.conf
depends_on:
- rmqnamesrv
networks:
rmq:
aliases:
- rmqbroker
rmqconsole:
image: styletang/rocketmq-console-ng
container_name: rmqconsole
ports:
- 8080:8080
environment:
JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
depends_on:
- rmqnamesrv
networks:
rmq:
aliases:
- rmqconsole
networks:
rmq:
name: rmq
driver: bridge
- broker.conf配置文件
```properties
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the “License”); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
#http://www.apache.org/licenses/LICENSE-2.0
#Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an “AS IS” BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
所属集群名字
brokerClusterName=DefaultCluster
broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,
在 broker-b.properties 使用: broker-b
brokerName=broker-a
0 表示 Master,> 0 表示 Slave
brokerId=0
nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
解决方式1 加上一句 producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
brokerIP1=192.168.0.253
在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
autoCreateTopicEnable=true
是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
Broker 对外服务的监听端口
listenPort=10911
删除文件时间点,默认凌晨4点
deleteWhen=04
文件保留时间,默认48小时
fileReservedTime=120
commitLog 每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000
检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
存储路径
storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
commitLog 存储路径
storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
消费队列存储
storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
消息索引存储路径
storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
checkpoint 文件存储路径
storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
abort 文件存储路径
abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
限制的消息大小
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
Broker 的角色
- ASYNC_MASTER 异步复制Master
- SYNC_MASTER 同步双写Master
- SLAVE
brokerRole=ASYNC_MASTER
刷盘方式
- ASYNC_FLUSH 异步刷盘
- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
发消息线程池数量
sendMessageThreadPoolNums=128
拉消息线程池数量
pullMessageThreadPoolNums=128
- 执行docker-compose.yml 文件
```shell
docker-compose -f docker-compose.yml up -d