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

相关推荐
AOwhisky19 分钟前
Python 学习笔记(第十四期)——运维自动化(下·中篇):远程文件传输——paramiko进阶篇
运维·python·学习·云原生·自动化·文件传输·paramiko
做个文艺程序员23 分钟前
Linux第22篇:用Docker容器化你的Java SaaS应用:一次构建,随处运行
java·docker·容器
imc.111 小时前
linux基础IO
linux·运维·服务器
躺不平的理查德1 小时前
让Ubuntu 的第二块网卡 ens37 永久固定为 192.168.30.111
运维·服务器
bitbrowser1 小时前
Facebook 验证反复回到原页面,应该从哪里排查
运维·服务器·facebook
Land03292 小时前
AI网页元素变化无法自动修复?自带元素自愈的自动化解决方案
运维·人工智能·ai·自动化·rpa
fengyehongWorld2 小时前
Jenkins 安装与简单配置
运维·jenkins
云智慧AIOps社区2 小时前
2026 国产化 ITSM 替代指南:横向测评 ServiceNow、轻帆云、Jira等五款主流IT服务管理平台
运维·人工智能·运维开发·it服务管理·itsm平台
Urbano2 小时前
针织卫衣全流程生产工序科普:自动化替代、产能优化与设备选型实战方案
运维·自动化
梦梦代码精2 小时前
基于ThinkPHP6 + Vue3的家政预约系统全解析:从LBS定位到自动派单的完整实现
java·docker·开源·php·代码规范