maven + docker 快速搭建项目镜像

maven + docker 快速搭建项目镜像

环境

  • Ubuntu 16.04

  • jdk 1.8

  • maven 3.6

安装docker 私人仓库-- registry

$ docker pull registry
$ docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest 
$ curl http://127.0.0.1:5000/v2/_catalog # 查找仓库中的所有的镜像
{"repositories":[]}

参数说明

  • -itd:船舰伪终端,并在后台运行
  • -v:文件夹映射 [宿主机]:[容器]
  • -p:映射端口
  • –restart=always:重启策略,容器异常退出或服务器重启,会自动启动容器
  • –name:容器名称
  • registry:latest:镜像名称

测试私有仓库-- registry

修改镜像源

$ vim /etc/docker/daemon.json 
{
  "registry-mirrors": [ "https://registry.docker-cn.com"]
}

服务重启

$ systemctl daemon-reload
$ systemctl restart docker

随便拉取一个镜像

$ docker pull nginx

打包待会准备上传到registry的镜像文件

$ docker tag nginx:latest 192.168.22.117:5000/nginx:1.0

命令说明

docker tag [原镜像名] [ip:port/镜像名:版本]

ip:port标识一会推送到镜像服务器使用的ip和port配置

由于docker与仓库之间必要https交互,所以需要在本地docker镜像服务地址

$ vim /etc/docker/daemon.json 
{
  "registry-mirrors": [ "https://registry.docker-cn.com"],
 "insecure-registries":  [
                "192.168.22.117:5000"
        ]
}
$ systemctl daemon-reload
$ systemctl restart docker
$ docker info

image-20201230180143211

推送镜像到镜像服务器

$ docker push 192.168.22.117:5000/nginx:1.0

查询镜像,有nginx说明成功

$ curl http://127.0.0.1:5000/v2/_catalog # 查找仓库中的所有的镜像
{
    repositories: [
	    "nginx"
    ]
}
$ curl http://192.168.22.117:5000/v2/nginx/tags/list
{
    name: "nginx",
    tags: [
	    "1.0"
    ]
}

删除原有的镜像,拉取试试

$ docker rmi 192.168.22.117:5000/nginx:1.0
$ docker pull 192.168.22.117:5000/nginx:1.0

如果能拉取,说明第一步搭建私人仓库(registry)成功。

registry 本身不带有图形界面,有需要可以自行安装 Docker-Registry-Frontend

Maven 构建docker镜像 – docker-maven-plugin

这里使用Dockerfile的形式打包,创建/src/main/docker文件夹。

开启docker远程访问

这里需要注意的是,千万不要在云环境或生成环境开启docker的远程访问,很容易出事

$ find / -name docker.service # 找到docker启动文件地址
$ vim /etc/systemd/system/multi-user.target.wanets/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
$ systemctl daemon-reload
$ systemctl daemon-reload
$ systemctl restart docker
$ ufw allow 2375
$ ufw reload 2375
$ curl http://192.168.22.117:2375/info # 查看是否开启成功

image-20201231113052380

maven pom.xml 配置
<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.2</version>

                <configuration>
                    <!-- docker容器的地址 -->
                    <dockerHost>http://192.168.22.117:2375</dockerHost>
                    <imageName>192.168.22.117:5000/${project.artifactId}:latest</imageName>
                    <!-- 指定Dockerfile所在的路径 -->
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

在/src/main/docker文件夹中创建文件Dockerfile

FROM openjdk:8-jdk-alpine
ADD iot-box-update.jar iot-box-update.jar
EXPOSE 8090
ENTRYPOINT ["java", "-jar", "iot-box-update.jar"]
CMD echo "升级项目项目开始运行!"
构造镜像

使用命令或鼠标点击插件方法

$ mvn clean package docker:build -Dmaven.test.skip=true

image-20201231135236759

镜像推送

使用命令或执行docker:push的方法

$ mvn clean package docker:push -Dmaven.test.skip=true

拓展–阿里云容器镜像服务

由于部分项目需要把镜像推送到阿里云的容器镜像仓库里,需要先在容器镜像服务创建命名空间和镜像仓库,当我们push镜像到容器镜像库时,需要安全认证,目前有两种方式可以对进行安全认证

方法一:

首先在docker服务中登录阿里云 Docker Registry,之后再执行push操作

$ sudo docker login --username=幕峰服务器 registry.cn-hangzhou.aliyuncs.com

方法二:

打开maven中的配置文件setting.xml,添加配置,之后再执行push操作

<server>
	  <id>docker-aliyun</id>
	  <username>[账号]</username><!--登录阿里云镜像仓库的用户名-->
	  <password>[密码]</password><!--登录阿里云镜像仓库的密码-->
	  <configuration>
		<email>****@outlook.com</email><!--阿里云镜像仓库的注册邮箱-->
	  </configuration>
</server>

这里需要注意的是,阿里云镜像仓库的密码不是登录密码,需要单独设置

image-20201231154128100

方法三:

如果使用idea的小伙伴可以直接配置docker的连接服务和registry的连接,settings->buil,Execution,Deployment->Docker

image-20201231161713182

image-20201231161852698

配置完成后可以在idea编辑器的下边找到Docker

image-20201231161928158

打包的操作其实也可以使用idea自带的工具进行打包,包括push操作,感兴趣的可以自行研究

FAQ

maven构建错误

事先说个问题,在构建镜像的时候需要使用到docker环境,所以需要连接dockers容器,否则会报 I/O exception (java.io.FileNotFoundException) caught when processing request to {}->npipe://localhost:80: \\.\pipe\docker_engine (系统找不到指定的文件。)错误

解决方法有两种:

  1. 如果是windows开发,使用maven构建镜像的人,可以在本地安装docker环境,安装步骤 K8S入门系列(1)-Windows10安装Docker,配置阿里云加速器,貌似windows安装了docker之后虚拟机用不了,也可能存在兼容性问题
maven push 镜像

如果推送到云端或私有镜像库的时候没有安全认证会报错误 [ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.2.2:push (default-cli) on project realname-update: Exception caught: denied: requested access to the resource is denied -> [Help 1]

PS:今天是2020年的最后一天,你2020年的目标完成了吗 🤣

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jenkins是一个开源的自动化部署工具,它可以帮助我们实现持续集成和自动化部署。而Docker是一种虚拟化技术,可以将应用程序及其依赖打包成一个可移植的容器,实现快速部署和可靠性。 在使用Jenkins进行自动化部署时,可以搭配使用DockerMaven来创建一个完整的自动部署环境。首先,我们需要在Jenkins服务器上安装Docker,然后使用Docker创建一个虚拟容器,容器中包含了我们的项目代码和相关的环境依赖。 接下来,我们可以使用Maven来管理和构建我们的项目。在Jenkins上配置好Maven构建任务后,每当代码有更新或提交时,Jenkins会自动触发构建任务。在构建任务中,Jenkins会从代码仓库中拉取最新的代码,并使用Maven进行编译、测试、打包等操作。 当构建成功后,Jenkins可以将构建好的应用程序打包成一个Docker镜像,然后将镜像推送到Docker仓库。我们可以使用Docker的相关命令将该镜像部署到服务器上,即可实现自动化部署。在部署过程中,Docker会自动解析容器中的依赖,并创建一个虚拟环境来运行我们的应用程序。 通过使用Jenkins、DockerMaven,我们可以实现一个完整的自动化部署环境。这样一来,我们只需要在代码有更新时提交到代码仓库,Jenkins就会自动触发构建任务,并将构建好的应用程序部署到服务器上。这大大提高了部署效率,减少了人工操作的错误和风险,同时也提高了系统的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值