上一篇博文,讲了Docker的一些基础知识,还介绍了Docker的安装和基本命令。这篇文章,就讲如何创建自己的镜像仓库,还有如何将SpringBoot应用打包成Docker镜像,发布到镜像仓库中。本篇搭建私有仓库使用的是阿里云。当然,腾讯云和百度云也可以完成此功能,这里不做概述。
创建镜像仓库
首先,需要去阿里云的"管理控制台"找到容器镜像服务,然后就可以看到如下界面
红色框框圈起来的就是博主创建的镜像仓库。如果刚开始使用的话,这里是一片空白的。点击旁边的创建镜像仓库,即可创建。
将信息填写完成即可。在填写的时候,会遇到选择命名空间,在旁边的菜单可以看到命名空间,点击创建。
创建完成后,可以看到管理和删除按钮,点击管理,即可看到相应的操作指南。
构建镜像
这里以SpringBoot项目为例,至于如何创建简单的SpringBoot应用,本文就不做描述了。可以参考博主的其他博文。
创建SpringBoot应用
这里就以返回简单的字符串为例。
修改Maven配置
在pom.xml中的properties标签内增加如下配置
<docker.image.prefix>qfcwx</docker.image.prefix>
中间的内容,根据自己的情况修改即可。
然后,新增Docker对于Maven的插件。
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.10</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
这个插件用于将SpringBoot应用打包成镜像。
repository这个标签指打包后的镜像名称。
buildArgs打包时,取${}中的值。就是获取target目录下,xxx.jar文件。
创建Dockerfile
Dockerfile:由一系列命令和参数构成的脚本,这些命令应用于基础镜像,最终创建一个新的镜像。
在项目的根目录创建名为Dockerfile的文件。写上如下命令:
# 需要一个基础镜像
FROM openjdk:8-jdk-alpine
# 配置一个具有持久化功能的目录
VOLUME /tmp
# 编译镜像时加入的参数
ARG JAR_FILE
# 将本地文件复制到容器
COPY ${JAR_FILE} demo.jar
# 容器启动时执行的命令
ENTRYPOINT ["java","-jar","/demo.jar"]
①、FROM::需要一个基础镜像,可以是公共的或者私有的,后续构建会基于此镜像,如果同一个Dockerfile中建立多个镜像时,可以使用多个FORM指令。
②、VOLUME:配置一个具有持久化功能的目录,主机 /var/lib/docker 目录下创建一个临时文件,并链接到容器的/tmp。
注意:这个步骤是根据情况选择的。如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到Docker数据文件夹,因为SpringBoot使用的内嵌Tomcat容器默认使用/tmp作为工作目录。
③、ARG:设置编译镜像时加入的参数。
④、COPY:只支持将本地文件复制到容器。
⑤、ENV:设置容器的环境变量
⑥、ENTRYPOINT:容器启动时执行的命令。
⑦、EXPOSE 8080:暴露镜像端口。
Dockerfile的构建命令也是很多的,具体的使用方法,还需要根据资料或者Docker官网提供的文档。下面给大家推荐一篇详细讲解Dockerfile的博文。
打包构建
Dockerfile文件完成后,就需要使用Maven进行构建了,因为博主的Windows系统上没有安装Docker环境。所以,博主将项目拷贝到了虚拟机中的Linux系统上,然后再进行构建。
mvn install dockerfile:build # 构建命令
等待些许时间,就能构建完成了。
然后查看镜像。
可以看到SpringBoot应用已经构建成了Docker镜像。下面就可以启动一下,看看效果啦。
docker run --name demo -d -p 8080:8082 qfcwx/docker-demo # 启动容器
docker ps # 查看容器
curl 'http://127.0.0.1:8080/api/docker' # 获取页面内容
依次使用上面的命令,可以看到成功的返回了SpringBoot应用中的内容,证明打包镜像成功了。
上传至私有仓库
本地已经构建成功,下面就将镜像上传至我们的私有镜像仓库。
本地推送
一、登录阿里云Docker Registry
sudo docker login --username=xxxx registry.cn-beijing.aliyuncs.com
二、打一个tag
sudo docker tag [ImageId] registry.cn-beijing.aliyuncs.com/qfcwx/qfcwx_registry:[镜像版本号]
三、推送
sudo docker push registry.cn-beijing.aliyuncs.com/qfcwx/qfcwx_registry:[镜像版本号]
输入上面命令,可以看到推送状态。
推送完成,就可以在阿里云控制台中的镜像仓库中看到刚刚推送的镜像了。
拉取镜像
本地推送完成,就可以登录自己的私有镜像仓库,使用别的服务器拉取私有仓库中的镜像了。博主这里使用阿里云ECS服务器进行拉取。
一、登录阿里云Docker Registry
sudo docker login --username=xxxx registry.cn-beijing.aliyuncs.com
第一步还是登录阿里云私有镜像仓库
二、拉取镜像
sudo docker pull registry.cn-beijing.aliyuncs.com/qfcwx/qfcwx_registry:[镜像版本号]
使用上面命令即可拉取镜像。
三、启动容器
使用同样的命令启动。
查看是否启动成功,可以通过查看Docker的日志。
docker logs -f 容器id
四、本地访问
基本上,所有操作都结束了,最后就是通过浏览器查看结果了。
通过浏览器得到了同样的结果,证明我们的所有操作都是成功的。
镜像加速
如果觉得获取Docker官方镜像的速度慢的话,可以使用阿里云提供的加速器。上面有很详细的操作文档,读者可以根据阿里云提供的地址自行配置。
本篇博文就接近尾声了,进行了这么多操作,最后成功使用Docker打包自己的应用,并推送到私有镜像仓库中去。虽然过程繁杂,但是做完后,也是小有成就了。
相信这就是广大程序员喜欢编程的另一个原因吧。
各位读者,我是清风,一个朝着架构师努力的程序员。希望同大家一起进步,一起学习。
有一个被人嘲笑的梦想,万一有天实现了呢?