手动部署
根据已有的jar生成镜像 新建文件夹dockerfile,将项目的jar移入,接下来编写Dockerfile文件内容如下(简单实例):
FROM java:8
VOLUME /tmp
ADD my-blog.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
将Dockerfile文件和项目jar放在一起,然后执行(需要docker环境)
docker build -t="myblog:v1.0" /dockerfile
(/dockerfile 为dockerfile所在的路径)
插件部署(docker-maven-plugin)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
<!-- 详见:https://github.com/spotify/docker-maven-plugin Invalid repository name ... only [a-z0-9-_.] are allowed-->
<imageName>my-blog</imageName>
<imageTags>
<imageTag>v4</imageTag>
</imageTags>
<!-- 指定Dockerfile所在的路径 -->
<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>
</plugins>
<finalName>my-blog</finalName>
</build>
其中<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>Dockerfile的路径 Dockerfile文件的内容如下:
#第一行必须指令基于的基础镜像
FROM java:8
#指定维护者的基本信息
MAINTAINER [email protected]
VOLUME /tmp
ADD my-blog.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
以上准备完毕,在项目的跟目录执行(需要docker环境)
mvn clean package docker:build
插件部署(推送到阿里云镜像库)
在maven的settings.xml中添加
<server>
<!--maven的pom中可以根据这个id找到这个server节点的配置-->
<id>docker-aliyun</id>
<!--这里是在阿里云注册的账号-->
<username>[email protected]</username>
<!--这里是在阿里云注册的密码-->
<password>abcdef</password>
<configuration>
<!--这是在阿里云注册时填写的邮箱-->
<email>[email protected]</email>
</configuration>
</server>
在pom.xml中添加吐下代码
<properties>
<docker.repostory>registry.cn-beijing.aliyuncs.com</docker.repostory>
<docker.registry.name>wangjishan</docker.registry.name>
<docker.image.prefix>my-blog</docker.image.prefix>
<docker.image.version>0.1</docker.image.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<!--spring boot maven插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--docker maven插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--docker镜像相关的配置信息-->
<configuration>
<!--镜像名,这里用工程名-->
<imageName>${docker.repostory}/${docker.registry.name}/${docker.image.prefix}:${docker.image.version}</imageName>
<!--TAG,这里用工程版本号-->
<imageTags>
<imageTag>v1</imageTag>
</imageTags>
<!-- 指定Dockerfile所在的路径 -->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<serverId>docker-aliyun</serverId>
<registryUrl>${docker.repostory}</registryUrl>
<pushImage>true</pushImage>
</configuration>
</plugin>
</plugins>
<finalName>my-blog</finalName>
</build>
添加完后执行,开始构建 mvn -f pom_ali.xml clean package -DskipTests docker:build
镜像的运行
docker run -v /xxa:/xxb -d -p 22061:22061 imagename:tag
解释: (1) -v 挂载目录 /xxa 宿主机的目录 /xxb容器的目录(Dockerfile中的挂载点) (2) imagename 镜像名称 tag镜像tag
用 Docker 构建、运行、发布一个 Spring Boot 应用