Windows10子系统Ubuntu20.04.4 LTS部署docker后制作docker镜像,并把镜像推送至Harbor私有镜像仓库
0、前言
关于在Windows10中安装子系统,请参看我的上一篇博文
1、背景
随着微服务技术的不断普及,采用springboot、springCloud、netcore、net5、net6技术进行微服务开发的项目越来越多,为了更加方便部署和管理项目,通常都会采用docker容器的方式对微服务应用进行部署。然而目前的现状是大部分开发者都是用的Windows10桌面系统,而Windows10本身并不支持docker,当然你可以再找一台服务器安装Jenkins,在Jenkins服务器上完成docker镜像的制作以及部署,然对于初学者来说成本太高了。当前最流行的方法是在Windows10系统上安装Docker Desktop,然Docker Desktop占用系统资源偏高,我笔记本16G的内存,在Docker Desktop中启动多个容器后明显内存不大够用。前几天在Windows10中启用了WSL2,并安装了一个Ubuntu的子系统,可以让我们在Windows系统中使用原生Linux的功能,因此果断卸载了Docker Desktop。下面我就介绍一下在Ubuntu子系统中如何制做docker镜像,并把镜像推送至Harbor私有镜像仓库。
2、本案例微服务程序技术说明
本案例采用spring cloud + maven搭建微服务应用。
1、在工程pom.xml中引入了maven插件docker-maven-plugin
docker-maven-plugin的版本已经在根pom里管理了,所以工程不需要加版本号
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<forceTags>true</forceTags>
<baseImage>${docker.baseImage}</baseImage>
<volumes>${docker.volumes}</volumes>
<env>
<JAVA_OPTS>${docker.java.opts}</JAVA_OPTS>
</env>
<entryPoint>["java ","$JAVA_OPTS ${docker.java.security.egd} ","-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>
configuration属性解释
- imageName:为镜像名
- imageTags:配置镜像tag,这里指定了两个tag(最新的版本号和latest)
- forceTags:强制在每次新的构建上覆盖镜像tags
- baseImage:基础镜像
- volumes:配置挂载目录
- env:配置环境变量
- entryPoint:配置执行命令
- resources:配置目标jar包的位置
2、在父工程pom.xml的properties下增加以下参数
<docker.baseImage>openjdk:8-jre-alpine</docker.baseImage>
<docker.volumes>/tmp</docker.volumes>
<docker.image.prefix>docker.coding123.cn:18000/wgms</docker.image.prefix>
<docker.java.security.egd>-Djava.security.egd=file:/dev/./urandom</docker.java.security.egd>
<docker.java.opts>-Xms128m -Xmx128m</docker.java.opts>
参数解释
- docker.baseImage:为jre8的基础镜像
- docker.volumes:是在容器里挂载的目录
- docker.image.prefix:仓库地址/项目名
- docker.java.security.egd:加快随机数产生过程
- docker.java.opts:设置JVM启动参数
3、在Ubuntu子系统中增加/etc/docker/daemon.json,并重启docker
{
"registry-mirrors": [
"http://mirrors.aliyun.com",
"https://mirrors.tuna.tsinghua.edu.cn"
],
"insecure-registries": ["docker.coding123.cn:18000"]
}
因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报http: server gave HTTP response to HTTPS client错误。为了解决这个问题需要把允许http访问的地址放入"insecure-registries"中。
重启docker
sudo service docker stop
sudo service docker start
4、在Ubuntu子系统中通过apt安装openjdk8
因为我们要通过maven对spring cloud项目打包,而maven又依赖jdk,因此我们需要先安装jdk,这里安装的事openjdk8,如下:
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get -y install openjdk-8-jdk
详细过程如下:
1、检测有没有安装jdk
2、执行sudo add-apt-repository ppa:openjdk-r/ppa命令
3、执行sudo apt-get update 命令
4、执行sudo apt-get -y install openjdk-8-jdk
5、检测jdk安装版本
5、在Ubuntu子系统中通过apt安装maven
sudo apt install maven
详细过程如下:
1、先确认系统中是否已安装maven
2、执行sudo apt install maven,或者切换为root用户,直接执行apt install maven
3、通过mvn -v检测maven安装的版本
mvn -v
6、在Ubuntu子系统中进行docker镜像构建
6.1 先通过docker login登录私有镜像仓库
docker login docker.coding123.cn:18000
会要求输入用户名和密码,根据实际输入正确的用户名和密码。
查看一下本地镜像列表:
6.2 在Dockerfile目录下执行执行maven指令mvn docker:build
mvn docker:build
Dockerfile内容示例:
FROM openjdk:8u292
LABEL MAINTAINER=zhenglibing
WORKDIR /apps
ADD target/wgms-uaa.jar /apps/
CMD ["java","-jar","wgms-uaa.jar"]
详细过程如下:
再次查看一下本地镜像列表:
7、在Ubuntu子系统中推送docker镜像至Harbor私有镜像仓库
docker push docker.coding123.cn:18000/wgms/wgms-uaa
详细过程如下:
登录Harbor控制台查看镜像如下图: