docker学习---搭建Docker私有库及删除库内镜像
环境准备
系统:
cat /etc/redhat-release
CentOS Linux release 7.4. (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 : -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:/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:/busybox
The push refers to repository [192.168.121.121:/busybox]
0d315111b484: Pushed
latest: digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649 size:
报错解决:
docker push 192.168.121.121:/busybox
The push refers to repository [192.168.121.121:/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:/busybox
Using default tag: latest
latest: Pulling from busybox
ee153a04d683: Pull complete
Digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
Status: Downloaded newer image for 192.168.121.121:/busybox:latest
查看镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.121.121:/busybox latest db8ee88ad75f hours ago .22MB
5、删除镜像
在私有库服务器上
相应的参考命令:
#查询镜像
curl <仓库地址>/v2/_catalog
#查询镜像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 OK
Content-Length:
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, Jul :: GMT
删除私有库镜像
curl -I -XDELETE http://192.168.121.121:5000/v2/busybox/manifests/sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
HTTP/1.1 Accepted
Docker-Distribution-Api-Version: registry/2.0
X-Content-Type-Options: nosniff
Date: Fri, Jul :: GMT
Content-Length:
查看镜像信息可以看到镜像的标签显示为空 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
.0K .
.0K total
执行回收命令
/var/lib/registry # registry garbage-collect /etc/docker/registry/config.yml
busybox blobs marked, blobs and manifests eligible for deletion
blob eligible for deletion: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
INFO[] Deleting blob: /docker/registry/v2/blobs/sha256//895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649 go.version=go1.11.2 instance.id=7c37e39d-6ad1--b9d1-592a900b0902 service=registry
blob eligible for deletion: sha256:db8ee88ad75f6bdc74663f4992a185e2722fa29573abcc1a19186cc5ec09dceb
INFO[] Deleting blob: /docker/registry/v2/blobs/sha256/db/db8ee88ad75f6bdc74663f4992a185e2722fa29573abcc1a19186cc5ec09dceb go.version=go1.11.2 instance.id=7c37e39d-6ad1--b9d1-592a900b0902 service=registry
blob eligible for deletion: sha256:ee153a04d6837058642958836062f20badf39f558be3e6c7c7773ef7d8301d90
INFO[] Deleting blob: /docker/registry/v2/blobs/sha256/ee/ee153a04d6837058642958836062f20badf39f558be3e6c7c7773ef7d8301d90 go.version=go1.11.2 instance.id=7c37e39d-6ad1--b9d1-592a900b0902 service=registry
再次查询,发现回收资源执行成功
/var/lib/registry # du -sch
.
total
参考:
https://www.cnblogs.com/Tempted/p/7768694.html
https://blog.csdn.net/jiangeeq/article/details/81056055
https://www.cnblogs.com/HwyStudy/p/10483163.html
https://blog.51cto.com/302876016/1966816
docker学习---搭建Docker私有库及删除库内镜像的更多相关文章
- docker学习---搭建Docker LAMP环境
1.环境 系统版本:CentOS Linux release 7.4.1708 docker版本:docker-ce-18.09 主机IP:192.168.121.121 2.载入MySQL和PHP镜 ...
- 在 Docker 搭建 Maven 私有库
在 Docker 搭建 Maven 私有库 小引 If you are developing software without a repository manager you are likely ...
- Docker学习笔记 — Docker私有仓库搭建
Docker学习笔记 — Docker私有仓库搭建 目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2 和Mavan的管理一样,Dockers ...
- Docker学习之Docker容器基本使用
Docker学习之Docker容器基本使用 新建容器并启动 命令格式:docker run --options repository:tag 后台运行 命令格式:-d 已存在的容器相关操作 启动:do ...
- Docker学习之Docker镜像基本使用
Docker学习之Docker镜像基本使用 获取镜像 命令格式:docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 例如: docker pull ...
- <Docker学习>3. docker镜像命令使用
镜像提供容器运行时所需要的程序,资源.配置文件等,是一个特殊的文件系统.是容器运行的基础.镜像是多层文件系统组成的,是一个分层存储的架构,在镜像的构建中,会一层层的构建,每一层构建完成就不会发生改变, ...
- docker 查询或获取私有仓库(registry)中的镜像
docker 查询或获取私有仓库(registry)中的镜像,使用 docker search 192.168.1.8:5000 命令经测试不好使. 解决: 1.获取仓库类的镜像: [root@sha ...
- 使用 docker + verdaccio 搭建npm私有仓库
本文介绍如何使用 verdaccio 搭建私有npm仓库,以及使用 docker 时如何映射到本地目录,方便简单对仓库进行各种操作.系统环境是 Linux. verdaccio verdaccio 是 ...
- Docker学习笔记 — Docker私有仓库搭建【转载】
标签: Docker 2015-03-10 21:08 24190人阅读 评论(0) 收藏 举报 分类: Docker(26) 目录(?)[+] 和Mavan的管理一样,Dockers不仅 ...
随机推荐
- 牛客小白月赛16 D 小阳买水果 (思维题)
链接:https://ac.nowcoder.com/acm/contest/949/D来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- QT + openssl + VS2015静态编译
从http://slproweb.com/products/Win32OpenSSL.html下载已经编译好的openssl,一路next 我将OpenSSL-Win32\lib\VC目录下的libe ...
- 牛客网NOIP赛前集训营-提高组(第六场) C-树
题目描述 有一棵有 n 个结点的树,每条边有编号为 0,1,2 的三种颜色,刚开始每条边颜色都为 0 . 现在有 3 种操作: \(1\ x\ y\ col\) ,表示询问 \(x\) 到 \(y\) ...
- centos7安装完成之后必要的配置
一配置yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget ...
- 回炉Spring--事务及Spring源码
声明式事务 配置文件信息: /** * @EnableTransactionManagement 开启基于注解的事务管理功能 * 1.配置数据源 * 2.配置事务管理器来管理事务 * 3.给方法上标注 ...
- IGServer for Java
Eclipse和JavaEE: DCServer是哪个? 查看服务器文件夹: Env_Var变量没有定义:JRE_HOME.JDK_HOME 这是Tomcat报错的提示,但是既然JAVA_HOME都有 ...
- vue工程本地代码请求http发生跨域提示错误解决方法
这个可以使用代理进行跨域,这样看来跨域的方法就有几种了,对于iframe中的用postmassage,对于vue工程中的跨域则使用代理模式. 代理模式配置如下: 在config文件夹下找到index. ...
- MVC 入门
MVC是什么? MVC是一个框架模式,它用于把应用程序的输入.处理和输出进行强制性的分开.使用MVC应用程序被分成三个核心部件:模型.视图.控制器.它们各自处理自己的任务.最典型的MVC就是JSP+S ...
- 测开之路四十七:Django之请求静态资源与模板
框架必要的配置 import sysfrom django.conf.urls import urlfrom django.conf import settingsfrom django.http i ...
- Appium移动端自动化:Api接口详解
滑动操作与拖拽操作 # 滚动处理 # elementObj1 目标滚动元素,elementObj2 起始滚动元素 # 底层通过action操作,与web ui相反,origin_el为目标元素,des ...