Spring Cloud基于Docker进行打包部署1-环境配置和docker打包运行
1、使用linux虚拟机离线安装docker
(1)登录官网 https://docs.docker.com/installation/ 查看安装教程,里边有在线安装和离线安装。离线安装的话需要在指定网站下载deb安装包。本次使用 docker-ce_17.12.0_ce-0_ubuntu_amd64.deb安装包,下载地址为https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/。
(2)将安装包拷贝到本地linux虚拟机中,使用dpkg -i xxx.deb命令安装。这里有个问题,docker有一些依赖包,需要一并安装:
下载依赖deb。
网址:https://pkgs.org/
搜索:libltdl7
下载deb:libltdl7_2.4.6-0.1_amd64.deb
搜索:libgcrypt20
下载deb:libgcrypt20_1.6.5-2_amd64.deb
搜索:libsystemd-journal0
下载deb:libsystemd-journal0_215-17+deb8u7_amd64.deb
以上三个deb文件和docker安装包一起安装。将四个deb文件拷贝到一个目录中,执行dpkg -i *.deb命令
以上四个包我已经下载好了,大家可以直接用:
https://download.csdn.net/download/sinat_27143551/10431257
(3)敲命令docker -v 命令确认是否安装成功
2、开启远程访问/搭建java编译环境
如果开发环境是windows,为了在windows机器上能访问docker进行相关操作,这里需要在linux上开放一个端口并启用远程访问
(1)我们修改/etc/default/docker,然后重启docker服务即可。
# vim /etc/default/docker
DOCKER_OPTS="-H unix:///var/run/docker.sock -H 0.0.0.0:2375"
# service docker restart
现在本地和远程均可通过2375端口访问docker进程了。
(2)windows机器上配置环境变量DOCKER_HOST
以上操作不一定能成功,原因不明。
建议在linux环境下编译jar包,所以需要在linux下安装jdk、maven并配置环境变量和maven仓库。如果虚拟机不能连接大网,还需要借助Nginx做一个代理。
(1)安装JDK
(2)安装Maven
(3)配置maven仓库,如果虚拟机不能连接大网,则需要先安装Nginx,配置使用与虚拟机连通的能连大网的机器代理外部镜像源。
3、打开项目(eureka-server微服务)路径,在main文件夹下添加docker文件夹,添加dockerfile
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar
#RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8761
注意:ADD那一行的jar包名称和版本号要与pom中的artifactId和version一致,或者写成*.jar
如果需要设置容器的时区,在dockerfile中加上
ENV TZ=Asia/Shanghai #或者PST8PDT等,你需要的时区。
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
echo $TZ > /etc/timezone
4、修改pom加入编译插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- tag::plugin[] -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>mambo/${project.artifactId}</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- end::plugin[] -->
</plugins>
</build>
5、修改application.yml
server:
port: 8761
spring:
application:
name: microservice-discovery-eureka
eureka:
instance:
hostname: localhost
prefer-ip-address: true
# 表示将自己的Ip注册到eureka server,如不配置或为false,表示注册所在操作系统的hostname到eureka server
# prefer-ip-address: true
client:
# eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server
registerWithEureka: false
# 表示是否从eureka server 获取注册信息,默认为true,因为这是一个单点的eureka server,
#不需要同步其他eureka server节点的数据,故而设置为false
fetchRegistry: false
6、从dockerfile中可以看到,打包依赖
frolvlad/alpine-oraclejdk8:slim
这个镜像,所以,在打包之前我们需要先在liunx虚拟机中添加该镜像,如何添加呢,咱们的linux虚拟机连不上外网docker-hub,解决方法如下:
(1)找一个能连接到外网的linux虚拟机(比如说绿区虚拟机、阿里云的云主机等),安装docker,配置镜像加速器,加快访问docker-hub的速度:
echo "DOCKER_OPTS=\"--registry-mirror=https://yourlocation.mirror.aliyuncs.com\"" | sudo tee -a /etc/default/dockersudo service docker restart
(2)使用docker pull frolvlad/alpine-oraclejdk8:slim下载镜像
(3)使用docker save -o alpine-oraclejdk8_slim.tar frolvlad/alpine-oraclejdk8:slim将镜像打成tar包,传到离线linux虚拟机中
(4)使用docker load --input alpine-oraclejdk8_slim.tar载入镜像,输入docker images命令查看镜像是不是载入成功。
7、执行打包命令:
(1)cmd到微服务pom.xml所在目录
(2)输入命令:mvn clean
(3)输入命令: mvn package docker:build
此时在docker宿主机指定docker images命令可以发现镜像已经生成
8、将该镜像跑起来:
linux虚拟机中执行命令:
docker run --name microservice-discovery-eureka -d -p 8761:8761 -t mambo/microservice-discovery-eureka
同理,打包athena-gateway服务,启动时使用--link关联到eureka服务:
docker run --name athena-gateway --link microservice-discovery-eureka:8761 -d -p 8762:8762 -t mambo/athena-gateway
执行docker images和docker ps -a可以看到镜像已经装好而且容器已经运行。
9、访问下试试:
后记:
其实还有更方便的创建镜像的方法,就不用在windows下配置环境变量,也不用在linux中安装java和maven了:
1、在最外层的pom中加入编译插件,各个模块的pom使用上文中的编译插件。这样就可以在该pom路径下执行maven clean package一键打包各个微服务,各个模块的target目录下有生成的jar包文件:
<!--
指定maven插件编译版本
1:maven:since2.0, 默认用jdk1.3来编译,maven 3.x
貌似是默认用jdk 1.5。 2:windows默认使用GBK编码,java项目经常编码为utf8,
也需要在compiler插件中指出,否则中文乱码可能会出现编译错误。
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF8</encoding>
</configuration>
</plugin>
2、将jar包和Dockerfile拷贝到Linux下同一文件夹下,
3、执行docker build -t 镜像名:标签 . 构建镜像
更多推荐
所有评论(0)