🎬慕斯主页:修仙—别有洞天
♈️今日夜电波:秒針を噛む—ずっと真夜中でいいのに。
0:34━━━━━━️💟──────── 4:20
🔄 ◀️ ⏸ ▶️ ☰
💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍
目录
首先理解几个概念
Docker镜像仓库(Registry)是什么?
镜像仓库分类?
镜像仓库工作机制?
常用的镜像仓库命令
1. 登录镜像仓库
2. 登出镜像仓库
3. 拉取镜像
4. 推送镜像
5. 搜索镜像
注意事项
常见的镜像命令
1. docker images
2. docker image inspect
3. docker tag
常见容器命令
1. docker run
2. docker ps
首先理解几个概念
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!
给个三连再走嘛~