Docker-镜像仓库

Docker

⛅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 中下载该镜像并保存到本地

🌠常用的镜像仓库

  1. DockerHub
  2. 国内镜像源
  3. 私有仓库
    • 常见的私有仓库工具
      • 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 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

相关推荐
萨格拉斯救世主3 分钟前
戴尔R930服务器增加 Intel X710-DA2双万兆光口含模块
运维·服务器
Jtti6 分钟前
Windows系统服务器怎么设置远程连接?详细步骤
运维·服务器·windows
yeyuningzi20 分钟前
Debian 12环境里部署nginx步骤记录
linux·运维·服务器
wclass-zhengge33 分钟前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇40 分钟前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
EasyCVR1 小时前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频
wowocpp2 小时前
ubuntu 22.04 硬件配置 查看 显卡
linux·运维·ubuntu
萨格拉斯救世主2 小时前
jenkins使用slave节点进行node打包报错问题处理
运维·jenkins
川石课堂软件测试3 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
pk_xz1234564 小时前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器