一、docker镜像的仓库

  仓库分为公共仓库和私有仓库

  DockerHub的官方仓库:https://hub.docker.com

  DockerPool社区仓库:https://dl.dockerpool.com

1、使用公共registry

  保存和分发镜像的最直接方法就是使用 Docker Hub。

  Docker Hub 是 Docker 公司维护的公共 Registry。用户可以将自己的镜像保存到 Docker Hub 免费的 repository 中。如果不希望别人访问自己的镜像,也可以购买私有 repository。

  除了 Docker Hub,quay.io 是另一个公共 Registry,提供与 Docker Hub 类似的服务。
下面介绍如何用 Docker Hub 存取我们的镜像。

  第一步:首先得在 Docker Hub 上注册一个账号。(https://cloud.docker.com/)

  第二步:在 Docker Host 上登录

[root@ren7 ~]# docker login -u ren1212
Password:
Login Succeeded

  第三步:修改镜像的repository 使之与 Docker Hub账号匹配

  Docker Hub 为了区分不同用户的同名镜像,镜像的 registry 中要包含用户名,完整格式为:[username]/xxx:tag

  我们可以通过docker tag 命令重新给镜像改个标签

[root@ren7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1 11a0d1b90f00 20 hours ago 394MB
centos latest 0f3e07c0138f 2 weeks ago 220MB
registry latest f32a97de94e1 7 months ago 25.8MB
[root@ren7 ~]# docker tag registry:latest ren1212/registry:v1
[root@ren7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1 11a0d1b90f00 20 hours ago 394MB
centos latest 0f3e07c0138f 2 weeks ago 220MB
registry latest f32a97de94e1 7 months ago 25.8MB
ren1212/registry v1 f32a97de94e1 7 months ago 25.8MB

  注:docker官方自己维护的镜像没有用户名。

  第四步:通过docker push 将镜像上传到docker hub 中

[root@ren7 ~]# docker push ren1212/registry:v1
The push refers to repository [docker.io/ren1212/registry]
73d61bf022fd: Mounted from library/registry
5bbc5831d696: Mounted from library/registry
d5974ddb5a45: Mounted from library/registry
f641ef7a37ad: Mounted from library/registry
d9ff549177a9: Mounted from library/registry
v1: digest: sha256:b1165286043f2745f45ea637873d61939bff6d9a59f76539d6228abf79f87774 size: 1363

  第五步:登录https://hub.docker.com,在Public Repository中就可以看到上传的镜像

  如果要删除上传的镜像,只能在docker hub 界面上操作。

  第六步:这个镜像可以被其它docker host 下载使用

2、搭建本地的registry(创建自己的私有仓库)

Docker Hub 虽然非常方便,但还是有些限制,比如:

  (1)需要 internet 连接,而且下载和上传速度慢。

  (2)上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 repository,但不是免费的。

  (3)安全原因很多组织不允许将镜像放到外网。

解决方案就是搭建本地的 Registry。

第一步:运行registry容器(ren7)

  Docker 已经将 Registry 开源了,同时在 Docker Hub 上也有官方的镜像 registry。下面我们就在 Docker 中运行自己的 registry。

[root@ren7 ~]# docker run -d -p 5000:5000 -v /var/lib/registry:/var/l
ib/registry --restart=always --name registry registry:2
Unable to find image 'registry:2' locally
2: Pulling from library/registry
c87736221ed0: Already exists
1cc8e0bb44df: Already exists
54d33bcb37f5: Already exists
e8afc091c171: Already exists
b4541f6d3db6: Already exists
Digest: sha256:b224aa2d9a6397e9102b0b887a3e92496eadd76872efb7595bed97f9b76d2056
Status: Downloaded newer image for registry:2
b9bd140f648bea07b32594d58d8f4560c466f8263d1f5f0e510e1a2f3030824e
[root@ren7 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9bd140f648b registry:2 "/entrypoint.sh /etc…" 16 seconds ago Up 15 seconds 0.0.0.0:5000->5000/tcp registry
-d 是后台启动容器。
-p 将容器的 5000 端口映射到 Host 的 5000 端口。5000 是 registry 服务端口。
-v 将容器 /var/lib/registry 目录映射到 Host 的 /test,用于存放镜像数据。

第二步:设置docker客户端(ren8)

(1)修改配置文件将私有库地址加入进去

vim /etc/sysconfig/docker
line 4: add Docker-Registry's URL
OPTIONS='--insecure-registry 192.168.254.162:5000

  注意:有时会遇到如下报错:

  这是由于Registry为了安全性考虑,默认是需要https证书支持的,可利用(2)提到的方法解决。

(2)或者修改/etc/docker/daemon.json文件,加入如下内容:

"insecure-registries": ["192.168.11.7:5000"],
{
"registry-mirrors": ["http://cc83932c.m.daocloud.io"],
"insecure-registries": ["192.168.11.7:5000"],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}

(3)重新启动docker服务

systemctl  restart  docker

第三步:通过 docker tag 重命名镜像,使之与 registry 匹配。

[root@ren8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 19485c79a9bb 6 weeks ago 1.22MB
[root@ren8 ~]# docker tag busybox:latest 192.168.11.7:5000/busybox:latest
[root@ren8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.11.7:5000/busybox latest 19485c79a9bb 6 weeks ago 1.22MB
busybox latest 19485c79a9bb 6 weeks ago 1.22MB

  在镜像的前面加上运行registry的主机名和端口。

第四步:上传镜像之自己新创建的镜像仓库

[root@ren8 ~]# docker push 192.168.11.7:5000/busybox:latest
The push refers to repository [192.168.11.7:5000/busybox]
6c0ea40aef9d: Pushed
latest: digest: sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808 size: 527

第五步:删除本地原有的registry镜像,然后向私有库192.168.11.7重新下载

[root@ren8 ~]# docker rmi 192.168.11.7:5000/busybox:latest
[root@ren8 ~]# docker rmi busybox:latest
[root@ren8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@ren8 ~]# docker pull 192.168.11.7:5000/busybox:latest
latest: Pulling from busybox
7c9d20b9b6cd: Pull complete
Digest: sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
Status: Downloaded newer image for 192.168.11.7:5000/busybox:latest
192.168.11.7:5000/busybox:latest
[root@ren8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.11.7:5000/busybox latest 19485c79a9bb 6 weeks ago 1.22MB

二、docker底层依赖的核心技术

  命名空间 (Namespaces)
  控制组 (Control Groups)
  联合文件系统 (Union File System)
  Linux 虚拟网络支持:本地和容器内创建虚拟接口

1、命名空间 (Namespaces):实现了容器间资源的隔离

  每个容器拥有自己独立的命名空间 , 运行其中的应用就像是运行在独立的操作系统中一样 , 我们都可以看到文件系统,网卡等资源;保证了容器之间互不影响;

  namesaces管理进程号 , 每个进程命名空间有一套自己的进程号管理方法 , 进程命名空间是一个父子关系的结构 , 子空间中的进程对于父空间是可见的

  网络命名空间------有了 PID 命名空间 , 那么每个名字中的进程就可以相互隔离 , 但是 , 网络端口还是共享本地的端口 . 网络命名空间就是为进程提供一个完全独立的网络协议栈的视图包括:网络设备接口 ,IPv4 和 IPv6 协议栈 ,IP 路由表 , 防火墙规则 ,sockets 等等 ...

  目前容器所使用的命名空间提供5种不同的类型:

2、控制组功能 cgroups

  控制组 (Control groups)---CGroups 是 Linux 内核的一个特性 ,主要用来对共享资源进行隔离、限制、审计等 。cgroups 允许对于进程或进程组公平 ( 不公平 ) 的分配 CPU 时间、内存分配和 I/O 带宽。

  容器通过 cgroups 来得到所能够管理资源的分配和使用。因此容器所获得资源仅为所有系统资源的一个部分

  资源限制:内存子系统为进程组设置内存使用上限,内存达到上限后再申请内存,就会发出 Out of Memory

  优先级:通过优先级让一些组得到更多 CPU 等资源

  资源审计:用来统计系统上实际把多少资源用到适合的目的上 , 可以使用 cpuacct 子系统记录某个进程组使用的 CPU 时间

  隔离:为组隔离名字空间 , 这样一个组不会看到其他组的进程,网络连接和文件系统

  控制:挂起、恢复和启动等操作

3、联合文件系统 (Union FS)

  docker 中使用AUFS(another Union File System 或 v2 版本以后的Advanced multi-layered Unification File System) 控制为每一个成员目录设定只读 / 读写 / 写出权限 , 同时 AUFS 有一个类似分层的概念 , 对只读权限的分支可以逻辑上进行增量的修改

  轻量级的高性能分层文件系统 , 它支持将文件系统中的修改信息作为一次提交 , 并层层叠加 , 并且可以将不同目录挂载到同一个虚拟文件系统下docker 目前支持的联合文件系统包括AUFS/btrfs/vfs/DeviceMappe

Docker镜像的仓库及底层依赖的核心技术(3)的更多相关文章

  1. docker镜像的仓库

    一.docker镜像的仓库 --- repos-registry的创建: 仓库分为公共仓库和私有仓库 DockerHub的官方仓库 https://hub.docker.com DockerPool社 ...

  2. 04_Docker入门(下)之docker镜像和仓库的使用

    docker镜像和仓库 镜像介绍 docker镜像是由文件系统叠加而成的.最低端是一个引导文件系统,即bootfs.当一个容器启动后,它会将被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存以 ...

  3. Docker之- 使用Docker 镜像和仓库

    目录 使用Docker 镜像和仓库 什么是 Docker 镜像 列出 Docker 镜像 tag 标签 Docker Hub 拉取镜像 查找镜像 构建镜像 创建Docker Hub 账号 使用 Doc ...

  4. 第四章 使用Docker镜像和仓库(二)

    第四章 使用Docker镜像和仓库(二) 回顾: 开始学习之前,我先pull下来ubuntu和fedora镜像 [#9#cloudsoar@cloudsoar-virtual-machine ~]$s ...

  5. 第四章 使用Docker镜像和仓库

    第4章 使用Docker镜像和仓库 回顾: 回顾如何使用 docker run 创建最基本的容器 $sudo docker run -i -t --name another_container_mum ...

  6. Docker镜像与仓库(一)

    Docker镜像与仓库(一) Docker镜像与仓库(一) 如何查找镜像? Docker Hub https://registry.hub.docker.com docker search [OPTI ...

  7. 《第一本docker书》第4章 使用docker镜像和仓库 读书笔记

    docker最底端是一个引导文件系统,即bootfs. 第二层是root文件系统rootfs,位于引导文件系统之上. 在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并 ...

  8. docker镜像与仓库

    1.docker image 镜像 容器的基石 层叠的只读文件系统 联合加载(union mount)   2.镜像存储地址 /var/lib/docker 3.镜像操作 列出镜像 镜像标签和仓库 查 ...

  9. Docker镜像与仓库(二)Dockerfile

    Docker镜像文件与仓库(二) Docker镜像文件与仓库(二) Dockerfile指令 Dockerfile格式: 1.#Comment注释2.INSTRUCTION大写的指令名 argumen ...

随机推荐

  1. [Fundamental of Power Electronics]-PART I-5.不连续导电模式-5.2 变比M分析

    5.2 变比M分析 经过一些改进,第二章中的用于CCM稳态分析的相同技术和近似方法可以应用于DCM. (a)电感伏秒平衡.电感电压直流分量必须为0: \[<v_{L}>=\frac{1}{ ...

  2. sql注入之超详细sqlmap使用攻略

    0x00 前言 干过sql注入的小伙伴们一定听说过sqlmap的大名,但是面对一些特殊情况,sqlmap也不一定"好使",这里的"好使"并不是真正不好使的意思, ...

  3. Spring Boot 实现配置文件加解密原理

    Spring Boot 配置文件加解密原理就这么简单 背景 接上文<失踪人口回归,mybatis-plus 3.3.2 发布>[1] ,提供了一个非常实用的功能 「数据安全保护」 功能,不 ...

  4. 一键生成dotnet5项目解决方案

    > 作为一名从2002年.Net 1.0一路走来的老码农,也持续跟进了dotnet core 1.0~3.1的变革,并不离不弃的玩起了dotnet 5. 每次接到新项目,都要从头搭建项目解决方案 ...

  5. 铁人三项(第五赛区)_2018_seven

    铁人三项(第五赛区)_2018_seven 先来看看保护 保护全开,IDA分析 首先申请了mmap两个随机地址的空间,一个为rwx,一个为rw 读入的都shellcode长度小于等于7,且这7个字符不 ...

  6. 阿里巴巴面试-Java后端-社招5面技术总结(Offer已拿)

    最近接到阿里妈妈的面试通知,历经一个月,虽然过程挺坎坷,但总算是拿到了offer.这里简单记录下面试所遇问题,仅供各位大佬参考. 由于前面两面的时间过去的有点久了,只能根据记忆大概写些记得问题. 部门 ...

  7. Day12 _63_获取当前线程对象

    给线程起名 * 1. Thread.currentThread(); 可以获取到当前线程对象,出现在哪就是获取哪个线程. * 2. thread.setName(); 给该线程起名字 * 3. thr ...

  8. Java | 使用OpenFeign管理多个第三方服务调用

    背景 最近开发了一个统一调度类的项目,需要依赖多个第三方服务,这些服务都提供了HTTP接口供我调用. 服务多.接口多,如何进行第三方服务管理和调用就成了问题. 常用的服务间调用往往采用zk.Eurek ...

  9. 网关Ocelot功能演示完结,久等了~~~

    前言 关于网关(Ocelot)的分享,还遗留一些功能没演示呢,接着来聊聊:这次重点针对网关Ocelot使用缓存.集成Polly做服务治理.集成IdentityServer4做认证授权来详细说说:如果对 ...

  10. 2- 计算机的组成以及VMware使用

    计算机的组成: 硬件: 处理器(CPU):I3 I5 I7 运行内存RAM(存储数据) 容量(字节为单位) 主板(总线设备) 输入输出设备(显示屏,键盘,鼠标,触目屏) 外部存储设备(硬盘,U盘,TF ...