第四章-镜像仓库

概念和架构

镜像仓库(Docker Registry)负责存储、管理和分发镜像,并且提供了登录认证能力建立了仓库的索引。

镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含个或多个镜像,镜像通过镜像名称和标签(Tag)来区分。整体视图如下。

镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确定一个镜像仓库如 hub.docker.com

一个 Registry 中可以存在多个Repository·Repository可分为“顶层仓库”和“用户仓库”;用户仓库名称格式为“用户名/仓库名”每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像

Repository:由某特定的.docker 镜像的所有迭代版本组成的镜像仓库镜像名称 (name)+标签(tag):如 nginx:latest

认证能力:提供用户注册,登录、登出能力

索引:提供镜像的索引信息,方便检索

一个容器镜像包含了两个部分,一个是元数据,其实就是由 dockerfile 构建出来的描述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的checksum这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面就是在一个一个的 blob 里面,真正占有空间的就是这些 blob。

镜像仓库的分类和工作机制

按是否对外开放划分

按供应商和面向群体划分

仓库的使用

镜像仓库使用流程

仓库的拉取机制

启动容器时,docker daemon 会试图从本地获取相关的镜像。本地镜像不存在时,其将从 Registry 中下载该镜像并保存到本地。

常用的镜像仓库

docker hub

dockerhub是全球最大的镜像仓库,基本上可以说想要啥这里都有。

然后我们可以搜索自己想要的镜像。

然后有两种,一种是经过认证的镜像,一种是社区的镜像。一般建议使用经过认证的,比较靠谱。

镜像仓库命令

命令别名功能
docker login 登录仓库
docker pulldocker image pull拉取镜像
docker pushdocker image push推送仓库
docker serach 查找仓库
docekr logout 登出仓库

如何学习一个命令。

第一种办法。

第二种办法。

网站上的使用手册。

docker login

登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub。

在此之前,我们要在docker官网上先注册一个账号。

docker pull

从镜像仓库中拉取或者更新指定镜像。

当然用这个id也可以下载。

这样即可。

docker push

把本地的镜像推到镜像仓库中去。

其实这些概念的理解和Git很相像。

我们上一小节已经下载了一个仓库,能否直接push呢?

我们肯定是没有这个权限的,我们怎么能向nginx这个组织推我们自己的仓库呢?

我们可以推到我们自己的仓库里面去。

其实和Github是一个道理。

先创建一个仓库。

但是,我们还要改我们本地那个镜像的tag,不能用别人的那个叫nginx的了。

这样就推送完成了。

这样我们远程就能看到了。

从docker hub中查找想要的镜像。

找到了很多和nginx有关系的。

工作中一般不在这里找,肯定上官网方便,直接搜,搜到合适的直接pull就行了。

docker logout

镜像相关命令(部分)

因为后面学习我们要暂时用到一些镜像相关的命令,所以这里先学一点。

后面我们还会详细学习镜像相关的命令。

docker images

列出本地镜像。

一些别名。

一些参数。

这里是一些例子。

具体用法可以看文档。

与此同时,docker的命令可以和shell命令结合使用。

docker image inspect

查看一个镜像的详情。

用id也是可以的。

docker tag

标记本地镜像,将其归入某一仓库。

Nginx了解

一种web服务器。

Centos7安装Nginx

检查系统上是否有Nginx

经过检查,是没有的。如果有,就可以先选择卸载nginx,再进行重新安装。

卸载Nginx

如果是通过yum源安装的,那些在很简单,直接yum remove nginx即可。

安装Nginx

centos 配置 nginx 源

配置一下缓存,加速下载

下载nginx

下载完成

启动nginx

Nginx在机器上的默认配置

还有这个default.conf里面有很多重要的信息。

我们可以进这个目录看一下。

容器相关命令(部分)

因为后面学习我们要暂时用到一些容器相关的命令,所以这里先学一点。

后面我们还会详细学习容器相关的命令。

docker run

创建一个新的容器并运行一个命令。

重要参数

我们想在这个机器上,使用一个centos7容器来运行这个docker run。

所以先在dockerhub上面下载一个centos7。

如果docker run不带任何参数,会发现啥现象都没有的。

因为你没有给命令过去和这个容器交互。

docker ps可以查看所有正在运行的容器。

docker ps -a可以查看所有创建过的容器。

这里面我们可以看到,我们这个容器是被创建了的,但是退出了。

所以不带参数的docker run不带参数,默认运行/bin/bash

-d参数

后台运行容器,并返回容器 ID。

如果在后台运行,我们按^c是不会停掉的。

-t, -i, -it参数

-t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

-i : 以交互模式运行容器,通常与 -t 同时使用;

-P, -p参数

先看一下这个命令。

这个意思就是,启动一个nginx容器!-p表示映射端口。

80:80表示宿主机的80端口映射到nginx容器的80端口上。

报错了:端口被占用,这是为什么?

是因为我们宿主机已经启动了一个nginx了。

所以我们不要使用宿主机的80端口了,我们使用8081端口。

-P就会随机分配一个端口给我们。

使用-p会多一些。

--name参数和-h参数

此时的名字就不是乱来的了。

如果我们不指定宿主机名字,hostname是随机的。

添加环境变量。

--cpuset-cpus和-m参数

添加链接到另一个容器。

--rm

如果这个容器退出了,自动清理。

docker ps

列出容器。

别名。

参数。