仓库(Repository)是集中存放镜像的地方,又分公共仓库和私有仓库。

一个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像。例如对于仓库地址 private-docker. com/ubuntu 来说,private-docker.com 是注册服务器地址,ubuntu 是仓库名。

登录/登出仓库

首先,需要在 https://hub.docker.com 免费注册一个 Docker 账号。

通过执行 docker login 命令交互式的输入用户名及密码来完成在命令行界面登录 Docker Hub。
你可以通过 docker logout 退出登录。执行完登录成功后,会在本地 ~/.docker/config.json 中存储用户的认证信息。

search查找仓库

通过 docker search 命令来查找官方仓库中的镜像。

根据是否为官方提供,可以将镜像资源分为根镜像(官方镜像,仅适用单个单词作为名称)和 docker 用户镜像(由 docker 用户创建并维护,带有用户前缀的镜像)。

  1. > docker search centos --filter=stars=10 # 仅显示收藏数量为 10 以上的镜像

image.png

用户可以通过 docker pulldocker push 来拉取和上传镜像,具体操作在镜像章节已详解,这里不再赘述。

自动创建

自动创建(Automated Builds)是 Docker Hub 提供的自动化服务,这一功能可以自动跟随项目代码的变更而重新构建镜像。目前支持 GitHubBitBucket 网站上的项目,当项目发生新的提交,则自动执行创建。

要配置自动创建,包括如下的步骤:

  1. 登录 Docker Hub;
  2. 在 Docker Hub 点击右上角头像,在账号设置(Account Settings)中关联(Linked Accounts)目标网站;
  3. 在 Docker Hub 中新建或选择已有的仓库,在 Builds 选项卡中选择 Configure Automated Builds
  4. 选取一个目标网站中的项目(需要含 Dockerfile)和分支;
  5. 指定 Dockerfile 的位置,并保存。

之后,可以在 Docker Hub 的仓库页面的 Timeline 选项卡中查看每次构建的状态。

第三方镜像市场

国内不少云服务商都提供了 Docker 镜像市场,包括腾讯云、网易云、阿里云等。这里以网易云为例,需要先注册账号登录。

查看镜像
访问 https://c.163yun.com/hub,可以搜索已存在的仓库和存储的镜像,包括 Ubuntu、Java、Mongo、MySQL、Nginx 等热门仓库和镜像。

下载镜像
下载镜像也是使用 docker pull 命令,但是要在镜像名称前添加注册服务器的具体地址。格式为example.com/<namespace>/<repository>:<tag>

例如,要下载 Docker 官方仓库中的 node:latest 镜像,可以使用如下命令:

  1. > docker pull hub.c.163.com/library/node:latest
  2. > docker tag hub.c.163.com/library/node:latest node:latest # 更新镜像标签,与官方一致,方便使用

正常情况下,镜像下载会比直接从 Docker Hub 下载快得多。
image.png

搭建私有仓库

通过官方提供的 registry 镜像来简单搭建一套本地私有仓库环境。

  1. # 自动从官方下载并启动一个registry容器,创建本地的私有仓库服务
  2. > docker run -d -p 5000:5000 --name registry registry

image.png

默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。你可以通过 -v 参数来将镜像文件存放在本地的指定路径。例如下面的例子将上传的镜像放到本地的 /opt/data/registry 目录。

  1. > docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry

创建完私有仓库就可以通过 tag 标记一个镜像,并上传到私有仓库。这里我的虚拟机地址是127.0.0.1,所以私有仓库地址为 127.0.0.1:5000。然后上传镜像,删除本地镜像,再次下载,查看。

  1. # 先查看本地已有镜像
  2. > docker images
  3. # 给已有镜像打标
  4. > docker tag hello-world:latest 127.0.0.1:5000/hello-world:latest
  5. # 上传打标镜像
  6. > docker push 127.0.0.1:5000/hello-world:latest
  7. # 查看仓库中的镜像,这里可以看到 {"repositories":["hello-world"]},表明镜像已经被成功上传了
  8. > curl 127.0.0.1:5000/v2/_catalog
  9. # 删除已有镜像,再尝试从私有仓库中下载这个镜像
  10. > docker image rm 127.0.0.1:5000/hello-world:latest
  11. # 拉取私有仓库的hello-world镜像
  12. > docker pull 127.0.0.1:5000/hello-world:latest
  13. # 最后查看
  14. > docker images

image.png

如果你不想使用 127.0.0.1:5000 作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如 192.168.199.100:5000 这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。 这是因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制

Ubuntu 16.04+, Debian 8+, centos 7

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):

  1. {
  2. "registry-mirror": [
  3. "https://hub-mirror.c.163.com",
  4. "https://mirror.baidubce.com"
  5. ],
  6. "insecure-registries": [
  7. "192.168.199.100:5000"
  8. ]
  9. }

其他

对于 Docker Desktop for Windows 、 Docker Desktop for Mac 在设置中的 Docker Engine 中进行编辑 ,增加和上边一样的字符串即可。

to be continue…