问题引出
在apollo官方提供的docker-compose.yml文件中可以发现,启动的同时也会生成一个数据库容器,但我们可能已经拥有一个数据库了,想直接使用已经拥有的数据库作为apollo-config的数据源应该怎么操作呢?https://www.apolloconfig.com/#/zh/deployment/quick-start
准备
我们以apollo-quickstart的方式在容器内部执行,那么先需要下载quickstart源文件。下载apollo quickstart源文件
数据库配置
这里不做过多赘述,按照官方操作即可。apollo数据库配置官方流程
修改demo.sh文件
在官方的流程里是写死定好的,为了方便我们的使用,我们采用可配置的方式实现镜像打包。
找到demo.sh
中配置代码块,修改成如下:
# apollo config db info
apollo_config_db_url="jdbc:mysql://${APOLLO_MYSQL_HOST}:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_config_db_username=${APOLLO_MYSQL_USERNAME:-root}
apollo_config_db_password=${APOLLO_MYSQL_PASSWORD:-}
# apollo portal db info
apollo_portal_db_url="jdbc:mysql://${APOLLO_MYSQL_HOST}:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_portal_db_username=${APOLLO_MYSQL_USERNAME:-root}
apollo_portal_db_password=${APOLLO_MYSQL_PASSWORD:-}
变量解释:
- APOLLO_MYSQL_HOST: 因为我们使用容器部署,所以这里不能使用localhost去使用宿主机公网IP代替。
- APOLLO_MYSQL_USERNAME: apollo config,portal 数据库的用户名,在我这里都统一使用统一数据源,所以简化配置替换成了一个变量,如果有拆分数据源的需求可以再更改变量名。
- APOLLO_MYSQL_PASSWORD: apollo config,portal 数据库的密码
编写Dockerfile文件
FROM openjdk:8-jre-alpine
COPY apollo-all-in-one.jar /apollo-quick-start/apollo-all-in-one.jar
COPY client /apollo-quick-start/client
COPY demo.sh /apollo-quick-start/demo.sh
COPY portal/apollo-portal.conf /apollo-quick-start/portal/apollo-portal.conf
COPY service/apollo-service.conf /apollo-quick-start/service/apollo-service.conf
EXPOSE 8070 8080
RUN echo "http://mirrors.aliyun.com/alpine/v3.6/main" > /etc/apk/repositories \
&& echo "http://mirrors.aliyun.com/alpine/v3.6/community" >> /etc/apk/repositories \
&& apk update upgrade \
&& apk add --no-cache curl bash \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& sed -i'.bak' '/db_url/s/localhost/apollo-db/g' /apollo-quick-start/demo.sh \
&& sed -i "s/exit 0;/tail -f \/dev\/null/g" /apollo-quick-start/demo.sh
CMD ["/apollo-quick-start/demo.sh", "start"]
构建镜像
docker build -t birdyson/apollo-config:2.0.1 .
启动容器
version: "2"
services:
apollo-config:
image: birdyson/apollo-config:2.0.1 # 我已将镜像推送至docker仓库,大家可以省略上述步骤直接使用
container_name: apollo-config
environment:
- APOLLO_MYSQL_HOST=你的公网IP
- APOLLO_MYSQL_USERNAME=root
- APOLLO_MYSQL_PASSWORD=你的数据库密码
ports:
- "7080:8080" # 这里我为了防止占用常用端口,将端口映射在宿主机的7080端口之上
- "7090:8090"
- "7070:8070"