docker-compose搭建高可用多环境Apollo配置中心
docker-cmpose搭建高可用多环境Apollo配置中心
整体分五个部分


把mysql单独出来,作为常用公用MySQL数据库服务
搭建MySQL
创建mysql目录并初始化脚本
- 在/usr/local/目录下创建mysql目录
mkdir -p mysql && cd mysql
- 编写docker-compose.yml脚本
version: '3'
services:
mysql:
image: mysql:5.7.28
container_name: mysql
restart: always
ports:
- '3306:3306' # 这里需要暴露端口,用mysql客户端修改apollo一些配置
environment:
MYSQL_ROOT_PASSWORD: "123456"
deploy:
resources:
limits:
cpus: '30m'
memory: '256M'
networks:
- nfc-networks
volumes:
- ./data:/var/lib/mysql
- ./script:/docker-entrypoint-initdb.d/
healthcheck:
test: ["CMD","mysqladmin","-uroot","-p123456","ping","-h","localhost"]
timeout: 2s
interval: 10s
retries: 5
start_period: 5s
networks:
nfc-networks:
name: nfc-networks
driver: bridge
ipam:
driver: default
config:
- subnet: 10.24.0.0/16
gateway: 10.24.0.1
- 创建脚本目录
mkdir -p script && cd script
将apolloconfigdb.sql、apolloportaldb.sql拷贝至script,apolloconfigdb.sql复制成两份apolloconfigdbdev.sql和apolloconfigdbfat.sql,修改库名。
- 目录结构
![]()
启动和远程访问
- 启动
docker-compose up -d

- 访问
![]()
搭建eureka集群
- 创建eureka目录并初始化脚本
mkdir eureka && cd eureka
# 由于要搭建多环境,所以再加一层
mkdir eureka-dev && cd eureka-dev
- 编写docker-compose.yml脚本
eureka-dev中docker-compose.yml
version: '3'
services:
eureka-dev-1:
container_name: eureka-dev-1
image: lhstack/eureka
ports:
- 8761:8761
deploy:
resources:
limits:
cpus: '1'
memory: '256M'
logging:
options:
max-size: "1kb"
max-file: "1"
environment:
JAVA_OPTS: "-Xmx128m -Xms128m"
SECURITY_ENABLE: true
SECURITY_USERNAME: admin
SECURITY_PASSWORD: admin
EUREKA_SERVER_URLS: "http://admin:admin@eureka-dev-1:8761/eureka,http://admin:admin@eureka-dev-2:8761/eureka"
networks:
- apollo
eureka-dev-2:
container_name: eureka-dev-2
image: lhstack/eureka
ports:
- 18761:8761
deploy:
resources:
limits:
cpus: '1'
memory: '256M'
logging:
options:
max-size: "1kb"
max-file: "1"
environment:
JAVA_OPTS: "-Xmx128m -Xms128m"
SECURITY_ENABLE: true
SECURITY_USERNAME: admin
SECURITY_PASSWORD: admin
EUREKA_SERVER_URLS: "http://admin:admin@eureka-dev-1:8761/eureka,http://admin:admin@eureka-dev-2:8761/eureka"
networks:
- apollo
networks:
apollo:
name: nfc-networks
eureka-fat中docker-compose.yml
version: '3'
services:
eureka-fat-1:
container_name: eureka-fat-1
image: lhstack/eureka
ports:
- 28761:8761
deploy:
resources:
limits:
cpus: '1'
memory: '256M'
logging:
options:
max-size: "1kb"
max-file: "1"
environment:
JAVA_OPTS: "-Xmx128m -Xms128m"
SECURITY_ENABLE: true
SECURITY_USERNAME: admin
SECURITY_PASSWORD: admin
EUREKA_SERVER_URLS: "http://admin:admin@eureka-fat-1:8761/eureka,http://admin:admin@eureka-fat-2:8761/eureka"
networks:
- apollo
eureka-fat-2:
container_name: eureka-fat-2
image: lhstack/eureka
ports:
- 38761:8761
deploy:
resources:
limits:
cpus: '1'
memory: '256M'
logging:
options:
max-size: "1kb"
max-file: "1"
environment:
JAVA_OPTS: "-Xmx128m -Xms128m"
SECURITY_ENABLE: true
SECURITY_USERNAME: admin
SECURITY_PASSWORD: admin
EUREKA_SERVER_URLS: "http://admin:admin@eureka-fat-1:8761/eureka,http://admin:admin@eureka-fat-2:8761/eureka"
networks:
- apollo
networks:
apollo:
name: nfc-networks
- 目录结构
![]()
启动和远程访问
- 启动
docker-compose up -d

- 访问
![]()
![]()
搭建apollo-configservice集群
创建configservice目录并初始化脚本
- 创建目录
mkdir configservice && cd configservice
mkdir configservice-dev && cd configservice-dev
- 编写脚本
configservice-dev下docker-compose.yml
version: '3'
services:
configservice-dev-ha:
image: nginx:alpine
container_name: configservice-dev-ha
restart: always
ports:
- '8080:8080'
logging:
options:
max-file: '1'
max-size: '16k'
deploy:
resources:
limits:
memory: '16M'
cpus: '16k'
volumes:
- ./conf.d:/etc/nginx/conf.d
networks:
- apollo
depends_on:
configservice-dev-1:
condition: service_healthy
configservice-dev-2:
condition: service_healthy
configservice-dev-1:
image: lhstack/apollo:configservice-1.9.2
container_name: configservice-dev-1
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://192.168.100.100:3306/ApolloConfigDB_Dev?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" #192.168.100.100替换为自己宿主机IP
networks:
- apollo
healthcheck:
test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"]
timeout: 2s
interval: 10s
retries: 5
start_period: 15s
deploy:
resources:
limits:
memory: "384M"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
configservice-dev-2:
image: lhstack/apollo:configservice-1.9.2
container_name: configservice-dev-2
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://192.168.100.100:3306/ApolloConfigDB_Dev?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" #192.168.100.100替换为自己宿主机IP
networks:
- apollo
healthcheck:
test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"]
timeout: 2s
interval: 10s
retries: 5
start_period: 15s
deploy:
resources:
limits:
memory: "384M"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
networks:
apollo:
name: nfc-networks
configservice-fat下docker-compose.yml
version: '3'
services:
configservice-fat-ha:
image: nginx:alpine
container_name: configservice-fat-ha
restart: always
ports:
- '18080:8080'
logging:
options:
max-file: '1'
max-size: '16k'
deploy:
resources:
limits:
memory: '16M'
cpus: '16k'
volumes:
- ./conf.d:/etc/nginx/conf.d
networks:
- apollo
depends_on:
configservice-fat-1:
condition: service_healthy
configservice-fat-2:
condition: service_healthy
configservice-fat-1:
image: lhstack/apollo:configservice-1.9.2
container_name: configservice-fat-1
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://192.168.100.100:3306/ApolloConfigDB_Fat?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" #192.168.100.100替换为自己宿主机IP
networks:
- apollo
healthcheck:
test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"]
timeout: 2s
interval: 10s
retries: 5
start_period: 15s
deploy:
resources:
limits:
memory: "384M"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
configservice-fat-2:
image: lhstack/apollo:configservice-1.9.2
container_name: configservice-fat-2
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://192.168.100.100:3306/ApolloConfigDB_Fat?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" #192.168.100.100替换为自己宿主机IP
networks:
- apollo
healthcheck:
test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"]
timeout: 2s
interval: 10s
retries: 5
start_period: 15s
deploy:
resources:
limits:
memory: "384M"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
networks:
apollo:
name: nfc-networks
- 编写负载均衡
configservice-dev下conf.d/configservice.conf
upstream configservice{
server configservice-dev-1:8080;
server configservice-dev-2:8080;
}
server {
listen 8080;
listen [::]:8080;
server_name configservice.lhstack.com;
root /usr/share/nginx/html;
client_max_body_size 50m;
location / {
proxy_pass http://configservice;
}
}
configservice-fat下conf.d/configservice.conf
upstream configservice{
server configservice-fat-1:8080;
server configservice-fat-2:8080;
}
server {
listen 8080;
listen [::]:8080;
server_name configservice.lhstack.com;
root /usr/share/nginx/html;
client_max_body_size 50m;
location / {
proxy_pass http://configservice;
}
}
- 目录结构
![]()






浙公网安备 33010602011771号