赞
踩
关于在Windows10中安装子系统,请参看我的上一篇博文
随着微服务技术的不断普及,采用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私有镜像仓库。
本案例采用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启动参数
{
"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
因为我们要通过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安装版本
sudo apt install maven
详细过程如下:
1、先确认系统中是否已安装maven
2、执行sudo apt install maven,或者切换为root用户,直接执行apt install maven
3、通过mvn -v检测maven安装的版本
mvn -v
docker login docker.coding123.cn:18000
会要求输入用户名和密码,根据实际输入正确的用户名和密码。
查看一下本地镜像列表:
mvn docker:build
Dockerfile内容示例:
FROM openjdk:8u292
LABEL MAINTAINER=zhenglibing
WORKDIR /apps
ADD target/wgms-uaa.jar /apps/
CMD ["java","-jar","wgms-uaa.jar"]
详细过程如下:
再次查看一下本地镜像列表:
docker push docker.coding123.cn:18000/wgms/wgms-uaa
详细过程如下:
登录Harbor控制台查看镜像如下图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。