使用Docker Registry管理Docker镜像
文章目录
一个完整的应用系统可能包含上百个微服务,并可能对应上百个镜像,如果考虑各个微服务的版本,那么可能会构建更多的镜像,那么如何管理这些镜像呢?
使用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镜像的更多相关文章
- Docker Registry 管理镜像
一.使用Docker Registry管理镜像 a.登陆docker hub https://www.docker.com/products/docker-hub b.创建仓库 c.推送镜像 打 ...
- Docker registry 私有仓库镜像查询、删除、上传、下载 shell
#Docker官方私有仓库registry #官方只提供了API接口,不方便使用,就写了个shell #docker-registry安装配置http://www.cnblogs.com/elvi/p ...
- Docker——Registry搭建私有镜像仓库
前言 在 Docker 中,当我们执行 docker pull xxx 的时候,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库 ...
- 【转载】Docker registry仓库历史镜像批量清理
前言 在jenkins CI/CD流水线中以自动打包并push镜像的方式运行了一段时间之后, docker registry中堆积的历史镜像数量极多,磁盘空间告急,为此,有必要定期做镜像的清理,并释放 ...
- Docker日志管理--docker部署安装ELK (十一)--技术流ken
Docker logs 对于一个运行的容器,Docker 会将日志发送到 容器的 标准输出设备(STDOUT)和标准错误设备(STDERR),STDOUT 和 STDERR 实际上就是容器的控制台终端 ...
- Docker日志管理–docker部署安装ELK (十一)
Docker logs 对于一个运行的容器,Docker 会将日志发送到 容器的 标准输出设备(STDOUT)和标准错误设备(STDERR),STDOUT 和 STDERR 实际上就是容器的控制台终端 ...
- Docker容器管理——Docker容器常用命令
1.查看所有的容器 docker ps 2.查看运行的容器 docker ps -a 3.启动.停止.重启docker容器 docker start ... docker stop ... docke ...
- Docker——Registry 通过Shell管理私有仓库镜像
使用方法: 复制代码保存为 image_registry.sh sh image_registry.sh -h #查看帮助 HUB=10.0.29.104:5000 改为自己的地址 #!/bin ...
- Docker 学习3 Docker镜像管理基础
一.docker 常用操作及原理 1.docker 常用操作 2.docker 机制 1.docker client端是通过http或者https与server端通信的.个 2.docker 镜像可以 ...
随机推荐
- Queue的使用说明
普通的Queue.Queue是单个进程间的队列,不同进程不能共享:multiprocessing.Queue()是不同进程间使用的,可以共享:如果是进程池的话需要使用multiprocessing.M ...
- Spring boot启动时报 java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long错误
Spring boot启动时报 java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be ...
- Spring Cloud Gateway应用篇(十三)
一.概述 在微服务架构中,每个服务都是一个可以独立开发和运行的组件,而一个完整的微服务架构由一系列独立运行的微服务组成.其中每个服务都只会完成特定领域的功能,比如订单服务提供与订单业务场景有关的功能. ...
- vue uni-app项目中的tabbar
由于公司要求开发百度小程序,所以我们采用uni-app开发的方式,一套代码多个小程序都可以用,在开发小程序的时候我们也经常会使用到tabbar.当然自己写出来也是不错的.这个就来介绍uni-app中的 ...
- Elasticsearch java api操作(一)(Java Low Level Rest Client)
一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...
- CountDownLatch/CyclicBarrier/Semaphore 使用过吗
CountDownLatch 让一些线程堵塞直到另一个线程完成一系列操作后才被唤醒.CountDownLatch 主要有两个方法,当一个或多个线程调用 await 方法时,调用线程会被堵塞,其他线程调 ...
- spark的运行指标监控
sparkUi的4040界面已经有了运行监控指标,为什么我们还要自定义存入redis? 1.结合自己的业务,可以将监控页面集成到自己的数据平台内,方便问题查找,邮件告警 2.可以在sparkUi的基础 ...
- 转 linux终端 字符界面 显示乱码 .
方法一:配置SSH工具 SecureCRT中文版配置 [全局选项]→[默认会话]→[编辑默认设置]→[终端]→[外观]→[字体]→[新宋体 10pt CHINESE_GB2312]→[字符编码 UTF ...
- i5 11300h和R5 5600H 的区别 哪个好
酷睿i5-11300H配置为4个内核及8个线程,具备8MB的L3缓存和5MB的L2缓存,基础频率3.10GHz最高睿频4.40GHz.Intel的显卡将集成Xe GPU内核.至于TDP,i5-1130 ...
- C++语言基础——02数据的存取
常量 常量是指在程序中使用的一些具体的数.字符.在程序运行过程中,其值不能更改.如123.1.23.'a'."abc".True等. 常量的定义 const 类型 常量名 = 常量 ...