docker+私有仓库实现微服务的简单部署
前段时间一直在使用docker,虽然中间出了不少问题,但还是记录下,从手动部署到自动化的过程.
刚接触docker的时候,最早使用的就是docker-compose.yml+registry的方式.
docker和docker-compose的安装过程不再描述.
1.在/usr/local/,下创建docker文件夹,在路径下创建父工程文件夹,在创建各位微服务的文件夹
2.在idea中将微服务打成jar包通过xftp将你刚才的jar,传入对应的文件夹里,创建Dockerfile,docker-compose.yml
3.编写Dockerfile
FROM openjdk:8-jre 要事先在docker里安装java jdk环境
MAINTAINER XQloveXH<[email protected]>
RUN mkdir /app
COPY recommend-eureka.jar /app/app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar", "--spring.profiles.active=prod"] 启动命令
EXPOSE 8761 这个是暴露的端口
4.编写docker-compose.yml
version: '3.1'
services:
recommend-eureka:
image: xxx.xx.49.175:5000/recommend-eureka 这里是你的服务器地址/你的镜像名字
container_name: recommend-eureka 容器名字
ports:
- 8761:8761 映射端口
5.启动微服务镜像
在对应微服务目录下,
docker build -t='image_name' .docker_file 执行dockerfile文件打成镜像
docker-compose up -d,执行docker-compose.yml文件
但首先你必须开启并启动docker的registry,这里不进行过多描述
等待执行完成
因为微服务需要高并发,高可用,这时候你需要多个服务器,所以这个服务器只是用作仓库使用,我们需要在其他服务器上拉取我们仓库里的微服务镜像.
6.连接其他服务器拉取
先查看下仓库里的镜像
curl http://xxx.xx.xx.xxx:5000/v2/_catalog
我这里之前多传了几个
docker pull recomend-eureka 这个来拉取你仓库里有的就行.
7.创建docker-compose.yml进行服务编排
按照之前的操作,在这台服务器创建/usr/local/docker/项目名
单独的docker镜像之间是无法通信的,也就是说服务之间是不能访问的,所以我们要通过服务编排来解决这个问题.服务编排,也解决了批量启动微服务的问题.
然后创建 docker-compose.yml
编写docker-compose.yml
version: '3.1'
services:
recommend-config:
image: XXX.XX.XXX.175:5000/recommend-config
container_name: recommend-config
ports:
- 8888:8888
recommend-eureka:
image: XXX.XX.XXX.175.175:5000/recommend-eureka
container_name: recommend-eureka
ports:
- 8761:8761
depends_on:
- recommend-config
links:
- recommend-config
restart: always
command: ["./wait-for-it.sh", "recommend-config:8888", "", ""]
# volumes:
# - ./wait-for-it.sh:/wait-for-it.sh
# entrypoint: "sh /wait-for.sh recomend-config:8888 -- java -jar /recommend-eureka.jar"
recommend-service-admin:
image: XXX.XX.XXX.175.175:5000/recommend-service-admin
container_name: recommend-service-admin
ports:
- 8501:8501
depends_on:
- recommend-config
- recommend-eureka
links:
- recommend-config
- recommend-eureka
restart: always
command: ["./wait-for-it.sh", "recommend-config:8888,recommend-eureka:8761", "", ""]
# volumes:
# - ./wait-for-it.sh:/wait-for-it.sh
# entrypoint: "sh /wait-for.sh recommend-config:8888,recommend-eureka:8761 -- java -jar /recommend-service-admin.jar"
注释的地方是因为之前想的是让微服务启动的先后等待的问题,但最后还是没有解决,需要写等待的脚本,网上有教程,可惜非运维人员的我无法理解..所以有些需要依赖的微服务会出现问题,这时候需要单独重新启动有问题的微服务.
但最终实现了简单的微服务docker手动人工部署.算了熟练了下docker的操作...
总结
1.每扩展了一个微服务后,需要手动传jar包到服务器,然后传到仓库,在通过仓库分发给各个服务器,在各个服务器上在docker-compose,编排进行批量部署.
2.可以通到shell脚本来控制微服务的启动顺序,但暂时还没有做到...
3.这种docker的部署方式对于大量的微服务来说,极度麻烦,运维太难了....
所以在下一篇中记录下,在idea中远程部署的自动化运维方式.