🎬慕斯主页:修仙—别有洞天
♈️今日夜电波:秒針を噛む—ずっと真夜中でいいのに。
0:34━━━━━━️💟──────── 4:20
🔄 ◀️ ⏸ ▶️ ☰
💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍
目录
首先理解几个概念
Docker镜像仓库(Registry)是什么?
镜像仓库 (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 架构,可以结合此图来理解镜像仓库的概念:
镜像仓库分类?
Docker镜像仓库按照不同的分类标准可以划分为多种类型。以下是根据镜像仓库的公开性、供应商和面向群体等维度进行分类的详细介绍:
一、按是否对外公开分类
- 公有仓库:
- Docker Hub:最常用的公共仓库,包含了大量的官方和社区维护的镜像。用户可以通过Docker Hub获取这些镜像,并享受自动构建、团队协作等额外功能。Docker Hub的官网为https://hub.docker.com/。
- 阿里云仓库:在国内使用较为方便,提供了丰富的镜像资源和服务。
- 其他公有仓库:还有如Google、RedHat等供应商提供的镜像仓库服务,以及第三方赞助的registry等。
- 私有仓库:
- Registry私有仓库:Docker官方提供的工具,可以用于构建私有的镜像仓库。Registry分为v1版本和v2版本,v2版本使用Go语言编写,相对更加快速简洁。
- Harbor企业私有仓库:Harbor是VMware公司开源的企业级Docker Registry项目,它基于Docker Registry进行了更高级的封装,提供了图形管理UI、基于角色的访问控制(RBAC)、AD/LDAP集成以及审计日志等功能。
- 阿里云个人私有仓库:阿里云提供的个人私有仓库服务,用户可以在阿里云上创建和管理自己的私有镜像仓库。
二、按供应商和面向群体分类
- Sponsor Registry(赞助仓库):
- 这类仓库由第三方提供,供客户和Docker社区版使用。它们可能提供一些特定的服务或功能,以吸引用户。
- Mirror Registry(镜像仓库):
- 第三方提供的镜像仓库,但只让客户使用。例如,阿里云等云服务商提供的镜像仓库服务,用户需要注册才能使用。
- Vendor Registry(供应商仓库):
- 由发布Docker镜像的供应商提供的仓库。例如,Google、RedHat等公司在提供其软件或服务的同时,也提供了对应的Docker镜像仓库服务。
- Private Registry(私有仓库):
- 通过没有防火墙和额外安全层的私有实体提供的仓库,仅供内部使用。这类仓库通常由企业或组织自行搭建和管理,用于存储和管理自己的镜像资源。
镜像仓库工作机制?
- 镜像仓库使用流程
• 通过 docker login 登录仓库
• Docker pull 拉取需要的镜像
• 通过 dockerfile 或者 commit 等方式制作完镜像通过 docker push 上传到仓库 - 实际研发中镜像仓库如何使用
Docker Registry 中的镜像通常由开发人员制作,而后推送至“公共”或“私有”Registry 上
保存,供其他人员使用,例如“部署”到生产环境;
常用的镜像仓库命令
Docker的镜像仓库命令是Docker生态系统中的重要组成部分,它们允许用户与Docker镜像仓库进行交互,包括登录、登出、拉取镜像、推送镜像以及搜索镜像等。以下是对这些命令的详细介绍:
1. 登录镜像仓库
- 命令:
docker login [OPTIONS] [SERVER]
- 功能:登录到一个Docker镜像仓库。如果未指定镜像仓库地址,默认为官方仓库Docker Hub。
- 选项:
-u
:登陆的用户名-p
:登陆的密码(出于安全考虑,建议不要在命令行中直接包含密码)
- 示例:
docker login -u 用户名 -p 密码
(注意:出于安全考虑,实际使用时应避免直接在命令行中输入密码)
2. 登出镜像仓库
- 命令:
docker logout [OPTIONS] [SERVER]
- 功能:登出一个Docker镜像仓库。如果未指定镜像仓库地址,默认为官方仓库Docker Hub。
- 示例:
docker logout
3. 拉取镜像
- 命令:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
- 功能:从镜像仓库中拉取或者更新指定镜像。
- 选项:
-a
:拉取所有tagged镜像--disable-content-trust
:忽略镜像的校验,默认开启
- 示例:
docker pull ubuntu:18.04
:从Docker Hub下载ubuntu的18.04版本镜像docker pull -a java
:从Docker Hub下载REPOSITORY为java的所有镜像
如下我们在dockerhub拉取找到自己要拉取的镜像:
找到对应的Tags:
拉取对应的镜像即可,由于是国外的网站,因此我们可以更换国内镜像源增加下载速度(具体参考上篇博客),注意格式为NAME:Tags:
4. 推送镜像
- 命令:
docker push [OPTIONS] NAME[:TAG]
- 功能:将本地的镜像上传到镜像仓库,需要先登录到镜像仓库。
- 选项:
--disable-content-trust
:忽略镜像的校验,默认开启
- 示例:
docker push myapache:v1
:上传本地镜像myapache的v1版本到镜像仓库中
需要先创建好自己的镜像仓库,并且按照创建好的镜像仓库格式改好镜像源的格式才能进行推送:
5. 搜索镜像
- 命令:
docker search [OPTIONS] TERM
- 功能:从Docker Hub查找镜像。
- 选项:
--automated
:只列出automated build类型的镜像-f <过滤条件>
:基于给定条件过滤输出,例如-f stars=10
列出收藏数不小于10的镜像--no-trunc
:显示完整的镜像描述
- 示例:
docker search -f stars=10 java
:从Docker Hub查找所有镜像名包含java,并且收藏数大于10的镜像
注意事项
- 在使用这些命令时,请确保已经安装了Docker,并且Docker服务正在运行。
- 登录和推送镜像到私有仓库时,需要确保你有足够的权限。
- 镜像的TAG和DIGEST是镜像的唯一标识,用于区分不同版本的镜像。
- 在拉取和推送镜像时,Docker会检查镜像的完整性,确保镜像没有被篡改或损坏。这可以通过选项
--disable-content-trust
来忽略,但通常不推荐这样做。
常见的镜像命令
当然,下面是对您提到的Docker命令的详细解析:
1. docker images
命令作用:docker images
命令用于列出本地主机上所有可用的Docker镜像。这些镜像可以是您从Docker Hub或其他镜像仓库拉取下来的,也可以是您自己构建的。
命令格式:
docker images [OPTIONS] [REPOSITORY[:TAG]]
尽管该命令支持[OPTIONS]
和[REPOSITORY[:TAG]]
作为可选参数,但通常直接运行docker images
而不带任何参数就足以列出所有镜像。
常用选项:
-a
或--all
:显示所有镜像(包括中间层镜像)。默认情况下,docker images
只显示顶层镜像。--digests
:显示镜像的摘要信息。-f
或--filter
:根据提供的条件过滤镜像列表。--no-trunc
:不截断输出信息,显示完整的镜像信息。
示例:
docker images
这将列出所有顶层镜像的名称、标签、镜像ID、创建时间以及大小。
2. docker image inspect
命令作用:docker image inspect
命令用于显示一个或多个Docker镜像的详细信息,包括镜像的配置信息、层信息、元数据等。
命令格式:
docker image inspect [OPTIONS] IMAGE [IMAGE...]
您可以通过指定一个或多个镜像名称或ID来查看它们的详细信息。
常用选项:
--format
:使用Go模板格式化输出信息。这允许您以自定义的格式显示镜像的详细信息。--size
:显示镜像的大小信息。
示例:
docker image inspect nginx
这将返回nginx镜像的详细信息,包括其配置、层、架构等。
3. docker tag
命令作用:docker tag
命令用于给镜像添加一个新的标签(即,重命名镜像或为其指定一个新的版本)。这对于将镜像推送到Docker Hub或其他私有仓库时特别有用,因为您可以为镜像指定一个更具描述性的名称和标签。
命令格式:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
您需要将SOURCE_IMAGE[:TAG]
替换为源镜像的名称和标签(如果未指定标签,则默认为latest),将TARGET_IMAGE[:TAG]
替换为目标镜像的名称和标签。
示例:
docker tag nginx:1.21 mynginx:latest
这将为nginx镜像的1.21版本添加一个新的标签mynginx:latest
。现在,您可以使用这个新标签来引用这个镜像,就像它是一个全新的镜像一样。请注意,这实际上并没有创建镜像的新副本,而只是为现有镜像添加了一个额外的引用(即,标签)。
常见容器命令
1. docker run
• 功能 创建一个新的容器并运行一个命令
• 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
• 别名 docker container run
• 关键参数
○ -d: 后台运行容器,并返回容器 ID;
○ -i: 以交互模式运行容器,通常与 -t 同时使用;
○ -P: 随机端口映射,容器内部端口随机映射到主机的端口
○ -p: 指定端口映射,格式为: 主机(宿主)端口:容器端口
○ -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
○ --name="nginx-lb": 为容器指定一个名称;
○ -h "mars": 指定容器的 hostname;
○ -e username="ritchie": 设置环境变量;
○ --cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行;
○ -m :设置容器使用内存最大值;
○ --network="bridge": 指定容器的网络连接类型;
○ --link=[]: 添加链接到另一个容器;
○ --volume , -v: 绑定一个卷
○ --rm :shell 退出的时候自动删除容器
• 样例
#使用 docker 镜像 nginx:latest 以后台模式启动一个容器,并将容器命名为 mynginx。 docker run --name mynginx -d nginx:latest #使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主 机的 80 端口,主机的目录 /data 映射到容器的 /data。 docker run -p 80:80 -v /data:/data -d nginx:latest
我们使用docker在centos7的环境下启动了一个Ubuntu20.04的操作系统,通过使用-it选项以可以交互的终端方式进行启动:
2. docker ps
• 功能 列出容器
• 语法 docker ps [OPTIONS]
• 别名 docker container ls, docker container list, docker container ps
• 关键参数
○ -a :显示所有的容器,包括未运行的。
○ -f :根据条件过滤显示的内容。
○ --format :指定返回值的模板文件。如 json 或者 table
○ -l :显示 latest 的容器。
○ -n :列出最近创建的 n 个容器。
○ --no-trunc :不截断输出。
○ -q :静默模式,只显示容器编号。
○ -s :显示总的文件大小。
• 样例
docker ps -a
感谢你耐心的看到这里ღ( ´・ᴗ・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o!
给个三连再走嘛~