安裝docker
springboot項目
maven依賴
<?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>
<groupId>boottest</groupId>
<artifactId>com.ityang.boot</artifactId>
<version>1.0-SNAPSHOT</version>
<name>boottest</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
啓動和rest服務類
@SpringBootApplication
@RestController
public class StartApp {
public static void main(String[] args) {
SpringApplication.run(StartApp.class, args);
}
@RequestMapping("/")
public String index() {
return "hello spring boot";
}
}
啓動項目,瀏覽器訪問 localhost:8080
編寫Dockerfile
在項目 /src/main
目錄下新建目錄docker,在/src/main/docker
下新建文件 Dockerfile,內容爲:
# 基礎鏡像 這裏使用國內網易鏡像
FROM hub.c.163.com/dwyane/openjdk:8
#掛載宿主/tmp目錄到容器的/tmp目錄
VOLUME /tmp
# 拷貝文件(maven打包後的jar文件),並重命名爲 app.jar
ADD com.ityang.boot-1.0-SNAPSHOT.jar app.jar
# 啓動容器後執行一些命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
項目添加docker-maven-plugin插件
<!-- Docker maven plugin start -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<!--[a-z 0-9] 不然docker:build會報錯-->
<imageName>dockerspringboot</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>
<!-- Docker maven plugin end -->
需要注意的是,鏡像名稱必須爲 a-z(小寫)和0-9 的值,否則docker:build 報錯
構建鏡像文件
執行命令:
$ mvn clean package docker:build
或者分開執行:
$ mvn clean package
$ mvn docker:build
部分控制檯信息:
[INFO] --- docker-maven-plugin:0.4.13:build (default-cli) @ com.ityang.boot ---
[INFO] Copying /Users/yangzhenlong/projs/my/boot-test/target/com.ityang.boot-1.0-SNAPSHOT.jar -> /Users/yangzhenlong/projs/my/boot-test/target/docker/com.ityang.boot-1.0-SNAPSHOT.jar
[INFO] Copying /Users/yangzhenlong/projs/my/boot-test/src/main/docker/Dockerfile -> /Users/yangzhenlong/projs/my/boot-test/target/docker/Dockerfile
[INFO] Building image dockerspringboot
Step 1/4 : FROM hub.c.163.com/dwyane/openjdk:8
---> 96cddf5ae9f1
Step 2/4 : VOLUME /tmp
---> Running in 0dab3c046923
Removing intermediate container 0dab3c046923
---> 2e62fad6a16a
Step 3/4 : ADD com.ityang.boot-1.0-SNAPSHOT.jar app.jar
---> a966ed4c8748
Step 4/4 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
---> Running in 4ec1c4990022
Removing intermediate container 4ec1c4990022
---> 02b677ad12e1
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 02b677ad12e1
Successfully tagged dockerspringboot:latest
[INFO] Built dockerspringboot
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.475 s
[INFO] Finished at: 2018-11-17T01:24:57+08:00
[INFO] ------------------------------------------------------------------------
通過docker鏡像啓動容器
查看鏡像
$ docker images
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
---|---|---|---|---|
dockerspringboot | latest | 02b677ad12e1 | 8 seconds ago | 657MB |
啓動容器
$ docker run -p 8080:8080 -d dockerspringboot
cbc89f9e0cd584f1405d7177098423f5b576d668f7aee6ff7dfb5b4e34154862
解釋:
-p 8080:8080 #容器端口映射到宿主端口,格式爲:主機(宿主)端口:容器端口
-d #後臺運行容器,並返回容器ID
查看運行的容器
$ docker ps
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
---|---|---|---|---|---|---|
cbc89f9e0cd5 | dockerspringboot | "java -Djava.securit…" | 58 seconds ago | Up 58 seconds | 0.0.0.0:8001->8001/tcp | frosty_lichterman |
瀏覽器訪問 loalhost:8080