Docker私有仓库管理和删除本地仓库中的镜像

一:Docker私有仓库安装

1、 下载镜像是有镜像仓库:

[root@localhost ~]# systemctl start docker

#如果已经有镜像了,强制删除原来的镜像的方式如下:
[root@xxx-pub /]# docker rmi -f docker.io/registry
Untagged: docker.io/registry:latest
Untagged: docker.io/registry@sha256:51bb55f23ef7e25ac9b8313b139a8dd45baa832943c8ad8f7da2ddad6355b3c8
[root@xxx-pub /]#

#开始下载最新的镜像。
[root@localhost ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
4064ffdc82fe: Pull complete
c12c92d1c5a2: Pull complete
4fbc9b6835cc: Pull complete
765973b0f65f: Pull complete
3968771a7c3a: Pull complete
Digest: sha256:20bbbc0f6384cf7dc6e292ccbe75935b73c92ec776543c970904bc60feceb129
Status: Downloaded newer image for registry:latest
[root@localhost ~]#

2、 启动并且挂载镜像仓库到本地磁盘:

[root@xxx-pub /]# docker run -d -v /registry:/home/docker-registry -p 5000:5000 --restart=always --privileged=true --name registry registry:latest
Unable to find image 'registry:latest' locally
Trying to pull repository docker.io/library/registry ...
latest: Pulling from docker.io/library/registry
Digest: sha256:51bb55f23ef7e25ac9b8313b139a8dd45baa832943c8ad8f7da2ddad6355b3c8
Status: Downloaded newer image for docker.io/registry:latest
b7bd2b14ed488936afe798be95f3cd56f604fb092d45cf6f4a58359bcad0d34c
[root@xxx-pub /]#
  • -v /registry:/home/docker-registry:默认情况下,会将仓库存放于容器内的/home/docker-registry目录下,指定本地目录挂载到容器。
  • -p 5000:5000 :端口映射。即本地5000端口,映射到registry中的5000端口。
  • –restart=always1:在容器退出时总是重启容器,主要应用在生产环境。
  • –privileged=true:在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报类似权限错误。OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary')或者(Received unexpected HTTP status: 500 Internal Server Error)
  • –name registry:指定容器的名称。

为了持久化数据,将volume挂载到/home/docker-registry

3、 我们给一个本地镜像打个标签然后上传:

查看本地有哪些镜像:

[root@xxx-pub /]# docker images
REPOSITORY      TAG         IMAGE ID      CREATED       SIZE
docker.io/centos   centos7.5.1804   fdf13fa91c6e    4 weeks ago     200 MB
docker.io/registry  latest       b2b03e9146e1    2 months ago    33.3 MB
[root@xxx-pub /]#

以docker.io/centos为案例。

[root@xxx-pub /]# docker tag fdf13fa91c6e localhost:5000/xxx-centos7.5.1804:1.0
##localhost:5000表示仓库地址,fdf13fa91c6e表示images id,xxx-centos7.5.1804表示镜像名称,1.0表示版本号。

或:
[root@xxx-pub /]# docker tag docker.io/centos:centos7.5.1804 localhost:5000/xxx-centos7.5.1804:1.0

4、 直接上传:

[root@xxx-pub /]# docker push localhost:5000/xxx-centos7.5.1804:1.0
The push refers to a repository [localhost:5000/xxx-centos7.5.1804]
bcc97fbfc9e1: Pushed
1.0: digest: sha256:7c14180942615fef85cb5c8b1388e028be1a8f79694a5fa30a4025173e42ad61 size: 529
[root@xxx-pub /]#

在PUSH的过程中可能报类似如下的错误(以下是网络上的错误提示):

[root@localhost ~]# docker push 192.168.174.128:5000/hello:latest
The push refers to a repository [192.168.174.128:5000/hello]
unable to ping registry endpoint https://192.168.174.128:5000/v0/
v2 ping attempt failed with error: Get https://192.168.174.128:5000/v2/: http: server gave HTTP response to HTTPS client
 v1 ping attempt failed with error: Get https://192.168.174.128:5000/v1/_ping: http: server gave HTTP response to HTTPS client
[root@localhost ~]#

解决办法:

使用的是https,修改/etc/sysconfig/docker(这里是Centos7下的docker)文件,加上ADD_REGISTRY='–add-registry 192.168.18.162:5000',INSECURE_REGISTRY='–insecure-registry 192.168.18.162:5000' (上面是历史的docker版本的配置),如下图:

但是在新的docker容器仓库的配置中,自己的docker容器中的配置采用(这里在docker registry和另外pull镜像的机器上都指定如下的配置):

指定完成之后,要重启docker,重启的配置如下:

[root@youx-pub volumes]# systemctl restart docker

另外:查看一下docker.service,查看一下配置文件:

[root@youx-pub registry]find / -name docker.service
/sys/fs/cgroup/memory/system.slice/docker.service
/sys/fs/cgroup/devices/system.slice/docker.service
/sys/fs/cgroup/blkio/system.slice/docker.service
/sys/fs/cgroup/cpu,cpuacct/system.slice/docker.service
/sys/fs/cgroup/pids/system.slice/docker.service
/sys/fs/cgroup/systemd/system.slice/docker.service
/usr/lib/systemd/system/docker.service
[root@youx-pub registry]# vim /usr/lib/systemd/system/docker.service

然后执行一下:

#因为可以用于systemctl启动的docker.service文件变化了,所以得执行以下配置。然后执行docker的重启工作
systemctl daemon-reload
systemctl restart docker

如果还是报如下错误:

[root@youx-pub registry]# docker push 192.168.18.162:5000/nginx:1.2
The push refers to a repository [192.168.18.162:5000/nginx]
Get https://192.168.18.162:5000/v1/_ping: http: server gave HTTP response to HTTPS client
[root@youx-pub registry]#

解决办法是:

在/etc/docker下创建daemon.json,内容是:

{"insecure-registries":["192.168.18.162:5000"]}

然后再重启docker容器:

[root@youx-pub volumes]# systemctl restart docker

5、 上传完成,我们可以查看一下挂载目录是否有镜像:

[root@xxx-pub docker-registry]# pwd
/home/docker-registry
[root@xxx-pub docker-registry] # ls /registry/
Docker

6、 关于本地镜像的查看:

[root@xxx-pub docker-registry]# curl http://192.168.18.162:5000/v2/_catalog
{"repositories":["xxx-centos7.5.1804","xxx-centos7.5.1804-v1.0"]}
[root@xxx-pub docker-registry]#

7、 看到有两个镜像,我们要获取他的标签信息以便下载呢:

[root@xxx-pub docker-registry]# curl http://192.168.18.162:5000/v2/xxx-centos7.5.1804/tags/list
{"name":"xxx-centos7.5.1804","tags":["1.0"]}
[root@xxx-pub docker-registry]#

8、 然后我们直接下载镜像(到另电脑上):

[root@bigdata2 ~]# docker pull 192.168.18.162:5000/youx-centos7.5.1804:1.0
Using default tag: latest
Trying to pull repository 192.168.18.162/youx-centos7.5.1804 ...
Get https://192.168.18.162/v1/_ping: dial tcp 192.168.18.162:443: getsockopt: no route to host
[root@bigdata2 ~]#

如果出现上面的情况,解决办法是:

编译:

[root@youx-pub volumes]# vim /etc/containers/registries.conf 这个文件。
旧的是编辑:/etc/sysconfig/docker 这个文件

然后重启docker

[root@youx-pub volumes]# systemctl restart docker

然后发现可以pull了

#要注意的是,这里的地址是:仓库地址:仓库端口号/REPOSITORY:TAG
[root@bigdata2 ~]# docker pull 192.168.18.162:5000/youx-centos7.5.1804:1.0

如果还不行,需要修改/etc/docker/daemon.json,内容如下:

[root@bigdata2 docker]# cat daemon.json
{"insecure-registries":["192.168.18.162:5000"]}

二、从另外一台机器上上传镜像到docker镜像仓库:

[root@bigdata2 ~]# docker tag centos7-jdk8-nginx:1.0 192.168.18.162:5000/centos7-jdk8-nginx:1.0
[root@bigdata2 ~]# docker images
REPOSITORY                TAG         IMAGE ID      CREATED       SIZE
192.168.18.162:5000/centos7-jdk8-nginx  1.0         bcacd65e2a2e    2 minutes ago    2.18 GB

[root@bigdata2 ~]# docker push 192.168.18.162:5000/centos7-jdk8-nginx:1.0
The push refers to a repository [192.168.18.162:5000/centos7-jdk8-nginx]
f018e9c38a66: Pushed
2a47dcd341ef: Pushed
c5dea3bc729a: Pushed
bcc97fbfc9e1: Pushed
1.0: digest: sha256:d907ff2f8eb590209700c01ce85c78d0bc778a4238539d747e4667d68cb52102 size: 1163
[root@bigdata2 ~]#

然后进入docker镜像仓库所在位置:

[root@youx-pub registry]# curl http://192.168.18.162:5000/v2/_catalog
{"repositories":["centos7-jdk8-nginx","nginx"]}
[root@youx-pub registry]# curl http://192.168.18.162:5000/v2/centos7-jdk8-nginx/tags/list
{"name":"centos7-jdk8-nginx","tags":["1.0"]}
[root@youx-pub registry]#

三、本地镜像如何删除,正常是不提供删除功能的,所以使用第三方的插件来进行删除

插件github上的位置:
https://github.com/burnettk/delete-docker-registry-image

1、下载资源

[root@master registry]# curl https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/delete_docker_registry_image.py | sudo tee /usr/local/bin/delete_docker_registry_image >/dev/null

sudo chmod a+x /usr/local/bin/delete_docker_registry_image 

2、 设置相关环节变量:

查找REGISTRY_DATA_DIR,命令:
[root@youx-pub registry]# find / -name registry
[root@youx-pub registry]# find / -name registry
/var/lib/docker/overlay2/d72320cd67b42f7ae66342cc6dedab7abe5e89106de8c4919ec8c5a6e5940b09/diff/var/lib/ucf/registry
/var/lib/docker/overlay2/92211417089f7be8239def550e1e89ce3f0e50ac57f2c36ba723ca312ea06ae3/diff/bin/registry
/var/lib/docker/overlay2/c1716aea0b380eb94ead9aa02552769acd4c3dac8e6dab735997f1709ce79a33/diff/etc/docker/registry
/var/lib/docker/overlay2/46f719f01255c431b4343e78607341d6d66ea482bc6d03c3b4e05e7413f46be6/diff/var/lib/registry
/var/lib/docker/overlay2/46f719f01255c431b4343e78607341d6d66ea482bc6d03c3b4e05e7413f46be6/merged/bin/registry
/var/lib/docker/overlay2/46f719f01255c431b4343e78607341d6d66ea482bc6d03c3b4e05e7413f46be6/merged/etc/docker/registry
/var/lib/docker/overlay2/46f719f01255c431b4343e78607341d6d66ea482bc6d03c3b4e05e7413f46be6/merged/var/lib/registry
/var/lib/docker/volumes/1522d54c954c755250cb71686cacd9714cd3d0f0c706ec18c1e490c7881fe713/_data/docker/registry
/opt/data/registry
/registry
[root@youx-pub registry]#
发现
[root@youx-pub repositories]# pwd
/var/lib/docker/volumes/1522d54c954c755250cb71686cacd9714cd3d0f0c706ec18c1e490c7881fe713/_data/docker/registry/v2/repositories
[root@youx-pub repositories]# ls
centos7-jdk8-nginx nginx
[root@youx-pub repositories]#

所以设置镜像仓库的位置为:
[root@master registry]# export REGISTRY_DATA_DIR=/var/lib/docker/volumes/1522d54c954c755250cb71686cacd9714cd3d0f0c706ec18c1e490c7881fe713/_data/docker/registry/v2

地址就是咱们挂载地址:

看一下相关标签:

[root@youx-pub registry]# curl http://192.168.18.162:5000/v2/_catalog
{"repositories":["youx-centos7.5.1804","youx-centos7.5.1804-v1.0"]}
[root@youx-pub registry]# curl http://192.168.18.162:5000/v2/youx-centos7.5.1804-v1.0/tags/list
{"name":"youx-centos7.5.1804-v1.0","tags":["latest"]}
[root@youx-pub registry]#

可以之后我们直接删除:

[root@master registry]# delete_docker_registry_image --image youx-centos7.5.1804-v1.0:latest

INFO [2017-04-08 11:39:39,793] Deleting /registry/docker/registry/v2/repositories/nginx/_manifests/tags/v1
咱们再看一下本地仓库的镜像有几个:

[root@master registry]# curl http://192.168.18.162:5000/v2/_catalog
{"repositories":["youx-centos7.5.1804"]}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker之修改/etc/default/docker 里的DOCKER_OPTS参数不生效问题

    默认情况下,/etc/default/docker配置了不会生效的,我们需要手动添加到docker的环境设定中,需要配置的文件是/usr/lib/systemd/system/docker.service,需要添加EnvironmentFile=-/etc/default/docker,让后在ExecStart这个配置中,添加引用的参数$DOCKER_OPTS.置网桥的时候,我们在/etc/default/docker里添加了DOCKER_OPTS参数,但是DOCKER_OPTS参数不生效问题,

  • Docker容器修改配置文件的实现

    一.进入容器 docker run [option] 镜像名 [向启动容器中传入的命令] 常用可选参数说明: -i 表示以"交互模式"运行容器 -t 表示容器启动后会进入其命令行.加入这两个参数后,容器创建就能登录进去.即 分配一个伪终端. --name 为创建的容器命名 -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可以使 用多个-v 做多个目录或文件映射.注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上. -d 在ru

  • Linux服务器下利用Docker部署.net Core项目的全过程

    发布ASP.NET Core项目 和普通的项目发布一样,将项目发布到目标文件夹中 构建Dockerfile文件 在目标文件根目录新建Dockerfile文件(没有后缀) FROM microsoft/dotnet//基于'microsoft/dotnet' 来构建镜像 COPY . /app //拷贝项目文件夹中的所有文件到docker容器中的app文件夹 这里是两个参数 WORKDIR /app //设置工作目录为 '/app' 文件夹,即容器启动默认的文件夹 EXPOSE 80 //设置Do

  • Docker中RocketMQ的安装与使用详解

    搜索RocketMQ的镜像,可以通过docker的hub.docker.com上进行搜索,也可以在Linux下通过docker的search命令进行搜索,不过最近防火墙升级后,导致国外的网站打开都很慢,通过命令搜索反而会更加方便,操作Docker命令一定要是root用户或者具有root权限的用户.查询操作如下: docker search rocketmq 可以得到如下的结果: 镜像倒是蛮多的,不过看来看去没有一个是官方发布的,我就随便选一个吧,如foxiswho/rocketmq,以下是一个查

  • 详解如何解决docker容器无法通过IP访问宿主机问题

    问题起源 在使用 docker 的过程中我不幸需要在 docker 容器中访问宿主机的 80 端口, 而这个 80 端口是另外一个容器 8080 端口映射出去的. 当我在容器里通过 docker 的网桥 172.17.0.1 访问宿主机时, 居然发现: curl: (7) Failed to connect to 172.17.0.1 port 80: No route to host 查找问题原因 可以确定的是容器与宿主机是有网络连接的, 因为可以在容器内部通过 172.17.0.1 Ping

  • Docker上传镜像至私有仓库的方法示例

    镜像可以很方便直接 push 到 docker 的公共仓库,就好像 github 一样,但是我们在开发中很多时候都不想公开镜像文件,这时就需要搭建 docker 的私有仓库,就好像 gitlab 一样. 在 上一篇 构建出镜像后,我们可以部署一个私有镜像仓库用来存放我们的镜像. 启动私有 Registry 启动一个私有仓库也非常简单,在服务器上执行命令 复制代码 代码如下: docker run -d -p 5000:5000 --name="docker-registry" --re

  • Docker容器如何查看ip地址的实现方法

    一直以为Docker是没有IP地址的,其实Docker的网络模板有点类似我们平常使用虚拟机的host-only模式,容器和宿主机组成一个独立的局域网,宿主机的IP为172.17.0.1,对应主机的网络名称为docker0 所以要想看到docker容器的ip地址,只需要安装net-tools就可以了 yum install net-tools -y 之后就可以用ifconfig查看了 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

  • docker如何在外部指定参数变量

    这篇文章主要介绍了docker如何在外部指定参数变量,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Dockerfile: FROM frolvlad/alpine-oraclejre8:slim VOLUME /tmp ADD app.jar /app.jar #COPY agent/ /usr/local/skyagent/ WORKDIR /opt COPY docker-entrypoint.sh . ENV AP_ENV=$AP_EN

  • Docker私有仓库管理和删除本地仓库中的镜像

    一:Docker私有仓库安装 1. 下载镜像是有镜像仓库: [root@localhost ~]# systemctl start docker #如果已经有镜像了,强制删除原来的镜像的方式如下: [root@xxx-pub /]# docker rmi -f docker.io/registry Untagged: docker.io/registry:latest Untagged: docker.io/registry@sha256:51bb55f23ef7e25ac9b8313b139a

  • Docker私有仓库Registry部署的实现

    随着docker使用的镜像越来越多,就需要有一个保存镜像的地方,这就是仓库.目前常用的两种仓库:公共仓库和私有仓库.最方便的就是使用公共仓库上传和下载,下载公共仓库的镜像是不需要注册的,但是上传时,是需要注册的. 私有仓库最常用的就是Registry.Harbor两种,那接下来详细介绍如何搭建registry私有仓库,Harbor将在下一篇博文部署. 一.部署Registry私有仓库 案例描述 两台CentOS7.4,一台为Docker私有仓库:另一台为Docker客户端,测试使用: 两台服务器

  • 一文教会你如何高效地搭建Docker私有仓库

    目录 前言 1. 私有仓库 2. 搭建私有仓库 环境部署 自建仓库 3. 使用 TLS 证书 生成证书 基本身份验证 4. Nginx 反向代理仓库 5. 可视化私有仓库 总结 前言 Docker 仓库用于保存 Docker 镜像,分为公有仓库与私有仓库. 公有仓库就是 Docker Hub 一类供所有 Docker 用户使用的 Docker 仓库. 私有仓库是指由个人或企业搭建的 Docker 仓库,供其自身使用,是非公开的. 本篇文章将对 Docker 私有仓库及其相关内容进行详解. 1.

  • docker私有仓库的搭建和使用详解

    1.下载仓库镜像 docker pull registry 2.创建私有仓库容器-d表示后台启动 docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry 3.防火墙解除5000端口限制 firewall-cmd --zone=public --add-port=5000/tcp --permanent 4.验证私有仓库是否启动成功 http://192.3.8.12:5000/v2 5.打包镜像 do

  • Maven中怎么手动添加jar包到本地仓库详解(repository)

    当我们的idea无法自动下在所需的Maven依赖时,我们可以到Maven的远程仓库中下载所需要的jar包,然后添加到我们的本地仓库中. 1.首先我们打开远程仓库的网址(https://mvnrepository.com/) 2.搜索我们需要的依赖文件(以mybatis为例),点击第一个MyBatis进入第3步 3.选择对应的版本,点击进入 4.点击jar,即可下载jar包 5.所需的jar包下载好后,可以将其放在D盘根目录下 6.再回到刚才的网页中,复制其jar包的坐标 7.根据坐标groupI

  • Docker中的镜像详细介绍

    Docker中的镜像详细介绍 Docker镜像可以理解为运行在Docker容器中的一个组件,本节将会带领大家学会Docker镜像的下载.搜索.查看.添加删除等一系列操作.Docker在运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试从默认的远程仓库Docker Hub下载. 一.获取镜像:  1.Docker从网络上下载镜像的格式为: docker pull [NAME]:[TAG] 其中TAG即为标签,如果不指定标签的话,那么默认会下载最新版本的镜像. 比如从Docke

  • 详解CentOS 7 : Docker私有仓库搭建和使用

    系统环境: CentOS 7.2 192.168.0.179:Docker仓库 192.168.0.60:客户端 安装并启动docker yum -y install docker systemctl start docker systemctl enable docker 搭建私有仓库 179上下载registry镜像 docker pull registry 防火墙添加运行5000端口 iptables -I INPUT 1 -p tcp --dport 5000 -j ACCEPT 下载完

  • git 入门教程之本地仓库和远程仓库的本质介绍

    本地仓库和远程仓库在本质上没有太大区别,只不过一个是本地电脑,一个是远程电脑. 远程仓库不一定非得是 github 那种专门的"中央服务器",甚至局域网的另外一台电脑也可以充当"中央服务器"的角色,因为它存在的最初目的只是方便大家交换彼此的提交记录而已! 所以本地仓库和远程仓库的基本行为应该是一致的,约定俗成的规定是远程仓库一般不直接参与日常开发工作,主要作为项目托管中心. 某些自动化持续集成环境中也可能会直接操作远程仓库,这时远程仓库就真的和本地仓库没什么区别了!

  • Maven生成及安装jar包到本地仓库的方法

    前言 本文将讲解如何通过Maven生成jar包并安装到本地仓库(包括将当前项目打包安装仓库到本地以及安装从外部获得的单独jar包),完成下面的操作需要安装Maven并了解一些基础的命令使用,想了解Maven的一些基础概念,可以查看我的这篇文章,此外本文就不自己从零构建一个Maven项目了,而是采用IDEA自带的模板来演示样例. 创建一个 Maven 项目 在正式讲解之前,我们先创建一个简单的Maven项目: 然后在src/main/java/目录下,创建一个util/Demo.java文件: 生

  • Java maven三种仓库,本地仓库,私服,中央仓库的配置

    目录 私服仓库的配置 1. 下载sonatype Nexus来搭建私服 2 安装nexus服务 3.创建私服仓库 4.配置私服信息 中央仓库的配置 三个仓库之间的关系 总结 私服仓库的配置 私服仓库的配置比较复杂. 1. 下载sonatype Nexus来搭建私服 我们可以自己去下载https://www.sonatype.com/download-oss-sonatype.下载如下文件.下载速度比较慢,这里提供一个自己的百度云盘下载链接,大家可以去网盘下载:https://pan.baidu.

随机推荐