虛拟機centos7.X,docker1.3.X,Win10 Idea2018.1
預設Idea已經下載下傳了Docker插件
預設虛拟機docker已經裝了jdk
打開docker配置檔案,開放2375端口
在ExecStart=/usr/bin/dockerd-current 後面加上
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
重新加載配置檔案
systemctl daemon-reload
重新開機docker
systemctl start docker
檢視程序
netstat -tulp
PS:Centos7沒有netstat,是以要先下載下傳。
yum install net-tools
防火牆開放2375端口号
重新開機防火牆
Idea連接配接虛拟機docker
打開小扳手(setting)找到docker,輸入虛拟機ip
Springboot項目添加docker-maven-plugin插件.
<!--使用docker-maven-plugin插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--将插件綁定在某個phase執行-->
<executions>
<execution>
<id>build-image</id>
<!--将插件綁定在package這個phase上。也就是說,使用者隻需執行mvn package ,就會自動執行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定生成的鏡像名-->
<imageName>hsz1992/${project.artifactId}</imageName>
<!--指定标簽-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定 Dockerfile 路徑-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!--指定遠端 docker api位址-->
<dockerHost>http://192.168.159.130: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>
完整的pom:
<?xml version="1.0" encoding="UTF-8"?>
<project 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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.qwx</groupId>
<artifactId>docker</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
<docker.image.prefix>docker</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<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.0.0</version>
<!--将插件綁定在某個phase執行-->
<executions>
<execution>
<id>build-image</id>
<!--将插件綁定在package這個phase上。也就是說,使用者隻需執行mvn package ,就會自動執行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定生成的鏡像名-->
<imageName>hsz1992/${project.artifactId}</imageName>
<!--指定标簽-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定 Dockerfile 路徑-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!--指定遠端 docker api位址-->
<dockerHost>http://192.168.100.104: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>
</project>
建立docker檔案夾和Dockerfile檔案,docker要在src/main裡
Dockerfile:
FROM java:8
VOLUME /tmp
ADD docker-1.0-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
此處深坑:
ADD 後的jar包名必須和打包後的名字一樣,看到配置成功後的鏡像名以shaxxx開頭,請回頭
FROM:選擇的jdk
EXPOSE 是端口号和server.port=8082一緻
ADD:第一個jar是打包的項目名 第二個是别名
在idea的右邊找到Maven Projects,找到Lifecycle,輕按兩下package打包
build success 則說明打包成功,此時聚焦docker視圖,images會多出一個鏡像
建立容器,找到剛剛生成的鏡像,點選建立容器
Image ID 是打包生成的那個鏡像
Container name 容器名字随便取
Bind ports 8081是docker對外開放的端口,8080是項目端口
設定好後,啟動容器,啟動成功後去虛拟機檢視是否啟動成功
通路虛拟機ip+端口号
http://192.168.100.104:8081/test/docker
END