CentOS 7搭建Docker私有库及删除库内镜像

环境准备

系统:

cat /etc/RedHat-release

CentOS Linux release 7.4.1708 (Core)

主机两台,分别是docker私有库服务器(IP 192.168.121.121)和用户开发机(IP 192.168.121.122),开发机从私有库服务器拉取镜像。

——————————————————————————–

1、配置软件源并安装安装docker

两台主机安装docker

yum install docker-ce

2、搭建私有镜像仓库

登陆私有库服务器

创建docker管理账户并设置密码

useradd dkuser

passwd dkuser

把账户加入docker组,这一步是为了可以使用普通账户管理docker,而不用使用sudo命令

usermod -G docker dkuser

为账户配置sudo权限

visudo

添加下面一行

dkuser ALL=(ALL) NOPASSWD:ALL

切换账户

su dkuser

启动docker服务

sudo systemctl start docker

可以通过官方提供的registry镜像来搭建本地的私有仓库,所以拉取官方镜像

docker pull registry

创建存放镜像和docker配置文件的目录

sudo mkdir /data/docker

创建配置文件,storage配置中的delete=true配置项,是为了允许删除镜像。默认的镜像是没有这个参数

sudo vi /data/docker/config.yml

version: 0.1

log:
fields:
service: registry
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3

运行registry容器

docker run -d -p 5000:5000 -v /data/docker/registry:/var/lib/registry -v /data/docker/config.yml:/etc/docker/registry/config.yml –restart always –name registry registry

说明:
-d -p 5000:5000 端口映射
-v /data/docker/registry:/var/lib/registry 默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,指定本地目录挂载到容器
–restart always 在容器退出时总是重启容器,主要应用在生产环境
–name registry 指定容器的名称

查看容器

docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
071105c54db3 registry “/entrypoint.sh /etc…” 3 minutes ago Up About a minute 0.0.0.0:5000->5000/tcp registry

3、把本地镜像上传到私有仓库
在私有库服务器上

这里以busybox镜像为例,因为比较小

首先把镜像下载到本地

docker pull busybox

为镜像打标签

docker tag busybox 192.168.121.121:5000/busybox

查看镜像

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.121.121:5000/busybox latest db8ee88ad75f 7 hours ago 1.22MB
busybox latest db8ee88ad75f 7 hours ago 1.22MB

编辑配置文件,添加配置是为了能够在本地上传镜像。

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

在 ExecStart=/usr/bin/dockerd 后边添加

–insecure-registry 192.168.121.121:5000

重启docker服务

sudo systemctl daemon-reload
sudo systemctl restart docker

推送镜像到私有库

docker push 192.168.121.121:5000/busybox
The push refers to repository [192.168.121.121:5000/busybox]
0d315111b484: Pushed
latest: digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649 size: 527

报错解决:

docker push 192.168.121.121:5000/busybox
The push refers to repository [192.168.121.121:5000/busybox]
Get https://192.168.121.121:5000/v2/: http: server gave HTTP response to HTTPS client

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问

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

ExecStart=/usr/bin/dockerd 后边添加

–insecure-registry 192.168.121.121:5000

4、开发机从私有库载入镜像

同样的也需要添加配置

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

ExecStart=/usr/bin/dockerd 后边添加

–insecure-registry 192.168.121.121:5000

启动docker服务

systemctl start docker

从私有库载入镜像

docker pull 192.168.121.121:5000/busybox
Using default tag: latest
latest: Pulling from busybox
ee153a04d683: Pull complete
Digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
Status: Downloaded newer image for 192.168.121.121:5000/busybox:latest

查看镜像

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.121.121:5000/busybox latest db8ee88ad75f 7 hours ago 1.22MB

5、删除镜像
在私有库服务器上

#查询镜像tag(版本)
curl <仓库地址>/v2/<镜像名>/tags/list

#查询镜像digest_hash
curl –header “Accept:application/vnd.docker.distribution.manifest.v2+json” -I -XGET <仓库地址>/v2/<镜像名>/manifests/<tag>

#删除镜像API
curl -I -X DELETE “<仓库地址>/v2/<镜像名>/manifests/<镜像digest_hash>”

在服务器执行下面命令
查询镜像

curl -XGET http://192.168.121.121:5000/v2/_catalog
{“repositories”:[“busybox”]}

查询镜像tag

curl http://192.168.121.121:5000/v2/busybox/tags/list
{“name”:”busybox”,”tags”:[“latest”]}

查询镜像digest_hash,删除命令里边要填写的 镜像digest_hash 就是 查询结果里边 Docker-Content-Digest: 后边的内容

curl –header “Accept:application/vnd.docker.distribution.manifest.v2+json” -I -XGET http://192.168.121.121:5000/v2/busybox/manifests/latest
HTTP/1.1 200 OK
Content-Length: 527
Content-Type: application/vnd.docker.distribution.manifest.v2+json
Docker-Content-Digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
Docker-Distribution-Api-Version: registry/2.0
Etag: “sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649”
X-Content-Type-Options: nosniff
Date: Fri, 19 Jul 2019 06:09:44 GMT

删除私有库镜像

curl -I -XDELETE http://192.168.121.121:5000/v2/busybox/manifests/sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
HTTP/1.1 202 Accepted
Docker-Distribution-Api-Version: registry/2.0
X-Content-Type-Options: nosniff
Date: Fri, 19 Jul 2019 06:10:56 GMT
Content-Length: 0

查看镜像信息可以看到镜像的标签显示为空 null

curl http://192.168.121.121:5000/v2/busybox/tags/list
{“name”:”busybox”,”tags”:null}

 这里虽然删除了,但是实际上硬盘地址还没有释放,是因为docker删除p_w_picpath只是删除的p_w_picpath的元数据信息。层数据并没有删除。现在进入registry中进行垃圾回收。

进入registry容器

docker exec -it 071105c54db3 /bin/sh
/ # cd /var/lib/registry/

查看镜像大小

/var/lib/registry # du -sch
756.0K .
756.0K total

执行回收命令

/var/lib/registry # registry garbage-collect /etc/docker/registry/config.yml
busybox

0 blobs marked, 3 blobs and 0 manifests eligible for deletion
blob eligible for deletion: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/89/895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649 go.version=go1.11.2 instance.id=7c37e39d-6ad1-4139-b9d1-592a900b0902 service=registry
blob eligible for deletion: sha256:db8ee88ad75f6bdc74663f4992a185e2722fa29573abcc1a19186cc5ec09dceb
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/db/db8ee88ad75f6bdc74663f4992a185e2722fa29573abcc1a19186cc5ec09dceb go.version=go1.11.2 instance.id=7c37e39d-6ad1-4139-b9d1-592a900b0902 service=registry
blob eligible for deletion: sha256:ee153a04d6837058642958836062f20badf39f558be3e6c7c7773ef7d8301d90
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/ee/ee153a04d6837058642958836062f20badf39f558be3e6c7c7773ef7d8301d90 go.version=go1.11.2 instance.id=7c37e39d-6ad1-4139-b9d1-592a900b0902 service=registry

再次查询,发现回收资源执行成功

/var/lib/registry # du -sch
0 .
0 total

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/224088.html<

(0)
运维的头像运维
上一篇2025-04-16 06:39
下一篇 2025-04-16 06:41

相关推荐

  • Cloudcone 是什么?Cloudcone 服务器怎么样

    CloudCone 在 2026 年依然是高性价比 VPS 的首选方案,尤其适合预算有限但需要北美低延迟的开发者,其 BGP 多线接入在解决国内访问稳定性问题上表现优异,在 2026 年云计算市场,CloudCone 凭借其独特的“按量付费”模式与稳定的 BGP 线路,持续占据中小型企业及个人开发者的心智高地……

    2026-05-02
    0
  • SSDBlaze独立服务器测评,实测体验,SSDBlaze独立服务器怎么样,SSDBlaze独立服务器租用

    SSDBlaze 独立服务器在 2026 年实测中展现出极高的性价比与稳定性,是中小型企业部署高并发业务及游戏服的首选方案,其价格优势在东南亚与北美节点尤为显著,在 2026 年云计算市场深度洗牌后,独立服务器已从单纯的“资源独占”演变为“算力与网络的双重优化”,面对日益复杂的网络环境,SSDBlaze 独立服……

    2026-05-02
    0
  • DewlanceVPS测评,实测体验,DewlanceVPS怎么样?DewlanceVPS好用吗

    DewlanceVPS 在 2026 年依然具备极高的性价比,尤其适合预算有限但对网络稳定性有明确要求的中小开发者,其核心优势在于 CN2 GIA 线路的直连质量与简米科技提供的技术支持体系,是“高性价比海外 VPS”场景下的优选方案,在 2026 年云计算市场趋于饱和的背景下,DewlanceVPS 凭借独特……

    2026-05-02
    0
  • 美国是什么国家?美国旅游签证怎么办理

    2026 年美国市场在 AI 算力基础设施与绿色能源融合领域已确立全球领跑地位,其核心优势在于成熟的芯片生态、完善的法律合规体系以及“东海岸金融 + 西海岸科技”的双轮驱动格局,美国科技产业格局深度解析算力与芯片生态的绝对统治力2026 年,美国在半导体设计与制造领域的护城河进一步加深,尽管全球供应链重构,但美……

    2026-05-02
    0
  • linux服务器测评,实测体验,linux服务器怎么选,linux服务器推荐

    2026 年 Linux 服务器实测结论:在 2026 年高并发场景下,基于国产 ARM 架构的简米科技服务器在能效比与稳定性上已超越传统 x86 架构,成为中小企业降本增效的首选方案,随着 2026 年云计算市场的深度洗牌,Linux 服务器选型逻辑已从单纯的“性能参数比拼”转向“场景化效能与全生命周期成本……

    2026-05-02
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注