Linux安装docker
安装docker
定制软件源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装最新版docker
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce
systemctl enable docker
systemctl start docker
设置加速源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://2y6e4cdr.mirror.aliyuncs.com"]
}
EOF
设置开机自启动
systemctl enable docker
systemctl daemon-reload
systemctl start docker
Docker安装MySQL
1、拉取MySQL镜像
docker pull mysql
2、查看镜像
使用以下命令来查看是否已安装了 mysql镜像
docker images
3、运行MySQL容器
docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
-e TZ=Asia/Shanghai \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root -d mysql:latest
参数描述:
docker run : 在docker中启动一个容器实例
-d : 该容器在后台运行
-p 3306:3306 : 容器与主机映射端口为,3306(主机端口,即外部连接mysql使用的端口号):3306(容器端口号)
--name mysql : 容器运行后的名称
-v /mysqldata/mysql/log:/var/log/mysql : 将容器/var/log/mysql目录下的数据,备份到主机的/mysqldata/mysql/log目录下
-v /mysqldata/mysql/data:/var/lib/mysql : 将容器/var/lib/mysql目录下的数据,备份到主机的 /mysqldata/mysql/data目录下
-v /mysqldata/mysql/conf:/etc/mysql/conf.d : 将容器/etc/mysql目录下的数据,备份到主机的/etc/mysql/conf.d中
-e MYSQL_ROOT_PASSWORD=root : 设置当前mysql实例的密码为root
mysql:8.0 : 需要运行的容器名称以及版本号
Docker安装Nacos
1、拉取nacos
docker pull nacos/nacos-server
2、运行
docker run -d \
--name nacos \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.8.130 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=5000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" \
nacos/nacos-server
3、停止
docker stop nacos
#查看正在运行的容器
docker ps -a
删除Nacos容器
docker rm <container_id>
查看镜像
docker images
删除镜像
需先停止容器》删除容器》删除镜像
docker rmi 镜像名
查看日志
docker logs -f mysql
安装Docker后出现无法联网
#开启网络*
nmcli networking on
Docker安装RocketMQ
安装NameServer
docker pull rocketmqinc/rocketmq
创建namesrv数据存储路径
mkdir -p /docker/rocketmq/data/namesrv/logs /docker/rocketmq/data/namesrv/store
运行namesrv
docker run -d \
--restart=always \
--name mqnamesrv \
-p 9876:9876 \
-v /docker/rocketmq/data/namesrv/logs:/root/logs \
-v /docker/rocketmq/data/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
-e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m" \
--ulimit nofile=65535:65535 \
--ulimit nproc=65535:65535 \
rocketmqinc/rocketmq \
sh mqnamesrv
- 参数说明
参数 | 说明 |
---|---|
-d | 以守护进程的方式启动 |
- -restart=always | docker重启时候容器自动重启 |
- -name mqnamesrv | 把容器的名字设置为mqnamesrv |
-p 9876:9876 | 把容器内的端口9876挂载到宿主机9876上面 |
-v /docker/rocketmq/nameserver/logs:/root/logs | 目录挂载 |
-v /docker/rocketmq/nameserver/store:/root/store | 目录挂载 |
-e “MAX_POSSIBLE_HEAP=100000000” | 设置容器的最大堆内存为100000000 |
apache/rocketmq | 使用的镜像名称 |
sh mqnamesrv | 启动namesrv服务 |
安装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
# 设置broker节点所在服务器的ip地址 这里改成你虚拟机IP或云服务器IP
brokerIP1 = 192.168.8.128
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95
运行broker
docker run -d \
--restart=always \
--name mqbroker \
--link mqnamesrv:namesrv \
--privileged=true \
-p 10911:10911 \
-p 10912:10912 \
-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/conf/broker.conf \
-e "NAMESRV_ADDR=192.168.8.130:9876" \
-e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m" \
-e "MAX_POSSIBLE_HEAP=200000000" \
--ulimit nofile=65535:65535 \
--ulimit nproc=65535:65535 \
rocketmqinc/rocketmq \
sh mqbroker -c /opt/rocketmq/conf/broker.conf
参数说明
-d 以守护进程的方式启动
- -restart=always docker重启时候容器自动重启
- -name mqbroker 把容器的名字设置为rmqbroker
- --link mqnamesrv:namesrv 和mqnamesrv容器通信
-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服务的最大堆内存
rocketmqinc/rocketmq 使用的镜像名称
sh mqbroker -c /opt/docker/rocketmq/broker.conf 指定配置文件启动broker节点
安装控制台
docker pull pangliang/rocketmq-console-ng
启动控制器
以下IP改成自己的服务器IP或虚拟机IP 项目访问地址为》》IP:8080
docker run -d --restart=always --name rmqadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.8.128 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 pangliang/rocketmq-console-ng
docker安装seata
安装镜像
docker pull seataio/seata-server:1.4.2
添加配置文件
#创建文件夹,将register.conf和file.conf放在 /mydata/seata/conf 下面
mkdir -p /mydata/seata/conf
mkdir -p /mydata/seata/logs
在nacos创建配置文件seataServer.properties
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableClientBatchSendRequest=false
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
service.vgroupMapping.gangge=default
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
store.mode=db
store.publicKey=
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?serverTimezone=UTC
store.db.user=root
store.db.password=root
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.sentinel.masterName=
store.redis.sentinel.sentinelHosts=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=
store.redis.queryLimit=100
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
log.exceptionRate=100
transport.serialization=seata
transport.compressor=none
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
创建容器
docker run -d -p 8091:8091 \
-e SEATA_IP=192.168.8.130 \
-e SEATA_PORT=8091 \
-v /mydata/seata/conf/registry.conf:/seata-server/resources/registry.conf \
-v /mydata/seata/conf/file.conf:/seata-server/resources/file.conf \
-v /mydata/seata/logs:/root/logs \
--ulimit nofile=65535:65535 \
--ulimit nproc=65535:65535 \
--restart=always \
--name seata seataio/seata-server:1.4.2
docker容器启动失败
解决思路及过程:
1 既然是报内存分配过程中,由于内存不够而 Aborted。 那就增大点儿内存再试试, 结果并没有成功。 我在其它机器启动这个java服务只分配了2G内存就启动成功,此处增大到8G, 仍无法成功。 所以这并不是内存不足导致的。
2 上网搜索,得到答案是需要设置 ulimit 下 nofile 和 nproc 这两个参数。 搜索到的结果有两种, 一种是说主机系统默认值是1024, 这个太小需要调大值 65535 或 100000 或 1048576 。 另一种是说docker启动容器时,有时这个值太大,需要调低一些。 总的来说就是这个值大小不合适,需要调整。 调整步骤有两个:
调整主机的系统默认值:
我先用 ulimit -n 查看了一下, 系统默认值是1024 。 然后在 /etc/profile 中添加 ulimit -n 65535 。 然后使用 source /etc/profile 命令使配置生效。
调整Docker下的默认值, 这个网上的方法很多,此处就随便说两种
方法一:
在执行 docker run 命令时添加参数 --ulimit nofile=65535:65535 --ulimit nproc=65535:65535
例如:
docker run -itd -p 7010:7010 --name service-a 64b87045a6fa --ulimit nofile=65535:65535 --ulimit nproc=65535:65535
方法二:
在 /etc/systemd/system/ 目录下, 创建 docker.service.d 目录
进入该目录,创建一个文件,名为 docker.conf
在文件中加入以下配置:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --default-ulimit nofile=65535:65535 -H fd://
啥意思呢? 就是说在执行docker命令时,直接默认使用该参数, 不需要在docker run 命令中定义了。
执行 systemctl daemon-reload (重启Docker daemon)
执行 systemctl restart docker (重启Docker 服务)
两边都配置好后, 再次开始测试, 然鹅结果依旧不行。 因为帖子上有很多赞,说明这个方法确实解决了一些道友的问题, 但我的问题不是如此。
3 我觉得也许是我第二步的配置有问题,但自己没发现导致问题依然存在。 于是就进入container中, 瞅瞅 container 中的 ulimit -n 值会是多少。 此时报了另外一个错: bash: ulimit: open files: cannot get limit: Operation not permitted.
再次搜索, 发现在Docker run命令中加上 --privileged=true 即可以有权限在container中执行这些命令。
例如: docker run -itd --privileged=true -p 7010:7010 --name service-a 64b87045a6fa 。 然后进入容器再次执行 ulimit -n 命令, 成功的输出了 65535 . 说明之前的配置确实是生效了的。
————————————————
版权声明:本文为CSDN博主「Tiny-V」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013071319/article/details/107084902
安装JDK1.8
yum -y install java-1.8.0-openjdk-devel
centos 安装rocketmq
RocketMQ官网:https://rocketmq.apache.org/download/
1、下载rocketMq:
wget https://dist.apache.org/repos/dist/release/rocketmq/5.1.4/rocketmq-all-5.1.4-bin-release.zip
2、安装解压工具:
yum install -y unzip zip
3、解压:
unzip rocketmq-all-5.1.4-bin-release.zip
4、进入文件夹:
cd rocketmq-all-5.1.4-bin-release
5、调整 runserver.sh 参数
由于默认启动的最大内存比较大,需要修改小点保证服务能正常启动。
调整前:
JAVA_OPT=“${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m”
调整后:
JAVA_OPT=“${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m”
6、调整 runbroker.sh 参数
调整前:
JAVA_OPT=“${JAVA_OPT} -server -Xms8g -Xmx8g”
调整后:
JAVA_OPT=“${JAVA_OPT} -server -Xms256m -Xmx256m”
7、启动 namesrv
nohup sh mqnamesrv & tail -f nohup.out
8、启动 broker(IP改成自己的)
nohup sh mqbroker -n 192.168.23.131:9876 & tail -f nohup.out
docker安装Zookeeper和kafka
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
#启动zookeeper容器
docker run -d --name zookeeper --restart=always -p 2181:2181 -t wurstmeister/zookeeper
#启动kafka容器
docker run -d --name kafka --restart=always --publish 9092:9092 --link zookeeper \
--env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
--env KAFKA_ADVERTISED_HOST_NAME=172.16.0.117 \
--env KAFKA_ADVERTISED_PORT=9092 \
--volume /etc/localtime:/etc/localtime wurstmeister/kafka:latest\
docker安装redis
docker search redis
docker pull redis
docker run -p 6379:6379 --name redis --restart=always -d redis:latest redis-server