docker-compose 项目中的使用

81 阅读2分钟

image准备

  1. redis的image
  2. rabbitmq的image
  3. nacos的image
  4. mysql的image
  5. 应用程序jar包

载入镜像

docker load -i 名称.tar

docker-compose

docker-compose.yml

version: "3.9"

services: 
    app-mysql: 
        image: 镜像id
        restart: always
        container_name: app-mysql
        logging:
            options:
                max-size: "1g"
        environment:
            - MYSQL_ROOT_PASSWORD=密码
            - TZ=Asia/Shanghai
        healthcheck:
            test: mysql -P 13306 -u 用户 -p密码 -D mysql --silent --execute "select 1;"
            interval: 30s
            timeout: 5s
            retries: 5
        volumes:
            - /opt/mysql/config/:/etc/mysql/config/
            - /opt/mysql/data/:/etc/mysql/data/
            - /opt/mysql/log/:/etc/mysql/log
        ports:
            - "3306:3306"
        networks:
            app_host:   # 自定义网桥
                ipv4_address: 172.18.0.1
    app-rabbitmq:
        image: 镜像id
        restart: always
        container_name: app-rabbitmq
        logging:
            options:
                max-size: "1g"
        environment:
            TZ: Asia/Shanghai
            LANG: zh_CN.utf8
            RABBITMQ_DEFAULT_VHOST: vhost
            RABBITMQ_DEFAULT_USER: user
            RABBITMQ_DEFAULT_PASS: user
        ports:
            - "15672:15672"   # web端口
            - "5672:5672"     # 数据通信端口
        volumes:
            - "/opt/rabbitmq/data:/var/lib/rabbitmq"
            - "/opt/rabbitmq/config:/etc/rabbitmq"
        networks:
            app_host:   # 自定义网桥
                ipv4_address: 172.18.0.2
    app-nacos:
        image: 镜像id
        restart: always
        container_name: app-nacos
        logging:
            options:
                max-size: "1g"
        healthcheck:
            test: ["CMD-SHELL","curl -sS 'http://app-nacos:8848/nacos' || exit 1"]
            intrval: 30s
            timeout: 5s
            retries: 5
        environment:
            TZ=Asia/Shanghai
            LANG: zh_CN.utf8
            MODE: standalone
        ports:
            - "18848:8848"
            - "19848:9848"
            - "19849:9849"
        volumes:
            - /opt/nacos/conf:/home/nacos/config
            - /opt/nacos/data:/home/nacos/data
        depends_on:
            app-mysql:
                condition: service_healthy
        networks:
            app_host:
                ipv4_address: 172.18.0.3
    app-redis:
        image: 镜像id
        restart: always
        container_name: app-redis
        privileged: true   # 给容器root权限
        logging:
            options:
                max-size: "1g"
        ports:
            - "16379:6379"
        environment:
            TZ: Asia/Shanghai
        volumes:
            - "/opt/redis/redis.config:/urs/local/etc/redis/redis.config"
        depends_on:
            app-nacos:
                condition: service_healthy
        command: redis-server /usr/local/etc/redis/redis/config
        networks:
            app_host:
                ipv4_address: 172.18.0.4
    app-project:
        image: 镜像id
        restart: always
        container_name: app-project
        logging:
            options:
                max-size: "1g"
        ports:
            - "19999:19999"
            - "18880:18880"
            - "9300:9300/udp" # 如果你要开udp端口,需要这样操作
        environment:
                TZ: Asia/Shanghai
                LANG: zh_CN.utf8
        volumes:
            - /opt/project/:/opt/project/
        entrypoint: "/opt/project/entrypoint.sh"
        depends_on:
            app-nacos:
                condition: service_healthy
        networks:
            app_host:
                ipv4_address: 172.18.0.5
    networks:
        app_host:
            ipam:
                driver: default

entrypoint.sh

#!/bin/bash

while true
do
    ps -ef | grep app-project.jar | grep -v grep
    # $?=0表示上一条命令执行正确
    if [ $? != 0];then
        cd /home/project
        ./start.sh
    fi
    sleep 60
done

docker-compose 命令

# 查看所有docker-compose 的项目
docker-compose ls

# 启动docker-compose.yml
docker-compose -p 项目名称 -f yml的文件路径 up -d

start.sh

#/bin/bash

mkdir logs

echo "start project"
# 调用java命令
# agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18882 这句用于远程调试,生产环境,别用。
nohup /usr/local/java/jdk1.8.0_211/bin/java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18882 \
    -Duser.timezone=GTM+8 \
    -server \
    -Duser.language=zh \
    -Xmx1g -Xms1g \
    -Xloggc:gc.log \
    -verbose:gc \
    -XX:+PrintGCDetails \
    -XX:+PrintGCDateStamps \
    -XX:+PrintGCTimeStamps \
    -jar project.jar \
    --spring.config.location=config/ \
    > ./out.log &