【10.0】Docker之私有仓库
【一】创建私有仓库
【1】注册docker账号
- docker 官网
- Docker: Accelerated Container Application Development
- 按照步骤注册即可
【2】登陆Docker账号
【3】查看仓库
- 点击上方的 Repositories
【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】自己搭建私有仓库
-
harbor:企业级私有仓库
- Harbor部署及使用_阿木690的博客-CSDN博客
-
registry:用docker搭建私有仓库
【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/;
}
}