需要环境:docker
安装详见gitbook(貌似需要翻墙)
或者 国内镜像
添加docker插件
项目/模块中的pom文件添加:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <configuration> <imageName>${project.name}:${project.version}</imageName> <imageTags> <imageTag>${project.version}</imageTag> </imageTags> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <skipDockerBuild>false</skipDockerBuild> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <includes> <include>${project.build.finalName}.jar</include> </includes> </resource> </resources> </configuration> <dependencies> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> </dependencies> </plugin>
|
编写Dockerfile
在项目src/main/docker
目录下
1 2 3 4 5 6 7 8 9 10 11 12 13
| FROM java:8
VOLUME /tmp
RUN mkdir /app
COPY api.jar /app/app.jar
WORKDIR /app
EXPOSE 8080
CMD ["java","-jar","/app/app.jar"]
|
制作镜像
使用docker-maven-plugin,默认将镜像打包到本地。如果想打包到远程仓库,需要配置环境变量DOCKER_HOST
为远程仓库地址。
执行下面命令
1
| mvn package docker:build -DskipTests
|
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| $ mvn package docker:build -DskipTests [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.wekri.goma:api:jar:0.0.1-SNAPSHOT [WARNING] 'build.plugins.plugin.version' for com.spotify:docker-maven-plugin is missing. @ line 58, column 12 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building api 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:3.0.1:resources (default-resources) @ api --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 7 resources [INFO] Copying 2 resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ api --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:3.0.1:testResources (default-testResources) @ api --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory D:\gitee\goma\api\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ api --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.21.0:test (default-test) @ api --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ api --- [INFO] Building jar: D:\gitee\goma\api\target\api.jar [INFO] [INFO] --- spring-boot-maven-plugin:2.0.1.RELEASE:repackage (default) @ api --- [INFO] [INFO] --- docker-maven-plugin:1.0.0:build (default-cli) @ api --- [INFO] Using authentication suppliers: [ConfigFileRegistryAuthSupplier] [INFO] Copying D:\gitee\goma\api\target\api.jar -> D:\gitee\goma\api\target\docker\api.jar [INFO] Copying D:\gitee\goma\api\src\main\docker\Dockerfile -> D:\gitee\goma\api\target\docker\Dockerfile [INFO] Building image api:0.0.1-SNAPSHOT Step 1/7 : FROM java:8 ---> d23bdf5b1b1b Step 2/7 : VOLUME /tmp ---> Using cache ---> a6e6b621afc9 Step 3/7 : RUN mkdir /app ---> Using cache ---> 8ce5420be1d7 Step 4/7 : ADD api.jar /app/app.jar ---> 204a9a963e07 Step 5/7 : WORKDIR /app ---> e09fa1c2ec37 Removing intermediate container 4bf981aadc1c Step 6/7 : EXPOSE 8082 ---> Running in 5b3a619b3bd9 ---> 48492337aadb Removing intermediate container 5b3a619b3bd9 Step 7/7 : CMD java -jar /app/app.jar ---> Running in e8079e109c84 ---> 289cec5d6e5a Removing intermediate container e8079e109c84 ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null} Successfully built 289cec5d6e5a Successfully tagged api:0.0.1-SNAPSHOT [INFO] Built api:0.0.1-SNAPSHOT [INFO] Tagging api:0.0.1-SNAPSHOT with 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 15.376 s [INFO] Finished at: 2018-05-15T12:56:59+08:00 [INFO] Final Memory: 46M/482M [INFO] ------------------------------------------------------------------------
|
运行镜像
看先一下镜像:
1
| docker run -d -p 8080:8082 api.jar:0.0.1-SNAPSHOT
|
容器编排
- docker compose
- mesos
- kubernetes