一、Docker简介
Docker时Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源。
Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。
Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。
1.可以运行jar包的环境
2.机器上已经安装了docker
- Dockerfile文件
二、远程发布
方法一:
- 编辑docker配置文件,配置开启端口
[root@localhost ~]# vi /usr/lib/systemd/system/docker.service
# 添加内容:
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
# 重载配置
[root@localhost ~]# systemctl daemon-reload
# 重启docker
[root@localhost ~]# service docker restart
- docker 拉取 java环境
[root@localhost ~]# docker pull java
[root@localhost ~]# docker pull java
Using default tag: latest
Trying to pull repository docker.io/library/java ...
latest: Pulling from docker.io/library/java
5040bd298390: Downloading 5.225 MB/51.36 MB
fce5728aad85: Downloading 7.056 MB/18.54 MB
76610ec20bf5: Downloading 8.989 MB/42.5 MB
- SpringBoot项目Docker插件配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- docker插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!--注意 修改成远程服务器地址
地址为Docker服务器地址,端口与上面设置一致-->
<dockerHost>http://192.168.43.129:2375</dockerHost>
<!--镜像名称必须全部小写-->
<imageName>springboot-docker-test</imageName>
<baseImage>java</baseImage>
<!--生成jar-->
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!--资源路径-->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
-
运行布署
- 镜像查看
[root@localhost ~]# docker images
- 启动镜像
# 运行所构建的镜像,在后台运行容器,并将容器的8080端口绑定到宿主机的8001端口上
[root@localhost ~]# docker run -d -p 8001:8080 springboot-docker-test
4783f0dbfd038c45efcbcbecadb86f5ef4c0b30ad8b04826c31c59a479128a64
测试访问:
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4783f0dbfd03 springboot-docker-test "java -jar /spring..." 2 minutes ago Up 2 minutes 0.0.0.0:8001->8080/tcp priceless_jepsen
方法二:
- pom文件配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- docker插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!--修改成远程服务器地址-->
<dockerHost>http://192.168.43.129:2375</dockerHost>
<!--镜像名称要全部小写-->
<imageName>springboot-dev</imageName>
<!-- 使用Dockerfile文件发布,指定其路径 src/main/docker-->
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<!--资源路径与名称-->
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
- 编写Dockerfile文件
在src/main目录中创建目录docker:
创建文件:Dockerfile内容如下。
FROM java
VOLUME /tmp
ADD springboot-docker-1.0.0.jar app.jar
RUN bash -c 'touch /app.jar' ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
VOLUME
指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录。
ADD
命令,将jar文件拷贝到镜像中。注意第一个jar文件的名称一定要写对,具本看下生成的jar。
RUN
命令默认使用/bin/sh Shell执行,默认为root权限。
ENTRYPOINT
执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/urandom” 作为 Entropy Source 。
-
运行布署
同方法一。
运行命令
[root@localhost ~]# docker run -d -p 8002:8080 springboot-dev
05cb676e5c66e81f65a7f2682697d51fad26e5e33855b0312c35cc7056060056
测试结果: