Docker
- ⛅Docker-Registry
-
- 🌠分类
- 🌠镜像仓库工作机制
- 🌠常用的镜像仓库
- 🌠镜像仓库命令
-
- [☃️docker login](#☃️docker login)
- [☃️docker pull](#☃️docker pull)
- [☃️docker push](#☃️docker push)
- [☃️docker search](#☃️docker search)
- [☃️docker logout](#☃️docker logout)
- 🌠镜像命令[部分]
-
- [☃️docker images](#☃️docker images)
- [☃️docker image inspect](#☃️docker image inspect)
- [☃️docker tag](#☃️docker tag)
- 🌠容器命令[部分]
-
- [☃️docker run](#☃️docker run)
- [☃️docker ps](#☃️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
- 认证能力: 提供用户注册,登录、登出能力
- 索引: 提供镜像的索引信息,方便检索
🌠分类
- 根据是否对外开放进行划分
- 公有仓库: 像阿里云、
dockerhub
等放到公有网络上, 不用登录就可以下载镜像, 供大家访问使用 - 私有仓库: 不对外开放,往往位于私有网络, 只有公司内部人员可以使用
- 公有仓库: 像阿里云、
- 根据供应商和面向群体划分
- sponsor(赞助)registry: 第三方的 registry, 供客户和 docker 社区版使用
- mirror(镜像)registry: 第三方的 registry, 只允许客户使用, 例如阿里云必须注册才能使用
- vendor(供应商)registry: 由发布 docker 镜像的供应商提供的 registry, 例如像 Google 和 Redhat 提供了镜像仓库服务
- private(私有)registry:通过没有防火墙和额外的安全层的私有实体提供的 registry, 仅供内部使用
🌠镜像仓库工作机制
🍂镜像仓库使用流程
- 通过 docker login 登录仓库
- Docker pull 拉取需要的镜像
- 通过 dockerfile 或者 commit 等方式制作完镜像通过 docker push 上传到仓库
🍂实际研发中镜像仓库的使用
Docker Registry 中的镜像通常由开发人员制作, 而后推送至公共 或私有 Registry 上保存, 供其他人员使用, 例如部署到生产环境
- 名词解释
- 开发环境: 开发人员使用的一套环境
- 测试环境: 需求开发完成后, 发布到供测试人员进行测试的环境
- 预发布环境: 版本测试完成后, 发布到和生产类似的环境, 提前模拟生产发布
- 生产环境: 真正面向客户的环境
🍂镜像仓库的拉取机制
启动容器时, docker daemon 会试图从本地获取相关的镜像
本地镜像不存在时, 将从 Registry 中下载该镜像并保存到本地
🌠常用的镜像仓库
- DockerHub
- 国内镜像源
- 私有仓库
- 常见的私有仓库工具
- Harbor
- Nexus
- Docker registry
- 常见的私有仓库工具
🌠镜像仓库命令
command | alias | function |
---|---|---|
docker login | 登录仓库 | |
docker pull | docker image pull | 拉取镜像 |
docker push | docker image push | 推送镜像 |
docker search | 查找镜像 | |
docker logout | 登出仓库 |
☃️docker login
🍂功能
登录到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
🍂语法
docker login [OPTIONS] [SERVER]
- OPTIONS
-
-u
: 登录的用户名 -
-p
: 登录的密码登录 Docker Hub 镜像仓库
docker login -u root -p 123
-
☃️docker pull
🍂功能
从镜像仓库中拉取或者更新指定镜像
🍂语法
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
🍂别名
docker image pull
- OPTIONS
-
-a
: 拉取所有 tagged 镜像 -
--disable-content-trust
: 忽略镜像的校验, 默认开启拉取 nginx:1.23.3 镜像
docker pull nginx:1.23.3
-
☃️docker push
🍂功能
将本地的镜像上传到镜像仓库, 要先登录到镜像仓库
🍂语法
docker push [OPTIONS] NAME[:TAG]
🍂别名
docker image push
- OPTIONS
-
-a
: 推送所有 tagged 镜像 -
--disable-content-trust
: 忽略镜像的校验, 默认开启推送 myapache:v1 镜像
docker push myapache:v1
-
☃️docker search
🍂功能
从 Docker Hub 查找镜像
🍂语法
docker search [OPTIONS] TERM
- OPTIONS
-
--no-trunc
: 显示完整的镜像描述 -
-f <过滤条件>
: 列出收藏数不小于指定值的镜像从 Docker Hub 查找所有镜像名包含 nginx,并且 star 数大于等于 10 的镜像
docker search -f stars=10 nginx
-
☃️docker logout
🍂功能
登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
🍂语法
docker logout [SERVER]
# 登出 Docker Hub 仓库
docker logout
🌠镜像命令[部分]
☃️docker images
🍂功能
列出本地镜像
🍂语法
docker images [OPTIONS] [REPOSITORY[:TAG]]
🍂别名
docker image ls, docker image list
- OPTIONS
-
-a
: 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层) -
--digests
: 显示镜像的摘要信息 -
-f
: 显示满足条件的镜像 -
--forma
: 指定返回值的模板文件 -
--no-trunc
: 显示完整的镜像信息 -
-q
: 只显示镜像 ID列出本地全部镜像
docker images
列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表
docker images ubuntu
-
☃️docker image inspect
🍂功能
查看镜像详细信息
🍂语法
docker image inspect [OPTIONS] IMAGE [IMAGE...]
# 查看镜像详细信息
docker images inspect nginx:1.23.3
☃️docker tag
🍂功能
标记本地镜像,将其归入某一仓库
🍂语法
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
🍂别名
docker image tag
# 给 ubuntu:22.04 这个镜像打上一个新的标签 myregistry.com/myubuntu:22.04
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04
🌠容器命令[部分]
☃️docker run
🍂功能
创建一个新的容器并运行一个命令
🍂语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
🍂别名
docker container run
- OPTIONS
-
-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 run -p 80:80 -v /data:/data -d nginx:latest
-
☃️docker ps
🍂功能
列出容器
🍂语法
docker ps [OPTIONS]
🍂别名
docker container ls, docker container list, docker container ps
- OPTIONS
-
-a
: 显示所有的容器,包括未运行的 -
-f
: 根据条件过滤显示的内容 -
--format
: 指定返回值的模板文件。如json
或者table
-
-l
: 显示 latest 的容器 -
-n
: 列出最近创建的 n 个容器 -
--no-trunc
: 不截断输出 -
-h "mars"
: 指定容器的hostname
-
-q
: 静默模式,只显示容器编号 -
-s
: 显示总的文件大小显示所有容器
docker ps -a
-