1:先创建一个maven项目(这边创建了eureka,服务发现者)
1.1这是我的pop.xml
jdk1.8
artifactId demo
name demo
docker.image.profix zhujm
构建的plugins的imagename就是zhujm/demole
xml version="1.0" encoding="UTF-8"?>xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.zzy.demo demo demo 1.0.0 org.springframework.boot spring-boot-starter-parent 1.4.0.RELEASE UTF-8 1.8 com.zzy.demo.Main UTF-8 zhujm 1.3.3.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test org.springframework.cloud spring-cloud-netflix-eureka-server 1.2.3.RELEASE org.springframework.cloud spring-cloud-dependencies Camden.SR3 pom import org.springframework.boot spring-boot-maven-plugin com.spotify docker-maven-plugin 0.4.3 ${docker.image.prefix}/${project.artifactId} src/main/docker / ${project.build.directory} ${project.build.finalName}.jar
Spotify 的 docker-maven-plugin 插件是用于构建 Maven 的 Docker Image
- imageName指定了镜像的名字,本例为${docker.image.prefix}/${project.artifactId}
- dockerDirectory指定 Dockerfile 的位置见下图
- resources是指那些需要和 Dockerfile 放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入。本例,只需一个 jar 文件。
1.2:这就是我的Main主程序
package com.zzy.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class Main { public static void main(String[] args) { SpringApplication.run(Main.class, args); } }
1.3:这是我的配置文件
server.port=8000 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/1.4这是我的目录结构
以上的资源参考http://blog.csdn.net/canot/article/details/52888597
2.1:Dockerfile 的内容如下
FROM frolvlad/alpine-oraclejdk8
VOLUME /tmp
ADD demo-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
这个参考下http://blog.csdn.net/wsscy2004/article/details/25878223可以知道其中的意思
其中from是指该项目基于什么,由于我们这边是jar所以基于jdk,frolvlad/alpine-oraclejdk8这个是jdk在docker-hub那边的镜像,不过这个镜像有问题
我们使用这个
frolvlad/alpine-oraclejdk8:slim
VOLUME 是挂在地点,持久化
add 是将文件重命名
enrtypoint不知道
VOLUME
指定了临时文件目录为/tmp
。其效果是在主机 /var/lib/docker
目录下创建了一个临时文件,并链接到容器的/tmp
。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp
目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp
作为工作目录ENTRYPOINT
执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 "/dev/urandom" 作为 Entropy Source2.2linux安装docker
在linux服务器上装好docker,我的linux版本为centos7,这里不建议使用#yum install docker方式安装,因为这种方式安装的版本比较旧,而且在配置远程api时要好多错误,建议使用方式
#curl -fsSL https://get.docker.com/ | sh或#yum install docker-engine,这里以17.0.3-ce版本为例,使用
#docker version命令即可验证是否安装成功,接下来要想在windows中操作远程linux中的docker,那前提是必须
开启docker远程API,修改docker配置文件#vi /usr/lib/systemd/system/docker.service ,进入编辑模式后,将ExecStart这一行后面加上 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock ,改完后如下所示
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock ,这里就写4个0,你可别改成自己的ip哦,保存后退出,重新加载配置文件#systemctl daemon-reload ,启动docker #systemctl start docker ,
输入#netstat -anp|grep 2375 显示docker正在监听2375端口,输入#curl 127.0.0.1:2375/info 显示一大堆信息,证明远程api就弄好了
2.3创建docker账户
https://hub.docker.com/去这里注册个账户
2.3构建 Docker Image
执行构建成为 docker image:
mvn package docker:build