image准备
- redis的image
- rabbitmq的image
- nacos的image
- mysql的image
- 应用程序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 &