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.52: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 镜像名:标签 . 构建镜像



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值