• 使用Docker快速搭建基础服务


    Docker安装

    #Linux安装
    curl -fsSL get.docker.com -o get-docker.sh
    sudo sh get-docker.sh --mirror Aliyun
    #启动docker服务
    systemctl start docker
    #将docker添加到开机自启动
    sudo systemctl enable docker
    #查看是否成功安装
    docker info
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Mysql安装

    #拉取镜像
    docker pull mysql:5.6
    #运行mysql 主机3307映射容器3306 后台运行 将主机的/root/data目录与容器的/var/lib/mysql目录挂载
    docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 -d -v /root/data:/var/lib/mysql mysql:5.7
    
    • 1
    • 2
    • 3
    • 4

    Redis安装

    #拉取镜像
    docker pull redis:6.2.5
    #简单运行
    docker run --name redis -d redis:6.2.5
    #开启aof持久化
    docker run --name redis1 -d -p 6379:6379 -v /root/redisdata:/data redis:6.2.5 redis-server --appendonly yes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    RabbitMQ

    #拉取镜像
    docker pull rabbitmq:3.7.28-management
    #运行
    docker run --name rabbit1 -p 15672:15672 -p 5672:5672 -d rabbitmq:3.7.28-management
    
    • 1
    • 2
    • 3
    • 4

    RocketMQ

    #拉取镜像
    docker pull apache/rocketmq:4.8.0
    #创建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.8.0 sh mqnamesrv 
    #创建broker节点数据存储路径
    mkdir -p  /docker/rocketmq/data/broker/logs   /docker/rocketmq/data/broker/store /docker/rocketmq/conf
    #创建配置文件
    vi /docker/rocketmq/conf/broker.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    编辑broker.conf,并设置brokerIP1

    # 所属集群名称,如果节点较多可以配置多个
    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地址
    brokerIP1 = 【broker节点所在服务器的ip】
    # 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
    diskMaxUsedSpaceRatio=95
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    #构建broker容器
    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.8.0/conf/broker.conf -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" apache/rocketmq:4.8.0 sh mqbroker -c /opt/rocketmq-4.8.0/conf/broker.conf
    
    #拉取rockermq-console服务镜像
    docker pull pangliang/rocketmq-console-ng:latest
    
    #构建rockermq-console容器 注意:设置namesrv机器地址
    docker run -d --restart=always --name rmqadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=175.24.204.30:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 9999:8080 pangliang/rocketmq-console-ng
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    MinIO

    #拉取镜像
    docker pull minio/minio:RELEASE.2022-06-20T23-13-45Z.fips
    #创建本地数据卷
    mkdir -p /minio/config
    mkdir -p /minio/data
    
    #网络模式指定为bridge
     docker run -p 9000:9000 -p 9090:9090 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=minioadmin" -e "MINIO_SECRET_KEY=minioadmin" -v /home/minio/data:/data -v /home/minio/config:/root/.minio minio/minio:RELEASE.2022-06-20T23-13-45Z.fips server /data --console-address ":9090" -address ":9000"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Docker-Compose一键启动

    上述方法需要我们单独对每一个服务进行启动,当基础服务多的时候,非常不方便,所以可以采用Docker-Compose的方式一键启动,以下是相关步骤

    1.docker-compose手动安装

    在这个目录下载docker-compose-Linux-x86_64:
    https://github.com/docker/compose/releases/tag/1.25.5

    2.上传docker-compose-Linux-x86_64文件到Linux
    #上传本地的文件到Linux服务器,注意更换为自己的地址
    scp /Users/xxx/Downloads/docker-compose-Linux-x86_64 root@172.24.214.33:/usr/local/bin/docker-compose
    
    • 1
    • 2
    3.赋予该文件可执行权限
    sudo chmod +x /usr/local/bin/docker-compose
    
    • 1
    4.创建docker-compose文件
    #在root目录下创建
    cd ~/
    touch docker-compose.yml
    
    • 1
    • 2
    • 3
    5.编辑docker-compose.yml
    vim docker-compose.yml
    
    • 1
    version: "3.5"
    services:
    
      mysql_base:
        image: mysql:5.6
        ports:
          - "3307:3306"
        container_name: mysql_base
        restart: always #总是重启 相当于docker run --restart=always
        environment:
          - "MYSQL_ROOT_PASSWORD=root"
        volumes: #数据卷映射
          - /root/volumes/mysql_app/mysqldata:/var/lib/mysql #手动数据卷 不存在刻意自动创建
        networks:
          - hello
    
      redis_base:
        image: redis:6.2.5
        ports:
          - "6379:6379"
        container_name: redis_base
        restart: always
        volumes:
          - /root/volumes/redisdata:/data
        command: redis-server --appendonly yes
        networks:
          - hello
    
      rabbitmq_base:
        image: rabbitmq:3.7.28-management
        ports:
          - "5672:5672"
          - "15672:15672"
        container_name: rabbitmq_base
        restart: always
        networks:
          - hello
          
      minio_base:
        image: minio/minio:RELEASE.2022-06-20T23-13-45Z.fips
        ports:
          - "9000:9000"
          - "9090:9090"
        container_name: minio_base
        restart: always
        environment:
          - "MINIO_ACCESS_KEY=minioadmin"
          - "MINIO_SECRET_KEY=minioadmin"
        volumes:
          - /home/minio/data:/data
          - /home/minio/config:/root/.minio
        command: server /data --console-address ":9090" -address ":9000"
        networks:
          - hello
    
    
    volumes: #声明项目中使用的所有卷
      fff:
    networks:
      hello:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    6.启动docker-compose
    docker-compose up -d
    
    • 1
  • 相关阅读:
    HotSpot算法细节实现——安全点
    LeetCode 1704. 判断字符串的两半是否相似
    CSS宽度100%和宽度100vw之间有什么不同?
    springboot 集成 docsify 实现随身文档
    jxTMS设计思想之web界面
    pytorch环境配置
    Js写的二级联动和三级联动
    Snap投资者报告:业务重组短期投入减少,但长期看好AR发展
    JPA 分页
    JVM面试题(二)
  • 原文地址:https://blog.csdn.net/weixin_43660088/article/details/133309602