docker:应用容器引擎,用户在客户端可以将应用和应用的执行环境、依赖包等打包成镜像,上传到镜像仓库,然后在服务器拉取镜像并执行。不同镜像之间的依赖互不影响,且镜像的执行效率很高。
可在:https://hub.docker.com/搜索,并拉取自己想要的镜像。
0.拉取jdk8镜像
这个待会用作基镜像。
docker pull openjdk:8-jdk-alpine
1.开启Docker服务的远程访问权限
由于我们是从客户端使用MAVEN插件将生成的镜像直接推送到镜像仓库上,然后要在远程Docker服务器上拉取镜像,所以要开启远程Docker服务的远程访问权限。
i>修改/etc/docker/daemon.json文件,添加Docker的远程访问端口及守护进程
{
"hosts":["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
}
ii>重新加载配置文件,并重启docker服务
systemctl daemon-reload
systemctl restart docker
iii>测试服务是否开启
curl 127.0.0.1:2375/info
2.在客户端创建镜像,并上传到镜像仓库
i>创建项目
目录结构如图:
ii>引入Docker打包插件的依赖
<build>
<plugins>
<!-- springboot打包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.9</version>
<configuration>
<!-- 镜像名称 -->
<imageName>lqdev.cn/demo</imageName>
<!-- docker远程服务器地址 -->
<dockerHost>http://服务器IP:2375</dockerHost>
<!-- Dockerfile文件存放目录 -->
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
iii>编写Dockerfile文件
#引入基镜像
FROM openjdk:8-jdk-alpine
#在容器创建一个挂载点(/opt/tmp),并在宿主机创建一个文件夹/var/lib/docker/volumes/volumnId,将该目录挂载到容器的挂载点上,若容器挂载点有数据,将被复制到宿主机对应目录上,该语句后面的语句都在临时镜像上操作,不会被保存到宿主机。
VOLUME /opt/tmp
#将应用jar包添加到镜像上
ADD chapter-14-0.0.1-SNAPSHOT.jar app.jar
#打开应用服务端口
EXPOSE 8080
iv>编译、上传、在远程Docker服务器拉取镜像
mvn clean package docker:build -Dmaven.test.skip=true
3.在远程服务器查看镜像
docker images
4.在远程服务器执行镜像
docker run -d -p 8080:8080 lqdev.cn/my-springboot-images
5.测试镜像是否执行成功
http:服务器地址:8080/