• docker-compose安装和使用(自启、redis、mysql、rabbitmq、activemq、es、nginx、java应用)


    1.在线安装docker-compose:

    参考官网:https://docs.docker.com/compose/install/other/

    docker-compose安装及简单入门

    [Docker] docker-compose使用教程

    Docker系列教程22-docker-compose.yml常用命令

    # 安装(加速下载https://ghproxy.com/)
    sudo curl -L https://ghproxy.com/https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
    
    # 赋权
    sudo chmod +x /usr/local/bin/docker-compose
    
    # 查看版本
    docker-compose -v
    
    # 可以获取帮助
    docker-compose -h
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2、离线安装docker-compose:

    参考:Docker - 离线安装 docker-compose(以CentOS系统为例)

    (1)首先访问 docker-composeGitHub 版本发布页面:
    • https://github.com/docker/compose/releases
    (2)下载docker-compose-Linux-x86_64

    由于服务器是 CentOS 系统,则下载 Linux 版本的 Compose

    Assets内下载:docker-compose-Linux-x86_64

    (3)将其移动到 /usr/local/bin,并改名为“docker-compose

    将下载下来的“docker-compose-Linux-x86_64”文件上传到服务器上,然后执行如下命令将其移动到 /usr/local/bin,并改名为“docker-compose”。

    sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
    
    • 1
    (4)添加可执行权限:
    sudo chmod +x /usr/local/bin/docker-compose
    
    • 1
    (5)测试是否安装成功

    最后使用 docker-compose -v 命令测试是否安装成功(如果提示“没有那个文件或目录”可以重启下服务器再试试):

    docker-compose -v
    
    • 1

    3、卸载

    直接删除下载的二进制文件即可,linux命令
    sudo rm /usr/local/bin/docker-compose

    4、使用命令:

    注意:

    1、要在docker-compos.yml文件所在的目录执行该命令才可关闭对应的容器

    会停止并删除容器,docker网络等

    2、compose文件启动是有顺序的,通过depends_on来指定该服务所依赖的服务,以提前依赖服务的启动顺序,但不是容器内部程序启动成功才去启动下一个容器,容器内部程序启动有耗时,如果你的程序之间互相有依赖,尽量分开写docker-compose文件,避免容器启动失败。

    # 第一次部署jar的命令
    docker-compose up -d zaxq-rabbitmq
    # 以后更新jar后,直接重启即可
    docker-compose restart zaxq-rabbitmq
    # 查看日志
    docker-compose logs zaxq-rabbitmq --tail 1000
    
    # 关闭一组服务
    docker-compose down
    # 创建并启动一组容器(1、若某个容器的配置文件改动了,执行该命令会创建新的容器并启动,2、如果配置文件没有改动,只是某个容器关掉了,则会启动关闭的容器,3、否则对启动的容器没有影响)
    docker-compose up -d
    
    # 停止容器在创建
    docker-compose stop zaxq-rabbitmq
    # 删除容器在创建
    docker-compose rm zaxq-rabbitmq
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    5、实战:

    docker-compose.yml配置

    vi docker-compose.yml

    version: "3"
    services:
        zaxq-eureka:
            image: java:8
            container_name: zaxq-eureka
            ports:
                - 9527:9527
            volumes:
                - /run/media/root/D/zaxq/java/log/eureka/:/logs/zaxq/eureka/       
                - /run/media/root/D/zaxq/java/jar/:/usr/jar/      
            working_dir: /usr/jar/
            command: bash -c 'java -jar -Duser.timezone=GMT+8 zaxq-eureka.jar --spring.profiles.active=test'
            environment:
                - SET_CONTAINER_TIMEZONE=true
                - CONTAINER_TIMEZONE=Asia/Shanghai
                
        zaxq-gateway:
            image: java:8
            container_name: zaxq-gateway
            ports:
                - 8082:8082
            volumes:
                - /run/media/root/D/zaxq/java/log/gateway/:/logs/zaxq/gateway/
                - /run/media/root/D/zaxq/java/tmp/gateway/:/data/zaxq/tmp/gateway/  
                - /run/media/root/D/zaxq/java/jar/:/usr/jar/      
            working_dir: /usr/jar/
            command: bash -c 'java -jar -Duser.timezone=GMT+8 zaxq-gateway.jar --spring.profiles.active=test'  
            environment:
                - SET_CONTAINER_TIMEZONE=true
                - CONTAINER_TIMEZONE=Asia/Shanghai        
            depends_on:
                - zaxq-eureka
        
        zaxq-auth:
            image: java:8    
            container_name: zaxq-auth
            ports:
                - 8089:8089
            volumes:
                - /run/media/root/D/zaxq/java/log/auth/:/run/media/root/D/zaxq/java/log/auth/
                - /run/media/root/D/zaxq/java/resources/auth/:/run/media/root/D/zaxq/java/resources/auth/
                - /run/media/root/D/zaxq/java/tmp/:/java-project/zaxq/tmp/
                - /run/media/root/D/zaxq/java/jar/:/usr/jar/      
            working_dir: /usr/jar/
            command: bash -c 'java -jar -Duser.timezone=GMT+8 zaxq-auth.jar --spring.profiles.active=test'   
            environment:
                - SET_CONTAINER_TIMEZONE=true
                - CONTAINER_TIMEZONE=Asia/Shanghai        
            depends_on:
                - zaxq-eureka
                - zaxq-gateway
    
        zaxq-rabbitmq:
            image: java:8
            container_name: zaxq-rabbitmq
            ports:
                - 1032:1032
            volumes:
                - /run/media/root/D/zaxq/java/log/rabbitmq/:/run/media/root/D/zaxq/java/log/rabbitmq/
                - /run/media/root/D/zaxq/java/resources/rabbitmq/:/run/media/root/D/zaxq/java/resources/rabbitmq/
                - /run/media/root/D/zaxq/java/jar/:/usr/jar/      
            working_dir: /usr/jar/
            command: bash -c 'java -jar -Duser.timezone=GMT+8 zaxq-rabbitmq.jar --spring.profiles.active=comm,test'   
            environment:
                - SET_CONTAINER_TIMEZONE=true
                - CONTAINER_TIMEZONE=Asia/Shanghai        
            depends_on:
              - zaxq-eureka
              - zaxq-gateway            
              - zaxq-basedata
    
    • 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
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    6、制作成开机自启的服务

    # 第一次部署jar的命令
    docker-compose up -d zaxq-rabbitmq
    # 以后更新jar后,直接重启即可
    docker-compose restart zaxq-rabbitmq
    # 查看日志
    docker-compose logs zaxq-rabbitmq --tail 1000
    
    # 关闭一组服务
    docker-compose down
    # 创建并启动所有容器(1、若某个容器的配置文件改动了,执行该命令会创建新的容器并启动,2、如果配置文件没有改动,只是某个容器关掉了,则会启动关闭的容器,3、否则对启动的容器没有影响)
    docker-compose up -d
    
    # 停止容器在创建
    docker-compose stop zaxq-rabbitmq
    # 删除容器在创建
    docker-compose rm zaxq-rabbitmq
    
    ------------------------------------------------------------------------------
    #制作成开机自启的服务 原文链接:https://blog.csdn.net/catoop/article/details/110000462
    
    vi /usr/lib/systemd/system/pet-docker-compose.service
    [Unit]
    Description=zaxq-docker-compose.service
    After=docker.service systemd-networkd.service systemd-resolved.service
    Requires=docker.service
    
    
    [Service]
    Type=simple
    Restart=on-failure
    RestartSec=5
    # WorkingDirectory=/path/to/docker/compose/project
    ExecStart=/usr/local/bin/docker-compose -f /run/media/root/D/zaxq/java/jar/docker-compose.yml up
    ExecStop=/usr/local/bin/docker-compose -f /run/media/root/D/zaxq/java/jar/docker-compose.yml down
    
    [Install]
    WantedBy=multi-user.target
    
    # 授权
    chmod +x /usr/lib/systemd/system/pet-docker-compose.service
    # 设置开机自启
    sudo systemctl enable pet-docker-compose.service
    # 启动
    sudo systemctl start zaxq-docker-compose.service
    
    • 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

    7、其他扩展部署redis、mysql、rabbitmq、activemq、es、nginx、java应用

    docker-compose(redis、mysql、rabbitmq、activemq、es、nginx、java应用)

    version: "3"
    services:
        redis:
            image: redis:6.2.6-alpine # 指定服务镜像,最好是与之前下载的redis配置文件保持一致
            container_name: redis # 容器名称
            #restart: on-failure # 重启方式
            restart: always
            environment:
              - TZ=Asia/Shanghai # 设置时区
            volumes: # 配置数据卷
                - /home/yyt/data/redis/data:/data
                - /home/yyt/data/redis/redis.conf:/etc/redis/redis.conf          
            ports: # 映射端口
              - 6379:6379
            sysctls: # 设置容器中的内核参数
              - net.core.somaxconn=1024
              #- vm.overcommit_memory=1
            #command: /bin/sh -c "cat /etc/sysctl.conf && echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf && redis-server /etc/redis/redis.conf --appendonly yes" # 指定配置文件并开启持久化
            command:
                - sh
                - -c
                - |
                    sysctl vm.overcommit_memory=1
                    redis-server /etc/redis/redis.conf --appendonly yes
            privileged: true
     
    
        mysql:
            #image: mysql:8.0
            image: mysql
            container_name: mysql
            restart: always
            ports:
                - 3307:3306
            volumes:
                - /home/yyt/data/mysql/config:/etc/my.cnf
                - /home/yyt/data/mysql/data:/var/lib/mysql/         
            environment:
                - MYSQL_ROOT_PASSWORD=ne7v51grgfs4rpe
                - TZ=Asia/Shanghai # 设置时区
    
        rabbitmq:
            image: rabbitmq
            # 固定主机名(防止持久化数据用户数据丢失问题)
            hostname: myrabbitmq
            container_name: rabbitmq
            privileged: true
            ports:
                - 5672:5672
                - 15672:15672
            volumes:
                - /home/yyt/zaxq/rabbitmq/conf/rabbitmq:/etc/rabbitmq
                - /home/yyt/zaxq/rabbitmq/data:/var/lib/rabbitmq
                - /home/yyt/zaxq/rabbitmq/log:/log/lib/rabbitmq
            environment:
                - RABBITMQ_DEFAULT_VHOST=/
                - RABBITMQ_DEFAULT_USER=admin
                - RABBITMQ_DEFAULT_PASS=zaxq@yyt
                - TZ=Asia/Shanghai
            # 这下面的命令全部到容器内部执行。 如果管理界面缺少overview等菜单 可能是浏览器的问题,推荐使用google浏览器  
            #command:
            #    - sh
            #    - -c
            #    - |
            #        chgrp rabbitmq /etc/rabbitmq ; chmod g+s /etc/rabbitmq
            #        rabbitmq-plugins enable rabbitmq_management
            #         rabbitmqctl add_user zaxq zaxq
            #         rabbitmqctl set_user_tags zaxq administrator
            #         rabbitmqctl add_vhost /zaxq
            #         rabbitmqctl set_permissions -p /zaxq zaxq ".*" ".*" ".*"
            
        activemq:
            image: webcenter/activemq:5.14.3
            container_name: activemq
            restart: always
            ports:
                - 8161:8161
                - 61616:61616
            volumes:
                - /home/yyt/data/activemq/data:/data/activemq
                - /home/yyt/data/activemq/log:/var/log/activemq         
            environment:
                - ACTIVEMQ_NAME=activemq
                - ACTIVEMQ_ADMIN_LOGIN=admin
                - ACTIVEMQ_ADMIN_PASSWORD=yyt@activemq
    
        es:
            image: elasticsearch:7.17.10
            container_name: es
            restart: always
            environment:
                - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
                - "TZ=Asia/Shanghai"
                - "discovery.type=single-node"
                #- cluster.initial_master_nodes=es01
                - "ELASTIC_PASSWORD=fkuy29wjzb18n3e"
                - cluster.name=docker-cluster
                - node.name=es01
                - network.host=0.0.0.0
                #配置允许跨域访问
                - http.cors.enabled=true
                - http.cors.allow-origin=*
                - http.cors.allow-headers=Authorization,X-Requested-With,Content-Length,Content-Type
                # 开启安全校验 并 配置密码执行: elasticsearch-setup-passwords interactive
                - xpack.security.enabled=true
                - xpack.security.transport.ssl.enabled=true
            ulimits:
                memlock:
                    soft: -1
                    hard: -1
                nofile:
                    soft: 65536
                    hard: 65536
            ports:
                - "9200:9200"
            logging:
                driver: "json-file"
                options:
                    max-size: "50m"
                    max-file: "3"
            volumes:
                #- /home/yyt/data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
                - /home/yyt/data/elasticsearch/plugins:/usr/share/elasticsearch/plugins
                - /home/yyt/data/elasticsearch/data:/usr/share/elasticsearch/data
                - /home/yyt/data/elasticsearch/log:/usr/share/elasticsearch/log
                #- /home/yyt/data/elasticsearch/config/:/usr/share/elasticsearch/config/elastic-stack-ca.p12 
                #- /home/yyt/data/elasticsearch/config/:/usr/share/elasticsearch/config/elastic-certificates.p12
    
    
        zaxq-eureka:
            #image: openjdk:17.0.2-slim-buster
            # 使用自己制作的
            #image: jdk17
            #image: registry.cn-shenzhen.aliyuncs.com/xielin/java8:1.0
            image: mdsol/java8-jre
            container_name: zaxq-eureka
            ports:
                - 9527:9527
            volumes:
                - /home/yyt/zaxq/java/log/eureka/:/logs/zaxq/eureka/       
                - /home/yyt/zaxq/java/jar/:/usr/jar/    
            working_dir: /usr/jar/
            #command: bash -c 'java -jar   -Duser.timezone=GMT+8 zaxq-eureka.jar --spring.profiles.active=test'
            #command: bash -c "wait-for.sh 10.60.0.56:5672 -t 0 && java -jar   -Duser.timezone=GMT+8 zaxq-eureka.jar --spring.profiles.active=test"
            # /usr/local/bin/wait-for.sh 可以省略路径(-t 0 不设置超时时间),10.60.0.56:5672不能以rabbitmq容器名来代替ip,只有容器的服务名才行(容器名不行),即:有服务名则一定要使用服务名加端口,否则使用宿主机ip加端口。
            command:
                - sh
                - -c
                - |
                    #wait-for.sh 172.31.4.137:5672 -t 0
                    #wait-for.sh 172.31.4.137:6379 -t 0
                    #wait-for.sh 172.31.4.137:3306 -t 0
                    java -jar   -Duser.timezone=GMT+8 zaxq-eureka.jar --spring.profiles.active=test-gc
                    
        web-api:
            image: openjdk:8
            container_name: ygt-tourism-web-api
            restart: always
            ports:
                - 10082:10082
            volumes:
                - /home/yyt/ygt_tourism/java/log/web-api/:/home/yyt/ygt_tourism/java/log/web-api/
                - /home/yyt/ygt_tourism/java/resources/public/:/home/yyt/ygt_tourism/java/resources/public/
                - /home/yyt/ygt_tourism/java/tmp/web-api/:/home/yyt/ygt_tourism/java/tmp/web-api/
                - /home/yyt/ygt_tourism/java/jar/:/usr/jar/
            working_dir: /usr/jar/
            command: bash -c 'java -jar -Duser.timezone=GMT+8 web-api.jar --spring.profiles.active=prod-yyt'
            environment:
                - SET_CONTAINER_TIMEZONE=true
                - CONTAINER_TIMEZONE=Asia/Shanghai
            networks:
                - ygt_tourism
                
    networks:
        ygt_tourism:         
                
    
    • 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
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176

    附件

    mysql的config配置

    touch config

    # For advice on how to change settings please see
    # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
    
    [mysqld]
    #
    # Remove leading # and set to the amount of RAM for the most important data
    # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
    # innodb_buffer_pool_size = 128M
    #
    # Remove leading # to turn on a very important data integrity option: logging
    # changes to the binary log between backups.
    # log_bin
    #
    # Remove leading # to set options mainly useful for reporting servers.
    # The server defaults are faster for transactions and fast SELECTs.
    # Adjust sizes as needed, experiment to find the optimal values.
    # join_buffer_size = 128M
    # sort_buffer_size = 2M
    # read_rnd_buffer_size = 2M
    
    # Remove leading # to revert to previous value for default_authentication_plugin,
    # this will increase compatibility with older clients. For background, see:
    # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
    # default-authentication-plugin=mysql_native_password
    skip-host-cache
    skip-name-resolve
    datadir=/var/lib/mysql
    socket=/var/run/mysqld/mysqld.sock
    secure-file-priv=/var/lib/mysql-files
    user=mysql
    
    pid-file=/var/run/mysqld/mysqld.pid
    
    character-set-server=utf8
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    max_connections=1000
    
    [client]
    socket=/var/run/mysqld/mysqld.sock
    
    !includedir /etc/mysql/conf.d/
    
    • 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
    rabbitmq的config配置

    touch rabbitmq.conf

    loopback_users.guest = false
    listeners.tcp.default = 5672
    default_pass = zaxq@yyt
    default_user = admin
    default_vhost = /
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    HCIP---IS-IS协议
    电脑重装系统后usbcleaner怎么格式化u盘
    【2025届华为秋招机考三道编程题之一】华为校招留学生软件开发工程师-真题机考笔试/(200分)- 跳格子3(Java & JS & Python & C)
    Using LDAP to authenticate users
    4.linux的RPM和YUM
    谷粒商城-基础篇-Day01
    C#/VB.NET 替换 PDF 文件上的现有图像
    Idea创建SpringBoot多模块项目
    金仓数据库 KingbaseGIS 使用手册(8.5. 栅格波段存取函数、8.6. Raster Pixel Accessors and Setters)
    shell脚本入门——函数
  • 原文地址:https://blog.csdn.net/weixin_45168162/article/details/133822586