使用服务器docker环境,本地则不在需要任何docker环境
docker安装
docker开启远程访问
docker阿里私有仓库,拉取,推送操作
idea中使用docker插件打包,发布,推送springboot应用
首先安装docker,并开启docker远程服务,idea安装docker插件,参考上面的博客
创建一个简单的springboot项目,在根目录中添加Dockerfile文件
dockerfile
# 基础镜像 必填 格式 <image> 或者<image>:<tag>
FROM openjdk:8-jdk-alpine
# 镜像作者 非必填
MAINTAINER "huangchao"
# 指定镜像标签 非必填
LABEL version="1.0"
LABEL description="这只是一个测试demo"
EXPOSE 8080
VOLUME /tmp
# 如果是部署应用,添加文件到容器中 相当于把本地/tarter/的jar包 复制到 容器中的根目录并指定名称为app.jar
ADD /target/docker-demo-0.0.1-SNAPSHOT.jar app.jar
# 容器启动时运行得启动命令
ENTRYPOINT ["java","-jar","/app.jar"]
pom.xml中引入com.spotify插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定docker文件目录-->
<dockerDirectory>${project.basedir}</dockerDirectory>
<!--指定生成的镜像名-->
<imageName>hc/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!--指定远程 docker api地址-->
<dockerHost>http://192.168.74.101:2375</dockerHost>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在的路径 此处配置的 即对应 target 目录-->
<directory>${project.build.directory}</directory>
<!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
因为这里做了一个命令挂载
所以直接执行mvn clean package
就行了,相当于执行 mvn clean package dockerfile:build
在项目跟目录执行:
结果如下:
这里还可以挂载其他命令,比如打包镜像完成后可以将镜像推送到私有仓库,这里我没有配置,就不演示了
打包完成后 看远程服务器里的docker是否有镜像
启动容器:
docker run --name docker-demo -p 8080:8080 -d hc/docker-demo
这里有一个问题就是直接执行mvn clean package
只是打包了镜像
并没有以该镜像启动容器,这样操作还是有一点麻烦,如果项目多了,还要一个一个去启动
用docker插件打包就直接启动容器了