Docker部署脚本

Docker

  • 安装方式
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install -y docker-ce
  • 配置 /etc/docker

    • 增加daemon.json 修改/var/lib/docker 修改为 /data/docker
    {
        "graph": "/data/docker"
    }
    
  • 命令

    • 启动sudo systemctl start docker
    • 重启sudo systemctl restart docker
    • 停止sudo systemctl stop docker

安装Portainer

  • 位置/data/portainer
  • 创建脚本touch run.sh
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

下面的docker-compose.yml 都是放在portainer中

Traefik

  • 位置/data/traefik

  • 创建文件 traefik.tomltouch acme.json

    • 证书acme.json
    • 配置traefik.toml 获取基础配置wget https://raw.githubusercontent.com/containous/traefik/master/traefik.sample.toml
    • 设置权限chmod 600 acme.json
  • traefik.toml 增加配置

# 自动签发证书并且自动续期    
[certificatesResolvers.le.acme]
  email = "邮件@email.com"
  storage = "acme.json"
  [certificatesResolvers.le.acme.tlsChallenge]
  • docker-compose.yml
version: '2'

services:
  reverse-proxy:
    image: traefik:v2.2
    container_name: traefik
    ports:
      - "80:80"
      - "443:443"
    environment:
        TZ: Asia/Shanghai
    volumes:
      - /data/traefik/traefik.toml:/etc/traefik/traefik.toml
      - /data/traefik/acme.json:/acme.json
      - /data/traefik/log:/log
      - /var/run/docker.sock:/var/run/docker.sock
  • 使用 在服务添加代码
  服务:
    networks:
          - default
    labels:
          - traefik.http.routers.whoami.rule=Host(`域名`)
          - traefik.http.routers.whoami.tls=true
          - traefik.http.routers.whoami.tls.certresolver=le
使用traefik_default网络
networks:
  default:
    external:
      name: traefik_default

Rocketmq 双Master

  • 方式https://github.com/foxiswho/docker-rocketmq
  • 位置/data/rocketmq
  • 创建目录
# 创建目录
mkdir -p ./rmqs/logs
mkdir -p ./rmqs/store
mkdir -p ./rmq/logs
mkdir -p ./rmq/store
mkdir -p ./rmq/brokerconf
  • 配置文件 在rmq/brokerconf创建文件broker.confplain_acl.ym

  • 设置权限

# 设置目录权限
chmod -R 777 ./rmqs/logs
chmod -R 777 ./rmqs/store
chmod -R 777 ./rmq/logs
chmod -R 777 ./rmq/store
chmod -R 777 ./rmq/brokerconf
  • 配置文件 ACL plain_acl.yml
accounts:
    - accessKey: 账户
      secretKey: 密码
      admin: true
  • 配置文件broker.conf
# 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
# ip1 broker-a
# ip2 broker-b
brokerName=broker-b

#0 表示Master,>0 表示Slave
brokerId=0

#nameServer地址
namesrvAddr=ip1:9876;ip2:9876
#namesrvAddr=rmqnamesrv: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
# 公网ip
brokerIP1=ip

#在发送消息时,自动创建服务器不存在的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
# 开启认证
aclEnable=true
  • docker-compose.yml
version: '2'
services:
  rmqnamesrv:
    image: foxiswho/rocketmq:4.8.0
    container_name: rmqnamesrv
    restart: always
    ports:
      - 9876:9876
    volumes:
      - /data/rocketmq/rmqs/logs:/home/rocketmq/logs
      - /data/rocketmq/rmqs/store:/home/rocketmq/store
    environment:
      JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn128m"
      TZ: Asia/Shanghai
    command: ["sh","mqnamesrv"]
    networks:
        rmq:
          aliases:
            - rmqnamesrv
  rmqbroker:
    image: foxiswho/rocketmq:4.8.0
    container_name: rmqbroker
    restart: always
    ports:
      - 10909:10909
      - 10911:10911
    volumes:
      - /data/rocketmq/rmq/logs:/home/rocketmq/logs
      - /data/rocketmq/rmq/store:/home/rocketmq/store
      - /data/rocketmq/rmq/brokerconf/broker.conf:/etc/rocketmq/broker.conf
      - /data/rocketmq/rmq/brokerconf/plain_acl.yml:/home/rocketmq/rocketmq-4.8.0/conf/plain_acl.yml
    environment:
        JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn128m"
        TZ: Asia/Shanghai
    command: ["sh","mqbroker","-c","/etc/rocketmq/broker.conf","autoCreateTopicEnable=true"]
    depends_on:
      - rmqnamesrv
    networks:
      rmq:
        aliases:
          - rmqbroker
networks:
  rmq:
    name: rmq
    driver: bridge

Redis

  • 位置/data/redis
  • 创建文件夹configredis_data
  • redis.conf
bind 0.0.0.0
requirepass 密码
  • docker-compose.yml
version: '2'
services:
  redis:
    image: redis:6.2.4
    container_name: redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      - /data/redis/config/redis.conf:/usr/local/etc/redis/redis.conf
      - /data/redis/redis_data:/data
    command: redis-server /usr/local/etc/redis/redis.conf
    environment:
      TZ: Asia/Shanghai

Emqx

  • 位置/data/emqx

  • 当 EMQ X 成功运行在你的本地计算机上且 EMQ X Dashboard 被默认启用时,你可以访问 http://localhost:18083 来查看你的 Dashboard,默认用户名是 admin,密码是 public

  • 修改admin密码123456

  • 开启Mnesia认证 插件emqx_auth_mnesia

    • 接口文档https://docs.emqx.cn/broker/v4.3/advanced/auth.html
    • 接口POST /api/v4/auth_username?username=test&password=test 添加账户密码
    • 桥接客户端账户密码mqttbridging/mqttbridging
    • 现场客户端line/line
  • 插件关闭遥测 插件emqx_telemetry

  • 关闭匿名登陆

    • 配置文件emqx.conf 关闭匿名登陆 allow_anonymous = false
    • 重启./bin/emqx restart
  • 服务器使用方式一安装

安装方式一

  • 下载wget https://www.emqx.com/zh/downloads/broker/4.3.5/emqx-centos8-4.3.5-amd64.zip
  • 安装unzip emqx-centos8-4.3.5-amd64.zip
  • 运行./bin/emqx start

安装方式二

  • 创建目录
mkdir -p ./data/configs
mkdir -p ./data/mnesia
  • 设置权限
chmod -R 777 ./data/configs
chmod -R 777 ./data/mnesia
  • docker-compose.yml
version: '2'
services:
  postgresql:
    image: emqx/emqx:4.3.5
    container_name: emqx
    restart: always
    environment:
      TZ: Asia/Shanghai
    ports:
      - 1883:1883
      - 8081:8081
      - 8083:8083
      - 8084:8084
      - 8883:8883
      - 18083:18083
  • 不要删除emqx的volumes

Docker私有仓库

  • 位置/data/docker-registry

  • htpasswd工具 yum -y install httpd

  • 账户密码

    • admin
    • 密码
    • 生成脚本htpasswd -Bbn admin 密码 > auth/passwd
  • 使用仓库 配置daemon.json

"insecure-registries": [
          "[ip:5000]"
        ]
  • docker-compose.yml
version: '2'
services:
  registry:
    image: registry:2
    container_name: docker-registry
    volumes:
      - /data/docker-registry:/var/lib/registry
      - /data/docker-registry/auth:/auth
    environment:
      - REGISTRY_AUTH=htpasswd
      - REGISTRY_AUTH_HTPASSWD_REALM=Registry_Realm
      - REGISTRY_AUTH_HTPASSWD_PATH=/auth/passwd
    restart: always
    privileged: true
    ports:
      - "5000:5000"
    networks:
      - default
    labels:
      - traefik.http.routers.registry-ui.rule=Host(`docker.registry.域名.com`)
      - traefik.http.routers.registry-ui.tls=true
      - traefik.http.routers.registry-ui.tls.certresolver=le
  registry-ui:
    image: konradkleine/docker-registry-frontend:v2
    container_name: docker-registry-ui
    restart: always
    privileged: true
    environment:
      - ENV_DOCKER_REGISTRY_HOST=registry
      - ENV_DOCKER_REGISTRY_PORT=5000
    ports:
      - "5080:80"
    networks:
      - default
    links:
      - registry:registry
networks:
  default:
    external:
      name: traefik_default
  • 推送到仓库
    • 登陆 docker login https://docker.registry.域名.com
    • 打包镜像docker build . --tag docker.registry.域名.com/组/镜像名:1.0.0
    • push docker push docker.registry.域名.com/组/镜像名:1.0.0

nacos

  • 位置/data/nacos/

  • 源码位置/data/nacos/git/nacos-docker-master

    • 仓库地址https://github.com/nacos-group/nacos-docker
  • 启动方式cluster-ip.yaml 集群

  • nacosmysql不对外开放 3306端口不开放 只供nacos使用

  • nacosmysql不对外开放 3306端口不开放 只供nacos使用

  • nacosmysql不对外开放 3306端口不开放 只供nacos使用

  • 通用

    • 账户nacos 密码密码
  • docker-compose.yml

version: "2"
services:
  nacos1:
    image: nacos/nacos-server:2.0.2
    container_name: nacos1
    networks:
      nacos_net:
        ipv4_address: 172.16.238.10
    volumes:
      - /data/nacos/cluster-logs/nacos1:/home/nacos/logs
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9555:9555"
    environment:
      - NACOS_SERVERS=172.16.238.10:8848 172.16.238.11:8848 172.16.238.12:8848
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=密码
    restart: on-failure
    depends_on:
      - mysql

  nacos2:
    image: nacos/nacos-server:2.0.2
    container_name: nacos2
    networks:
      nacos_net:
        ipv4_address: 172.16.238.11
    volumes:
      - /data/nacos/cluster-logs/nacos2:/home/nacos/logs
    ports:
      - "8849:8848"
      - "9849:9848"
    environment:
      - NACOS_SERVERS=172.16.238.10:8848 172.16.238.11:8848 172.16.238.12:8848
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=密码
    restart: always
    depends_on:
      - mysql
  nacos3:
    image: nacos/nacos-server:2.0.2
    container_name: nacos3
    networks:
      nacos_net:
        ipv4_address: 172.16.238.12
    volumes:
      - /data/nacos/cluster-logs/nacos3:/home/nacos/logs
    ports:
      - "8850:8848"
      - "9850:9848"
    environment:
      - NACOS_SERVERS=172.16.238.10:8848 172.16.238.11:8848 172.16.238.12:8848
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=密码
    restart: always
    depends_on:
      - mysql
  mysql:
    container_name: mysql
    image: nacos/nacos-mysql:5.7
    restart: always
    networks:
      nacos_net:
        ipv4_address: 172.16.238.13
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=nacos
      - MYSQL_USER=nacos
      - MYSQL_PASSWORD=密码
    volumes:
      - /data/nacos/mysql:/var/lib/mysql
    ports:
      - "3306:3306"
networks:
  nacos_net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.16.238.0/24
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容