【10.0】Docker之私有仓库

发布时间 2023-08-29 15:57:41作者: Chimengmeng

【一】创建私有仓库

【1】注册docker账号

  • 按照步骤注册即可

【2】登陆Docker账号

【3】查看仓库

【4】创建仓库

  • 点击 右上角 Create Repositories

  • Repository Name
    • 仓库名称
  • Short description
    • 简要介绍

  • 创建成功
    • 右上角显示有仓库链接

【二】上传镜像到官方仓库

  • 第一步:远程创建仓库
  • 第二步:给镜像打标签
docker tag 08e6xxx dreammengya/cnetos_vim:v1
  • 第三步:登录到远程仓库
docker login
用户名:不是邮箱
密码:比较复杂
  • 第四步:提交
docker push dreammengya/cnetos_vim:v1
  • 第五步:他人下载
docker pull dreammengya/cnetos_vim:v1

【三】镜像分层

【1】镜像分层介绍

  • 每一个Dockerfile命令都会构建一层镜像(本质上是每一层都会启动一个容器,执行完命令后,将容器进行提交,通过查看下载下来的镜像,发现历史层信息的层ID是missing,其实是因为原本的层ID只存在于构建镜像的宿主机上,一旦转移镜像后,历史层消息中将只保留最新一层的ID)
  • 每当在Dockerfile中执行一个命令时,Docker会在构建过程中创建一个新的镜像层。这意味着每个命令都会在前一个镜像层的基础上进行修改,并生成一个新的层。
  • 通过这种方式,Docker可以将容器的状态转化为一个不可变的镜像,从而方便管理和分发。
FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl
RUN apt-get install -y git
CMD ["echo", "Hello, Docker!"]
  • 上述Dockerfile中的每个RUN命令都会导致创建一个新的镜像层。
  • 首先,基于ubuntu:latest镜像构建了一个初始镜像层。
  • 然后,执行apt-get update和apt-get install命令后,会生成一个包含这些更改的新的镜像层。
  • 接着,执行apt-get install git命令后,又会生成另一个包含这一更改的新镜像层。最终,在CMD命令之前会再生成一个新的镜像层。
  • 这样,整个构建过程中就会生成四个镜像层。
  • 可以使用docker history命令来查看一个镜像的分层情况,例如:
docker history dreammengya/cnetos_vim:v1

【2】镜像分层的好处

  • 镜像分层的好处

    • 构建块

    • 分发方便

    • 如果本地已经存在某一层,那么这一层就不需要下载了

  • 构建块

    • 镜像分层使得每个命令都成为构建过程中的一个独立的构建块。
    • 这样,可以对镜像进行可重复、可组合的构建,简化了镜像的管理和维护。
  • 分发方便

    • 由于Docker镜像是由一系列分层组成的,当某个镜像层已经存在于本地时,Docker引擎将不需要重新下载该层,从而加快了镜像的分发速度。
  • 可缓存

    • Docker具有镜像的缓存机制。
    • 当构建一个镜像时,Docker可以利用已经存在的镜像层来加速构建过程。
    • 只有那些被修改的层才需要重新构建,其余的层可以直接使用已经存在的。
    • 这在构建大型镜像或者多个相似镜像时特别有用。

【3】Dockerfile 写命令,建议多条命令合为一条

  • 对于Dockerfile中的命令写法,推荐将多条命令合并为一条,以提高构建效率和镜像的可维护性。
  • 例如,将多个pip安装命令合并为一条命令:
RUN python -m pip install --upgrade pip &&\
	python -m pip install --upgrade setuptools &&\
	pip install -r requirements.txt 

【四】私有仓库搭建

【1】自己搭建私有仓库

【2】registry搭建步骤

(1)拉取镜像

  • 首先,我们需要拉取 registry 镜像,该镜像用于搭建私有仓库。
shelldocker pull registry

(2)运行容器

  • 接下来,我们需要运行一个容器来启动私有仓库的服务。
shelldocker run -di --name=registry -p 5000:5000 registry

(3)检查私有仓库状态

  • 打开浏览器,输入地址 http://<private-ip>:5000/v2/_catalog 来检查私有仓库的状态。
    • 如果看到 {"repositories":[]},表示私有仓库搭建成功并且内容为空。
  • 备注:<private-ip> 是你私有仓库所在服务器的私有 IP 地址。

(4)修改 Docker 配置文件

  • 为了能够访问私有仓库,我们需要修改 Docker 的配置文件。使用以下命令打开配置文件:
shellvi /etc/docker/daemon.json
  • 在打开的配置文件中添加以下内容:
ini{
	"insecure-registries":["<private-ip>:5000"]
}
  • 保存并退出配置文件。

(5)重启 Docker

  • 为了使配置生效,我们需要重启 Docker 服务。
shellsystemctl restart docker
  • 接着,重新启动 registry 容器。
shelldocker start registry

(6)将镜像标记为私有仓库的镜像

  • 现在,我们可以将一个已有的镜像标记为私有仓库的镜像。使用以下命令:
shelldocker tag <镜像名字/id> <private-ip>:5000/<仓库名>:<标签名>
  • 例如:
shelldocker tag nginx <private-ip>:5000/my-nginx:v1

(7)提交到私有仓库

  • 将镜像提交到私有仓库,使用以下命令:
shelldocker push <private-ip>:5000/<仓库名>:<标签名>
  • 例如:
shelldocker push <private-ip>:5000/my-nginx:v1

(8)拉取私有仓库的镜像

  • 其他人只要设置了私有仓库,就可以直接拉取镜像。
shelldocker pull <private-ip>:5000/<仓库名>:<标签名>
  • 例如:
shelldocker pull <private-ip>:5000/my-nginx:v1
  • 这样,就完成了私有仓库的搭建和使用。
  • 需要注意的是,私有仓库搭建中涉及到的 <private-ip> 应该是私有仓库所在服务器的私有 IP 地址。根据实际情况进行替换。
    server {
        listen       5001;
        server_name  registry;

        location / {
            proxy_pass  http://127.0.0.1:5000/;
        }
    }