Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)

这篇具有很好参考价值的文章主要介绍了Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.搭建私有Docker镜像仓库

1.搭建docker registry

2.搭建docker registry web UI:

2.Maven创建并上传Docker镜像:

1.允许docker被远程访问

2.重启docker服务

3.构建和上传Docker镜像(不适用IDEA)

4.构建并上传Docker镜像(适用IDEA)


1.搭建私有Docker镜像仓库

1.搭建docker registry

参考文档:docker-registry私有镜像库搭建并配置密码登录_知难行难1985的博客-CSDN博客

docker registry 2 with tls and basic authentication-布布扣-bubuko.com

官网:Registry - Official Image | Docker Hub 

Deploy a registry server | Docker Documentation

我们设置docker registry登录时需要账号和密码

1. 新建密码目录: 

/docker/registry/auth, 存放用户密码文件
2. 下载htpasswd

因为新版版的docker registry没有htpasswd命令(是指运行的registry的容器里没有htpasswd命令),所以自己下载htpasswd,注意:这个不是在容器里运行,是在vm。
然后用htpasswd生成用户名和密码文件
# yum install httpd-tools -y
3. 生成htpasswd:
# htpasswd -Bbn bruce 12345678 > htpasswd
前一个htpasswd是命令,后面一个htpasswd是生成的用户名密码文件,然后把这个密码文件htpasswd, 放到 /docker/registry/auth
(网上有很多是这样的: docker run --entrypoint htpasswd registry:2 -Bbn testuser password > htpasswd,这个命令行是指运行docker registry容器里的 htpasswd命令。但在报错: "exec: \"htpasswd\": executable file not found in $PATH": unknown,原先的registry版本有这个命令,但是现在没有了。当然了,这个需要提前pull registry的镜像)

4.创建docker registry指令:

docker run -d -p 5000:5000 --name registry-srv --restart=always -v /docker/registry/auth:/auth/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -e REGISTRY_STORAGE_DELETE_ENABLED=true -v /usr/local/dockerregistry:/var/lib/registry/ registry:latest

5.允许http方式访问(重要):

有兴趣的可以搭建https方式去访问的docker镜像仓库,在这里不赘述了

(1).修改文件/etc/docker/daemon.json,增加"insecure-registries"配置

Note:注意了,这里要加上ELB的访问地址

vi /etc/docker/daemon.json

[root@dev-68499-04i2g registry-web]# cat /etc/docker/daemon.json
{
    "storage-driver": "devicemapper",
    "storage-opts": [
        "dm.thinpooldev=/dev/mapper/vgpaas-thinpool",
        "dm.use_deferred_removal=true",
        "dm.fs=ext4",
        "dm.use_deferred_deletion=true",
        "dm.basesize=10G"
    ],
    "insecure-registries":["10.***.***.208:5000","119.***.***.184:31000",]

(2).重启docker服务

#systemctl daemon-reload  (加载配置)

#systemctl restart docker 

6.登录Docker镜像仓库:

docker login 119.***.***.184:31000

至此,docker镜像仓库搭建完毕。

2.搭建docker registry web UI:

参考文档:docker-registry私有镜像库搭建并配置密码登录_知难行难1985的博客-CSDN博客

官网:konradkleine/docker-registry-frontend - Docker Image | Docker Hub

1.启动镜像:

创建konradkleine/docker-registry-frontend:v2指令:
docker run -d -e ENV_DOCKER_REGISTRY_HOST=119.3.248.184 -e ENV_DOCKER_REGISTRY_PORT=31000 -p 31200:80 konradkleine/docker-registry-frontend:v2

2.浏览器登录:

账号密码就用上面给docker registry创建的账号密码。

Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)

2.Maven创建并上传Docker镜像:

对于maven工程来说,需要使用docker-maven-plugin插件来完成Docker镜像的生成和上传。

docker-maven-plugin 官网地址(重要):

GitHub - spotify/docker-maven-plugin: INACTIVE: A maven plugin for Docker

1.允许docker被远程访问

我们不在windows本地安装Docker服务,而是使用华为云服务器CCE(K8s集群)中已有的docker服务去创建docker镜像,所以需要配置华为云docker服务允许远程访问

vi /usr/lib/systemd/system/docker.service

添加-H tcp://0.0.0.0:30100 -H unix:///var/run/docker.sock \,监听端口可以自己随意定,但是要确保华为云安全组已经放行。

Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)

2.重启docker服务

#systemctl daemon-reload  (加载配置)

#systemctl restart docker  

直接curl看是否生效
curl http://127.0.0.1:30100/info

3.构建和上传Docker镜像(不适用IDEA)

1.添加Docker镜像仓库的用户名密码配置

修改maven的settings.xml文件,增加<server>配置

    <servers>
		<server>
		  <id>docker-registry</id>
		  <username>crm</username>
		  <password>******(直接填密码就行)</password>
		  <configuration>
			<email>wdquan1985@163.com</email>
		  </configuration>
		</server>
    </servers> 

 2.创建Dockerfile内容如下:

使用Dockerfile去创建镜像,将其放到我们工程的src/main/docker目录下

FROM openjdk:8u212-jdk-stretch
COPY demo-0.0.1-SNAPSHOT.jar /tmp/demo-0.0.1-SNAPSHOT.jar
#这个配置“-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=32001”可以不要,本来打算配置远程调试的,但是华为云网络配置太复杂,没搞成。
CMD java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=32001 -jar /tmp/demo-0.0.1-SNAPSHOT.ja

3.pom.xml文件修改:

然后修改maven工程的pom.xml文件(在docker-maven-plugin官网GitHub - spotify/docker-maven-plugin: INACTIVE: A maven plugin for Docker有)

<plugin>
  <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>VERSION GOES HERE</version>
    <configuration>
      [...]
      <!-- 引用settings.xml文件中的Docker registry 账号密码配置 -->
      <serverId>docker-registry</serverId>
      <!-- 指定Docker registry访问地址 -->
      <registryUrl>http://1**.***.***.184:31000/v2/</registryUrl>
    </configuration>
  </plugin>
</plugins>

具体修改:

pom.xml文件应该怎样修改,细节很多,具体请看官网,在这里给出我整体修改的结果,并且给出注释

<properties>
    <docker.imageName>119.3.248.184:31000/brucetest</docker.imageName>
    <docker.tag>3.0</docker.tag>
</properties>
.................................................................................
.................................................................................
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!--加上docker插件,插件源码地址:https://github.com/spotify/docker-maven-plugin-->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.2.2</version>
            <executions>
                <execution>
                    <id>build-image</id>
                    <phase>package</phase>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </execution>
                <execution>
                    <id>tag-image</id>
                    <phase>package</phase>
                    <goals>
                        <goal>tag</goal>
                    </goals>
                    <configuration>
                        <image>${docker.imageName}:latest</image>
                        <newName>${docker.imageName}:${docker.tag}</newName>
                    </configuration>
                </execution>
                <execution>
                    <id>push-image</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>push</goal>
                    </goals>
                    <configuration>
                        <imageName>${docker.imageName}:${docker.tag}</imageName>
                    </configuration>
                </execution>
            </executions>
            <configuration>
                <!--在maven的settings.xml文件中定义了docker registry的账号密码,下面的属性表示使用账号密码 -->
                <serverId>docker-registry</serverId>
                <!--指定docker registry 地址 -->
                <registryUrl>http://119.***.***.184:31000/v2/</registryUrl>

                <!--指定镜像名, 带着docker registry信息,如果不带,则不会被推送到docker registry-->
                <imageName>${docker.imageName}</imageName>
                <!--指定标签-->
                <imageTags>
                    <imageTag>${docker.tag}</imageTag>
                </imageTags>
                <!-- build 完成后 push 镜像 -->
                <!--<pushImage>true</pushImage>-->
                <pushImageTag>true</pushImageTag>

                <!--指定远程 docker api地址 -->
                <dockerHost>http://119.***.***.184:30100</dockerHost>
                <!-- 使用Dockfile,指定 Dockerfile 路径-->
                <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>

                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

4.创建并上传docker镜像:

具体使用什么命令去执行,先看官网描述:

Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)

 刚开始的时候,使用指令:

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

总是报错:

错误信息里发现,每次都要向docker hub(docker.io/library/)和我的docker私有镜像仓库同时上传镜像,但是我只想上传到我的docker私有镜像仓库啊,怎么同时会上传到docker hub???

Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)

于是我使用了另外一条指令:

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

发现成功了,不会向docker hub上传镜像,只会向我的docker私有仓库上传

Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)

但这是为什么呢?看官网的描述:

Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)

我给我的镜像配置了<imageTag>标签,然后命令中的参数“-DpushImageTag”表示只上传添加了imageTag的镜像,也就是“119.***.***.***:31000/brucetest:3.0”,这个镜像配置了Docke私有镜像仓库的host和port,所以其只上传到docker私有镜像仓库。

<!--指定镜像名, 带着docker registry信息,如果不带,则不会被推送到docker registry-->
<imageName>119.***.***.***:31000/brucetest</imageName>
<!--指定标签-->
<imageTags>
    <imageTag>3.0</imageTag>
</imageTags>

4.构建并上传Docker镜像(适用IDEA)

在上面配置的基础上,只需要修改pom.xml文件中的一处地方,增加<pushImageTag>配置(当然了,与其对应的是<pushImage>,同时向docker hub和我的Docker私有镜像仓库push镜像)

<build>
    <plugins>
        <!--加上插件,插件源码地址:https://github.com/spotify/docker-maven-plugin-->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.2.2</version>
            <executions>
            ...............................................
            </executions>
            <configuration>
                ............................................
                <!-- build 完成后 push 镜像 -->
                <!--<pushImage>true</pushImage>-->
                <pushImageTag>true</pushImageTag>
                ........................................................
            </configuration>
        </plugin>
    </plugins>
</build>

然后点击右侧 Lifecycle 的package或者install,就能够创建并上传Docker镜像到我的Docker私有镜像仓库 

Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)文章来源地址https://www.toymoban.com/news/detail-402539.html

到了这里,关于Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Docker】推送镜像到私有仓库

    目录 退出登录  私有仓库登录  构建镜像时指定tag 提交镜像到远程仓库  现有镜像指定tag 退出登录 没登录过的跳过这步   私有仓库登录 假设你的仓库连接是https://xxx.xxx.cn,账户密码都是root,那么命令就是: docker login https://xxx.xxx.cn -u root -p root  构建镜像时指定tag  一般

    2024年02月06日
    浏览(42)
  • Docker 将容器打包成镜像&推送镜像到仓库

    示例: 1.登录仓库进行身份验证 2.将本地镜像重命名与仓库格式相匹配 3.推送镜像到仓库

    2024年02月09日
    浏览(45)
  • 推送docker镜像到私有/DockerHub仓库

    以定制jdk11镜像为例: 新建文件夹jdk11 下载orcale jdk11,复制orcale jdk11 到刚刚新建文件夹jdk11下 新建Dockerfile,镜像对字符集和时间都做了处理 创建镜像 给镜像打标签 登录Harbor私服 推送镜像 过程中常见错误解决方法 docker配置中添加私服地址,重启docker服务 访问https://hub.doc

    2024年02月15日
    浏览(47)
  • Docker镜像的拉取和推送(阿里云镜像仓库)

    简介: 阿里云的容器镜像服务个人版是不要钱的,个人可以免费创建3个命名空间和最多可创建300个免费的镜像仓库供以使用,平时可以使用这项服务对个人的镜像进行管理,就可以不使用国外的DockerHub来对镜像进行管理了,大大节省了拉取和推送的时间,本文将介绍如何把

    2024年01月23日
    浏览(42)
  • maven工具-maven的使用-镜像仓库、本地仓、IDEA使用maven

    添加第三方jar包 jar包之间的依赖关系 处理jar包之间的冲突 获取第三方jar包 将项目拆分成多个工程模块 实现项目的分布式部署 ​ Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 ​ Maven 除了以程序构建能力为特色之外,

    2024年02月12日
    浏览(59)
  • 【Docker篇】从0到1搭建自己的镜像仓库并且推送镜像到自己的仓库中

    Docker私有仓库的存在为用户提供了更高的灵活性、控制和安全性。与使用公共镜像仓库相比,私有仓库使用户能够完全掌握自己的镜像生命周期。 首先,私有仓库允许用户在本地或云服务器上部署和管理自己的镜像存储库。这意味着用户可以根据自己的需求和规模进行扩展和

    2024年01月19日
    浏览(46)
  • Docker如何将jar文件制作成为镜像并推送远程仓库

    Docker可以用来打包应用并生成镜像。下面是将Java应用程序打包成为Docker镜像的步骤: 准备Dockerfile文件 首先需要在应用程序目录下创建一个名为Dockerfile的文件(文件名必须为Dockerfile,注意大小写),该文件是用来构建Docker镜像的。 在Dockerfile中编写打包操作的指令,以下是

    2024年02月13日
    浏览(45)
  • Docker Registry本地镜像仓库结合内网穿透实现远程拉取推送镜像

    Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)镜像,不受本地局域网限制! 使用官网安装方式,docker命令一键启动,该命令启动一个registry的容器,版本是2,挂载宿主机端口是5000端口,挂载后,5000端口就是我们连接镜像仓库的本地端口 执行

    2024年02月03日
    浏览(44)
  • Github Actions 推送代码构建 Docker 镜像并 push 到仓库

    解决 ci/cd 流程,在 推送代码到 github 时,github 的 action 能够自动构建代码并发布到镜像仓库,之后运行 docker-compose 文件,启动项目访问。 问题前置分析 目前比较流行的 ci/cd 解决方案为: github + jenkins Github/gitlab + jenkins + docker hub + Docker/K8s Github + docker hub + Docker/k8s 上述两种方

    2024年01月18日
    浏览(60)
  • 编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。

    环境: CentOS 7 Linux 3.10.0-1160.el7.x86_64 具体要求如下: (1)基于centos基础镜像; (2)指定作者信息; (3)安装nginx服务,将提供的dest目录(提供默认主页index.html)传到镜像内,并将dest目录内的前端文件复制到nginx的工作目录; (4)暴露80端口; (5)设置服务自启动。 (

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包