一个完整的应用系统可能包含上百个微服务,并可能对应上百个镜像,如果考虑各个微服务的版本,那么可能会构建更多的镜像,那么如何管理这些镜像呢?

使用Docker Registry管理Docker镜像

Docker Hub是Docker官方维护的Docker Registry,有很多优秀镜像,此外,还提供认证、工作组结构、工作流工具、构建触发器等工具来简化工作。

可使用docker search搜索存放在Docker Hub中的镜像。

1.使用Docker Hub管理镜像

也可使用docker login命令登录Docker Hub。输入该命令并按照提示输入账号和密码,即可完成登录。

1.1注册与登录

Docker Hub的使用非常简单,只需注册一个Docker Hub账号,就可正常使用了。

网站地址:https://hub.docker.com

1.2创建仓库

单机Docker Hub主页上的Create Repository按钮,按照提示填入信息即可创建一个仓库。

1.3推送镜像

如何将构建的镜像推送的Docker Hub呢?使用以下命令即可,例如:

docker push discovery-eureka:0.0.1

经过一段时间的等待,就可推送成功。

2. 使用私有仓库管理镜像

相比Docker Hub,私有仓库有以下优势:

  • 节省带宽,对于私有仓库中的镜像,无需从Docker Hub下载。
  • 更加安全
  • 便于内部镜像统一管理。

2.1 搭建私有仓库

Docker Registry2.0的搭建,只需执行以下命令即可新建并启动一个Docker Registry2.0.

docker run -d -p 5000:5000 -restart=always --name registry2 registry:2

2.2 将镜像推送到私有仓库

只需指定私有仓库的地址,即可将镜像推送到私有仓库。

docker push localhost:5000/itmuch/discovery-eureka:0.0.1

执行此命令,发现没成功,且提示以下内容:

The push refers to a repository [docker push localhost:5000/itmuch/discovery-eureka:0.0.1]
An image does not exist locally with the tag : localhost:5000/itmuch/discovery-eureka

Docker Hub是默认的Docker Registry,所以/itmuch/discovery-eureka:0.0.1相当于docker.io/itmuch/discovery-eureka:0.0.1。因此,要想将镜像推到到私有仓库,需要修改镜像标签,

docker tag itmuch/discovery-eureka:0.0.1  localhost:5000/itmuch/discovery-eureka:0.0.1

修改镜像标签后,在执行以下命令,即可将镜像推送到私有仓库。

docker push localhost:5000/itmuch/discovery-eureka:0.0.1

3.使用Maven插件构建Docker镜像

以discovery-eureka为例。

首先,在pom.xml中添加Maven的Docker插件。

<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>itmuch/discovery-eureka:0.0.1</imageName>
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>

配置说明:

  • imageName用于指定镜像名称,其中itmuch是仓库名称,discovery-eureka是镜像名称,0.0.1是标签名称。
  • baseImage:用于指定基础镜像,类似于Dockerfile中的FROM指令。
  • entrypoint:类似于Dock而file的ENTRYPOINT指令。
  • resources.resource.directory:用于指定需要复制的根目录,${project.build.directory}表示target目录。
  • resources.resouce.include:用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar文件。

2:执行以下命令,构建Docker镜像

mvn clean package docker:build

3:执行docker images ,即可查看刚刚构建的镜像。

4:启动镜像:

docker run -d -p 8761:8761 itmuch/discovery-eureka0.0.1

5:访问测试。

插件读取Dockerfile进行构建

1:首先在/discovery-eureka/src/main/docker目录下,新建一个Dockerfile文件,例如:

FROM java:8
VOLUME /tmp
ADD discovery-eureka0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9000
ENTRYPOINT ["java","Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

2:修改pom.xml

<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>itmuch/discovery-eureka0.0.2</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <!-- 指定 Dockerfile 路径-->
<!-- 这里是复制 jar 包到 docker 容器指定目录配置,也可以写到 Docokerfile 中 -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>

可以看到,不再指定baseImage和entrypoint,而是使用dockerDirectory指定Dockerfile所在的路径。

使用Docker Registry管理Docker镜像的更多相关文章

  1. Docker Registry 管理镜像

    一.使用Docker Registry管理镜像 a.登陆docker hub  https://www.docker.com/products/docker-hub b.创建仓库 c.推送镜像   打 ...

  2. Docker registry 私有仓库镜像查询、删除、上传、下载 shell

    #Docker官方私有仓库registry #官方只提供了API接口,不方便使用,就写了个shell #docker-registry安装配置http://www.cnblogs.com/elvi/p ...

  3. Docker——Registry搭建私有镜像仓库

    前言 在 Docker 中,当我们执行 docker pull xxx 的时候,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库 ...

  4. 【转载】Docker registry仓库历史镜像批量清理

    前言 在jenkins CI/CD流水线中以自动打包并push镜像的方式运行了一段时间之后, docker registry中堆积的历史镜像数量极多,磁盘空间告急,为此,有必要定期做镜像的清理,并释放 ...

  5. Docker日志管理--docker部署安装ELK (十一)--技术流ken

    Docker logs 对于一个运行的容器,Docker 会将日志发送到 容器的 标准输出设备(STDOUT)和标准错误设备(STDERR),STDOUT 和 STDERR 实际上就是容器的控制台终端 ...

  6. Docker日志管理–docker部署安装ELK (十一)

    Docker logs 对于一个运行的容器,Docker 会将日志发送到 容器的 标准输出设备(STDOUT)和标准错误设备(STDERR),STDOUT 和 STDERR 实际上就是容器的控制台终端 ...

  7. Docker容器管理——Docker容器常用命令

    1.查看所有的容器 docker ps 2.查看运行的容器 docker ps -a 3.启动.停止.重启docker容器 docker start ... docker stop ... docke ...

  8. Docker——Registry 通过Shell管理私有仓库镜像

    使用方法: 复制代码保存为 image_registry.sh sh image_registry.sh  -h   #查看帮助 HUB=10.0.29.104:5000 改为自己的地址 #!/bin ...

  9. Docker 学习3 Docker镜像管理基础

    一.docker 常用操作及原理 1.docker 常用操作 2.docker 机制 1.docker client端是通过http或者https与server端通信的.个 2.docker 镜像可以 ...

随机推荐

  1. Hadoop之WordCount

    求平均数是MapReduce比较常见的算法,求平均数的算法也比较简单,一种思路是Map端读取数据,在数据输入到Reduce之前先经过shuffle,将map函数输出的key值相同的所有的value值形 ...

  2. java内部类对象使用.this,.new

    public class InnerClass { class Content { private int i; public int getVlaue() { return i; } } class ...

  3. ES6 浅谈Reflect

    Reflect 属于一个静态类,不能通过new的方法去创建实例,只能调用静态类中的一些静态方法,Reflect内部封装了一系列对对象的底层操作, Reflect 成员方法就是Proxy处理对象的默认实 ...

  4. 多图详解Go中的Channel源码

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 本文使用的go的源码时14.4 chan介绍 package main import & ...

  5. 使用 Flux,Helm v3,Linkerd 和 Flagger 渐进式交付 Kubernetes

    介绍 本指南将引导您在 Kubernetes 集群上设置渐进式交付 GitOps 管道. GitOps Helm 研讨会 原文地址:GitOps Progressive Deliver with Fl ...

  6. MySql中的有条件插入 insert where

    假设现在我们有这样的需求:当数据库中不存在满足条件的记录时,可以插入一条记录,否则程序退出.该怎么实现? 1年以上工作经验的人应该都能立即想到:去检查一下库里有没有记录,没有就插入,有就结束. int ...

  7. 【Dart】语言概述

    // 导入(import) // 导入核心库 //导入外部库 import 'package:test_api/test_api.dart'; // 导入文件 //import 'path/test. ...

  8. MyBatis初级实战之四:druid多数据源

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. oracle 释放表空间到OS(resize)

    1.查看表空间里面的对象 SELECT OWNER AS OWNER, SEGMENT_NAME AS SEGMENT_NAME, SEGMENT_TYPE AS SEGMENT_TYPE, SUM ...

  10. 基于FPGA的光口通信开发案例|基于Kintex-7 FPGA SFP+光口的10G UDP网络通信开发案例

    前言 自著名华人物理学家高锟先生提出"光传输理论",实用化的光纤传输产品始于1976年,经历了PDH→SDH→DWDM→ASON→MSTP的发展历程.本世纪初期,ASON/OADM ...