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中远程部署的自动化运维方式.