修改docker容器时区
宿主机执行:
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器名:/usr/share/zoneinfo/Asia
容器执行:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
1、mysql
备注:dockerHub
docker run -p 3306:3306 --privileged=true \
--name mysql \
--restart=always \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
2、redis
备注:dockerHub
docker run -p 6379:6379 --privileged=true \
--name redis \
--restart=always \
-v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /mydata/redis/data:/data \
-d redis redis-server /usr/local/etc/redis/redis.conf \
--appendonly yes
--requirepass “password”
3、nacos
备注:nacos官网、dockerHub,若为远程服务器记得端口开放除8848以外,还要开放9848、9849两个nacos偏移端口,不然服务注册会失败。
(1)默认derby持久化方式
docker run -d --privileged=true \
-e MODE=standalone \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--name nacos \
--restart=always \
nacos/nacos-server
(2)采用mysql持久化方式
docker run -d --privileged=true \
--name nacos \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=服务器地址 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=数据库库名,需要创建数据库执行nacos-mysql.sql脚本 \
--restart=always \
nacos/nacos-server
4、RocketMq
4.1 普通docker命令执行
备注:github
这边使用官网给的host模式,当然也可以使用自定义网络模式,只要能让broker注册到namesrv就可以。
- 注:本地测试host默认启动无法被宿主机应用访问到,删除’–net=host’参数后被宿主机访问到,恳求看到的大佬帮忙解释一下!!!
(1)启动namesrver
docker run -itd \
-p 9876:9876 \
--privileged=true \
--name mqnamesrv \
apache/rocketmq:5.1.0 ./mqnamesrv
(2)启动broker
要保证内存够用,我有两次启动失败,都是jvm的问题,第一次报错原因:OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
,为此添加了 -XX:ParallelGCThreads=1
,第二次报错:/home/rocketmq/rocketmq-4.9.4/bin/runbroker.sh: line 156: 28 Killed $JAVA ${JAVA_OPT} $@
,我停掉了服务器上其他的应用并添加了-server -Xms256m -Xmx256m -Xmn128m
。
docker run -itd \
--privileged=true \
--name mqbroker \
--link mqnamesrv:mqnamesrv \
-v /mydata/rocketmq/store:/tmp/store \
-e "NAMESRV_ADDR=mqnamesrv:9876" \
-e JAVA_OPT="${JAVA_OPT} -XX:ParallelGCThreads=1 -server -Xms256m -Xmx256m -Xmn128m" \
apache/rocketmq:5.1.0 ./mqbroker
(3)启动dashboard
映射到nameserver
docker run -d --name mqconsole \
-p 8880:8080 \
--link mqnamesrv:mqnamesrv \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=mqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-t styletang/rocketmq-console-ng
4.2 docker容器编排
# 启动mq,
version: '2'
services:
mqnamesrv:
image: apache/rocketmq:5.1.0 # 镜像
command: ./mqnamesrv # command命令
privileged: true
ports: # 暴露端口
- "9876:9876"
networks: # 网络(三个容器间通信)
- rocketmq_network
mqbroker:
image: apache/rocketmq:5.1.0
command: ./mqbroker -c ../conf/broker.conf
privileged: true
environment: # 环境变量
NAMESRV_ADDR: mqnamesrv:9876
JAVA_OPT: "-XX:ParallelGCThreads=1 -server -Xms256m -Xmx256m -Xmn128m"
volumes: # 容器卷
- /mydata/rocketmq/store:/tmp/store
- D:\rocketMq_data\conf:/home/rocketmq/rocketmq-5.1.0/conf
ports:
- "10909:10909"
- "10910:10910"
- "10911:10911"
networks:
- rocketmq_network
mqconsole:
image: styletang/rocketmq-console-ng
environment:
JAVA_OPTS: "-Drocketmq.namesrv.addr=mqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
ports:
- "8880:8080"
networks:
- rocketmq_network
# 自定义网络
networks:
rocketmq_network:
driver: bridge
5、Jenkins
docker pull jenkins/jenkins:lts-jdk11
docker run -itd --name=jenkins \
-p 8180:8080 -p 50000:50000 \
-v d:/opt/docker/jenkins:/var/jenkins_home \
jenkins/jenkins:lts-jdk11