docker compose使用
前置
初始化文件夹,网络。
init_dir.sh
#!/bin/env bash
# 生成默认配置
HOME=$(pwd)
# docker network free
init_network(){
NETWORK_NAME="free"
CREATED=$(docker network ls -f name=${NETWORK_NAME} | wc -l)
if [ '2' -ne ${CREATED} ]
then
docker network create ${NETWORK_NAME}
echo created docker network ${NETWORK_NAME}
fi
}
# nginx
init_nginx(){
APP_NAME="nginx"
if [ -e ${APP_NAME} ];then return;fi
cd ${HOME}
mkdir ${APP_NAME} && cd ${APP_NAME}
if [ ! -e etc_nginx ];then mkdir etc_nginx;fi
# 创建软连接,方便静态资源管理
# ln -s target_dir link_name
docker run --name tmp-container-nginx -d nginx:stable-alpine
docker cp tmp-container-nginx:/etc/nginx/nginx.conf $(pwd)/etc_nginx/nginx.conf
docker cp tmp-container-nginx:/etc/nginx/conf.d $(pwd)/etc_nginx/conf.d/
docker rm -f tmp-container-nginx
}
# mysql
init_mysql(){
APP_NAME="mysql"
if [ -e ${APP_NAME} ];then return;fi
cd ${HOME}
mkdir ${APP_NAME} && cd ${APP_NAME}
if [ ! -e etc ];then mkdir etc;fi
if [ ! -e var_lib_mysql ];then mkdir var_lib_mysql;fi
docker run --rm --name tmp-container-mysql -d -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
docker cp tmp-container-mysql:/etc/my.cnf $(pwd)/etc/my.cnf
sed -i "s@/var/run/mysqld/mysqld.sock@/var/lib/mysql/mysql.sock@g" etc/my.cnf
docker rm -f tmp-container-mysql
}
# seata
init_seata(){
APP_NAME="seata"
if [ -e ${APP_NAME} ];then return;fi
cd ${HOME}
mkdir ${APP_NAME} && cd ${APP_NAME}
docker run --rm --name tmp-container-seata -d seataio/seata-server:1.7.0
docker cp tmp-container-seata:/seata-server/resources/application.yml .
docker rm -f tmp-container-seata
}
init_nginx
init_mysql
# 手动修改配置yml文件,把seata的registry配置为nacos
init_seata
init_network
启动脚本
常用容器 docker-compose.yml
version: "3"
services:
nginx:
container_name: nginx
image: nginx:stable-alpine-slim
ports:
- "443:443"
networks:
- free
volumes:
- ./nginx/etc_nginx/conf.d/:/etc/nginx/conf.d/
- ./nginx/etc_nginx/nginx.conf:/etc/nginx/nginx.conf:rw
# - ./nginx/js:/js
mem_limit: 32m
mysql:
container_name: mysql
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
TZ: Asia/Shanghai
networks:
- free
volumes:
- ./mysql/var_lib_mysql:/var/lib/mysql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
mem_limit: 1024m
redis:
container_name: redis
image: redis:7.0-alpine
ports:
- "6379:6379"
networks:
- free
volumes:
- ./redis/data:/data
command: --appendonly yes --requirepass "123456"
mem_limit: 128m
# postgres:
# container_name: postgres
# image: postgres:alpine
# ports:
# - '5432:5432'
# environment:
# - POSTGRES_PASSWORD=123456
# - TZ=Asia/Shanghai
# networks:
# - free
# volumes:
# - ./postgres/var_lib_postgresql_data:/var/lib/postgresql/data
# mem_limit: 1024m
mongo:
container_name: mongo
image: mongo:6.0
ports:
- "27017:27017"
networks:
- free
volumes:
- ./mongo/data:/data/db
- ./mongo/configdb:/data/configdb
mem_limit: 512m
command: --auth
nacos:
container_name: nacos
image: nacos/nacos-server:v2.2.1-slim
ports:
- "8848:8848"
- "9848:9848"
environment:
- MODE=standalone
- NACOS_AUTH_ENABLE=true
- NACOS_AUTH_IDENTITY_KEY=serverIdentity
- NACOS_AUTH_IDENTITY_VALUE=security
- NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
networks:
- free
volumes:
- ./nacos/home_nacos_data:/home/nacos/data
mem_limit: 1024m
seata:
container_name: seata
image: seataio/seata-server:1.7.0
ports:
- "7091:7091"
- "8091:8091"
networks:
- free
volumes:
- ./seata/application.yml:/seata-server/resources/application.yml
mem_limit: 1024m
depends_on:
- nacos
mqnamesrv:
container_name: mqnamesrv
image: apache/rocketmq:4.9.4
ports:
- "9876:9876"
environment:
- TZ=Asia/Shanghai
- JAVA_OPT_EXT=-server -Xms256m -Xmx256m -Xmn256m
networks:
- free
mem_limit: 256m
command: ./mqnamesrv
mqbroker:
container_name: mqbroker
image: apache/rocketmq:4.9.4
ports:
- "10909:10909"
- "10911:10911"
- "10912:10912"
environment:
- TZ=Asia/Shanghai
- JAVA_OPT_EXT=-server -Xms512m -Xmx512m -Xmn256m
networks:
- free
mem_limit: 512m
command: ./mqbroker -n mqnamesrv:9876
depends_on:
- mqnamesrv
mqng:
container_name: mqng
image: styletang/rocketmq-console-ng
ports:
- "9877:8080"
environment:
- TZ=Asia/Shanghai
- JAVA_OPTS=-Drocketmq.namesrv.addr=mqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false
networks:
- free
mem_limit: 1024m
depends_on:
- mqnamesrv
- mqbroker
networks:
free:
name: free
# 使用已有网络
external: true
# networks:
# free:
# name: tmp
其他
更新镜像
docker compose pull
启动
docker compose up -d
停止
docker compose stop
如果配置文件有更新,不能直接docker compose restart
需要先stop
再up
。
nacos经常有破坏性更新,需要更新配置文件才能正常启动,建议固定好版本号。
其他几个经常保持最新版,未发现问题。
如有错漏,欢迎指正!谢绝转载。