【Docker基础】理解 Registry 镜像仓库:分类、工作机制、命令与实操

文章目录


一、什么是 Docker Registry

Docker Registry(镜像仓库) 是一个负责存储、管理和分发 Docker 镜像的系统。它的作用类似于代码的版本控制系统,只不过它管理的是 Docker 镜像而非代码文件。Docker Registry 提供了镜像的存储、检索、版本管理等功能,并且具备用户认证和索引功能。

Docker Registry 的主要功能:

  1. 存储和管理镜像

    • Docker Registry 可以存储多个镜像仓库(Repository)。每个仓库可以包含不同版本的镜像,这些镜像通过标签(Tag)区分。例如,nginx:latestnginx:v1.0 就是同一个仓库的两个不同版本的镜像。
  2. 镜像仓库(Repository)

    • Repository 是由某一特定 Docker 镜像的所有迭代版本组成的仓库。仓库通常由 Docker 镜像的名称和标签(Tag)组成。
    • 例如,nginx 是镜像的名称,latest 是标签。你可以通过 nginx:latest 来拉取最新版本的 Nginx 镜像。
  3. 认证功能

    • Docker Registry 提供了用户注册、登录和登出的功能。通过 Docker Registry,用户可以进行镜像的推送(push)和拉取(pull)操作。为了确保镜像的安全性和私密性,Registry 支持用户认证。
  4. 镜像索引

    • Docker Registry 维护一个索引,帮助用户搜索和检索镜像。当用户需要查找某个镜像时,Registry 提供了镜像的索引信息,帮助用户快速找到所需的镜像版本。

镜像的结构:

一个 Docker 容器镜像包含两个主要部分:

  • 元数据 :由 Dockerfile 构建出来的描述文件,这些描述文件记录了镜像的构建步骤、每一层的内容以及依赖等信息。
  • 层(Layers) :Docker 镜像是分层存储的,每一层表示镜像构建过程中的一次修改。每个镜像层是不可变的,可以复用,层与层之间通过 checksum(校验和)进行关联。这些层保存在 blob 中,这些 blob 才是占用实际存储空间的部分。

Docker Registry 的组成:

  1. 镜像仓库(Repository)

    • 一个 Registry 可以包含多个仓库,每个仓库负责存储同一类镜像的不同版本。
    • 仓库名称通常按"用户名/仓库名"的格式进行命名。例如,docker/hello-world 是 Docker 官方提供的一个简单示例镜像的仓库。
  2. 标签(Tag)

    • 每个仓库可以包含多个标签,用于区分同一镜像的不同版本。标签通常用于指示镜像的版本或构建状态,如 latestv1.0 等。
  3. 镜像名称(Image Name) + 标签(Tag)

    • Docker 镜像通过名称和标签来唯一标识。格式通常为 repository:tag。例如,nginx:latest 表示 nginx 镜像的最新版本。

使用例子:

  • 拉取镜像docker pull nginx:latest 从 Docker Hub 拉取最新版本的 nginx 镜像。
  • 推送镜像docker push myrepo/myimage:v1.0myimage 镜像推送到 myrepo 仓库。

Docker Hub:

  • Docker Hub 是最常用的公共 Docker Registry,提供了丰富的公共镜像供用户使用。用户可以从中拉取镜像,也可以将自己的镜像推送到 Docker Hub 进行共享。

二、镜像仓库分类

按是否对外开放划分(研发人员常说的):

  1. 公有仓库

    • 公有仓库是指放置在公有网络上的镜像仓库,用户无需登录即可下载镜像。
    • 例如,Docker Hub阿里云镜像仓库,它们允许任何人公开访问镜像,供全球用户使用。
    • 公有仓库通常提供常用的操作系统镜像和开发工具镜像,支持快速获取、共享和分发。
  2. 私有仓库

    • 私有仓库是指只对特定用户或团队开放的镜像仓库,通常用于存储企业或个人专有的镜像。
    • 私有仓库一般部署在企业内部网络中,未经授权的用户无法访问,确保镜像的安全性。
    • 适用于企业内部的应用部署和开发场景,避免将敏感或专有的数据暴露给外部。

按供应商和面向群体划分:

  1. Sponsor(赞助)Registry

    • 这种类型的 Registry 由第三方提供,目的是为了支持 Docker 社区版用户和客户使用。
    • 它们通常作为 Docker 镜像的公共存储位置,用户可以通过 Docker 客户端进行镜像的拉取(pull)和推送(push)。
    • 例如,Docker Hub 就是一个典型的赞助型 Registry,Docker 官方会为其提供支持,并且允许社区用户免费使用。
  2. Mirror(镜像)Registry

    • 镜像 Registry 是由第三方提供的 Registry,通常仅供特定客户或团队使用。
    • 这些 Registry 提供镜像的副本(镜像源)供客户使用,可以降低网络延迟,提高下载速度。
    • 例如,阿里云镜像仓库提供的服务需要注册账号,并且为中国用户提供更快的镜像下载速度,特别适合有特殊需求的客户。
  3. Vendor(供应商)Registry

    • 供应商 Registry 由镜像的发布方或供应商提供,用于存储和分发他们的官方镜像。
    • 例如,GoogleRedHat 提供的镜像仓库服务,它们会将其自家维护的镜像(如操作系统、数据库等)存放在这些仓库中。
    • 这些仓库通常会提供经过认证和优化的镜像,确保企业和开发者可以获得高质量、稳定的镜像版本。
  4. Private Registry

    • 私有 Registry 是指由企业或组织自己搭建和维护的镜像仓库,通常部署在内网或专用的服务器上。
    • 它们通常没有防火墙和额外的安全层,所有的镜像存储和传输都局限于内部使用。
    • 适用于内部应用部署和开发流程中,避免外部访问并确保镜像的安全性。常用于敏感或专有的镜像存储。

三、镜像仓库工作机制

  1. 镜像仓库使用流程

    • 登录仓库 :首先,通过 docker login 命令登录到目标镜像仓库。此步骤确保用户能够执行推送和拉取镜像的操作,通常需要提供用户名和密码。
    • 拉取镜像 :使用 docker pull 命令从镜像仓库拉取需要的镜像到本地。这个命令会从镜像仓库中下载镜像,并存储在本地的 Docker 主机上,以便后续使用。
    • 上传镜像 :开发人员可以通过 dockerfilecommit 等方式构建镜像,并使用 docker push 将完成的镜像上传至镜像仓库中。上传后,镜像可以供其他人或团队使用。
  2. 实际开发中如何使用镜像仓库

    在开发过程中,镜像通常由开发人员在本地构建或修改,随后将其推送到 "公共""私有"Registry 中保存。这些镜像可以供其他开发人员或团队使用,例如用于将应用部署到不同的环境中。

    镜像仓库为整个开发、测试、预发布、生产等流程提供了镜像的管理与存储,确保团队成员能够共享与复用镜像。镜像仓库的使用场景可以涵盖从开发到生产的整个生命周期。

    名词解释

    • 开发环境:开发人员用于编写和调试应用程序的环境。在该环境中,代码的功能和性能通常会进行初步验证。
    • 测试环境:开发完成后,应用被发布到测试环境供测试人员进行功能、性能等方面的验证,确保应用无重大问题。
    • 预发布环境:该环境模拟生产环境,用来进行最终测试,确保应用在接近生产环境的环境下能正常运行。
    • 生产环境:应用部署并面向终端用户的环境。它是真正的线上环境,需要高度可靠与稳定。
  3. 镜像仓库的拉取机制

    当启动一个 Docker 容器时,Docker 引擎(docker daemon)会首先检查本地是否已有需要的镜像。如果该镜像已经存在于本地,它会直接使用本地的镜像来启动容器。

    如果本地没有找到所需的镜像,Docker 引擎会从远程的镜像仓库(Registry)中拉取该镜像。在拉取过程中,Docker 会从指定的镜像仓库下载最新的镜像版本,并将其保存在本地。在本地成功下载并保存镜像后,后续启动容器时将直接使用本地镜像,避免重复下载。

这种拉取机制确保了容器能够快速启动,且镜像的下载和存储过程是透明且自动化的,大大提高了部署和管理效率。


四、常用的镜像仓库

1. DockerHub

Docker Hub 是 Docker 提供的官方托管存储库服务,用于查找、存储和共享容器镜像。其主要特点包括:

  • 私有仓库:个人用户可以创建自己的私有仓库,发布并管理自己的镜像。
  • 镜像检索:提供镜像检索功能,方便用户查找所需的镜像。
  • 丰富的镜像资源:包含官方镜像和认证组织提供的镜像,涵盖各种应用场景。
  • 自动构建:支持从 GitHub 或 Bitbucket 自动构建容器镜像,并将它们推送到 Docker Hub。
  • Webhook 支持:Webhook 是基于 HTTP 的回调机制,当某个事件发生时,服务器会将相关信息推送到预设的 URL。

2. 国内镜像源

由于从 Docker Hub 拉取镜像时可能会遇到网络延迟或不稳定问题,国内用户可以通过配置镜像加速器来加速镜像的下载。以下是常见的国内镜像加速器:

  • 阿里云加速器:阿里云提供了官方的镜像加速服务。用户可以登录阿里云控制台,获取加速器地址。
  • 网易云加速器 :加速器地址为 https://hub-mirror.c.163.com
  • 百度云加速器 :加速器地址为 https://mirror.baidubce.com

配置镜像加速器

要配置镜像加速器,可以编辑 /etc/docker/daemon.json 文件(如果文件不存在,可以手动创建),添加以下内容:

json 复制代码
{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

重新加载配置并重启 Docker

配置完成后,需要重新加载 Docker 配置并重启 Docker 服务,执行以下命令:

bash 复制代码
# 加载配置
sudo systemctl daemon-reload

# 重启 Docker 服务
sudo systemctl restart docker

# 查看 Docker 服务状态
sudo systemctl status docker

3. 私有化仓库

私有镜像仓库是部署在公司或组织内部的仓库,用于存储和分发公司自己构建的 Docker 镜像。私有仓库可以有效保证镜像的安全性和隐私性,并且通常在 CI/CD 流程中使用。

常见的私有化仓库工具

  1. Harbor

    • Harbor 是 VMware 公司开源的一款企业级 Docker Registry 项目,旨在帮助企业快速搭建和管理 Docker 镜像仓库。
    • 基于 Docker 官方的 Registry,Harbor 提供了以下企业级功能:
      • 管理 UI 界面。
      • 基于角色的访问控制(RBAC)。
      • 集成 Active Directory(AD)或 LDAP。
      • 审计日志功能。
      • 支持中文界面。
    • Harbor 组件基于 Docker 容器构建,通常通过 Docker Compose 部署。
  2. Nexus

    • Nexus 是由 Sonatype 公司发布的一款仓库管理工具,广泛用于 Maven 私服和 Docker 私服。
    • 它支持存储和管理 Docker 镜像,并且提供了丰富的仓库管理功能,适用于组织内部的镜像管理。
  3. Docker Registry

    • Docker 官方提供的私有仓库服务,功能与 Docker Hub 类似,但用于内部使用。
    • 用户可以搭建自己的私有 Registry 服务,确保镜像的私密性和安全性,尤其适用于需要控制镜像上传和拉取权限的企业。

五、镜像仓库相关命令

仓库命令

命令 别名 功能
docker login 登录仓库
docker pull docker image pull 拉取镜像
docker push docker image push 推送镜像
docker search 查找镜像
docker logout 登出仓

详细介绍

  1. docker login

    • 功能

      该命令用于登录到 Docker 镜像仓库(如 Docker Hub 或私有镜像仓库)。登录后,可以进行镜像的推送和拉取等操作。

    • 语法

    bash 复制代码
    docker login [OPTIONS] [SERVER]
    • 关键参数

      • -u, --username:指定用户名。
      • -p, --password:指定密码(不推荐在命令行中直接使用密码)。
      • --password-stdin:从标准输入读取密码(更安全的方式)。
      • SERVER:指定仓库地址,默认是 Docker Hub。
    • 样例

    bash 复制代码
    # 登录到 Docker Hub
    docker login -u myusername -p mypassword
    
    # 从标准输入读取密码
    echo "mypassword" | docker login -u myusername --password-stdin
    
    # 登录到指定的私有仓库
    docker login -u myusername -p mypassword myprivaterepo.com

  1. docker pull

    • 功能

      该命令用于从 Docker 镜像仓库(如 Docker Hub 或私有仓库)拉取镜像到本地。

    • 语法

    bash 复制代码
    docker pull [OPTIONS] IMAGE[:TAG]
    • 关键参数

      • IMAGE:指定要拉取的镜像名称。
      • TAG:指定镜像标签,默认为 latest
    • 样例

    bash 复制代码
    # 拉取 Docker Hub 上的官方 Ubuntu 镜像
    docker pull ubuntu
    
    # 拉取指定标签的镜像
    docker pull ubuntu:20.04
    
    # 拉取私有仓库中的镜像
    docker pull myprivaterepo.com/myimage:latest

  1. docker push

    • 功能

      该命令用于将本地镜像推送到 Docker 镜像仓库。

    • 语法

    bash 复制代码
    docker push [OPTIONS] IMAGE[:TAG]
    • 关键参数

      • IMAGE:指定要推送的镜像名称。
      • TAG:指定镜像标签。
    • 样例

    bash 复制代码
    # 推送本地的镜像到 Docker Hub
    docker push myusername/myimage:latest
    
    # 推送本地镜像到私有仓库
    docker push myprivaterepo.com/myimage:latest

  1. docker search

    • 功能

      该命令用于在 Docker Hub 或指定的镜像仓库中搜索镜像。

    • 语法

    bash 复制代码
    docker search [OPTIONS] TERM
    • 关键参数

      • TERM:搜索的关键字。
      • --filter-f:按特定条件过滤搜索结果,例如根据星级、是否官方镜像等。
      • --no-trunc:不截断搜索结果。
    • 样例

    bash 复制代码
    # 在 Docker Hub 搜索 Ubuntu 镜像
    docker search ubuntu
    
    # 搜索官方的镜像,并且只显示带星级评分的镜像
    docker search --filter "is-official=true" --filter "stars=10" ubuntu
    
    # 搜索镜像时不截断结果
    docker search --no-trunc mysql

  1. docker logout

    • 功能

      该命令用于从 Docker 镜像仓库登出。登出后,无法进行推送或拉取操作,除非重新登录。

    • 语法

    bash 复制代码
    docker logout [SERVER]
    • 关键参数

      • SERVER:指定要登出的仓库地址。如果没有指定,默认为 Docker Hub。
    • 样例

    bash 复制代码
    # 登出 Docker Hub
    docker logout
    
    # 登出指定的私有仓库
    docker logout myprivaterepo.com

镜像命令

以下是您要求的三个镜像相关命令(docker imagesdocker image inspectdocker image tag)的详细介绍,按照您提供的格式:


  1. docker images
    • 功能

      该命令用于列出本地 Docker 镜像的列表,显示镜像的基本信息,包括镜像的 ID、标签、创建时间和大小。

    • 语法

      bash 复制代码
      docker images [OPTIONS] [REPOSITORY[:TAG]]
    • 关键参数

      • REPOSITORY:指定要列出的镜像仓库。如果未指定,列出所有仓库的镜像。
      • TAG:指定要列出的镜像标签。如果未指定,列出所有标签的镜像。
      • -a, --all:显示所有镜像,包括中间层镜像。
      • -q, --quiet:只列出镜像的 ID。
      • --digests:显示镜像的摘要信息。
    • 样例

      bash 复制代码
      # 列出所有镜像
      docker images
      
      # 列出指定仓库的镜像
      docker images ubuntu
      
      # 仅列出镜像的 ID
      docker images -q
      
      # 显示镜像的摘要信息
      docker images --digests

  1. docker image inspect
    • 功能

      该命令用于获取指定镜像的详细信息,以 JSON 格式输出镜像的元数据,如镜像的配置、层、环境变量等。

    • 语法

      bash 复制代码
      docker image inspect [OPTIONS] IMAGE [IMAGE...]
    • 关键参数

      • IMAGE:指定要查看详细信息的镜像 ID 或镜像名称。
      • -f, --format:使用 Go 模板格式化输出结果,可以根据需要提取特定的信息。
      • --type:指定要返回的对象类型(如 imagecontainer 等)。
    • 样例

      bash 复制代码
      # 查看指定镜像的详细信息
      docker image inspect ubuntu
      
      # 查看多个镜像的详细信息
      docker image inspect ubuntu alpine
      
      # 使用格式化输出,只显示镜像的创建时间
      docker image inspect -f '{{.Created}}' ubuntu

  1. docker image tag (别名:docker tag)
    • 功能

      该命令用于为本地镜像打标签。通过为镜像打标签,可以为同一个镜像指定多个标签,或者将镜像推送到其他仓库。

    • 语法

      bash 复制代码
      docker image tag [OPTIONS] SOURCE_IMAGE TARGET_IMAGE
    • 关键参数

      • SOURCE_IMAGE:要打标签的源镜像的 ID 或名称。
      • TARGET_IMAGE:目标镜像的名称(包括仓库地址和标签)。
      • -f, --force:强制覆盖已有标签。
      • --help:显示帮助信息。
    • 样例

      bash 复制代码
      # 为本地镜像 ubuntu 打标签,将其命名为 myrepo/ubuntu:v1
      docker image tag ubuntu myrepo/ubuntu:v1
      
      # 将本地镜像打标签并推送到指定的仓库
      docker image tag ubuntu myprivaterepo.com/ubuntu:v1
      docker push myprivaterepo.com/ubuntu:v1
      
      # 强制覆盖现有标签
      docker image tag -f ubuntu myrepo/ubuntu:v2

容器命令

  1. docker run

    • 功能

      该命令用于创建并启动一个新的容器。docker run 是 Docker 中最常用的命令之一,允许用户从指定镜像创建容器,并且可以指定容器的配置、端口映射、挂载卷等参数。

    • 语法

      bash 复制代码
      docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    • 关键参数

      • IMAGE:指定用于创建容器的镜像名称。
      • COMMAND:指定容器启动时运行的命令,默认为镜像的默认命令。
      • -d, --detach:让容器在后台运行。
      • -p, --publish:映射容器的端口到主机,格式为 host_port:container_port
      • -e, --env:设置环境变量。
      • -v, --volume:挂载卷,将宿主机目录或文件挂载到容器中。
      • --name:为容器指定一个自定义名称。
      • --rm:容器停止后自动删除容器。
      • -it:结合使用 -i(保持标准输入流打开)和 -t(分配伪终端)选项,通常用于交互式容器。
    • 样例

      bash 复制代码
      # 从 ubuntu 镜像创建并启动一个容器,交互模式下运行 bash
      docker run -it ubuntu bash
      
      # 在后台启动容器并映射端口
      docker run -d -p 8080:80 nginx
      
      # 创建并启动容器,挂载宿主机目录到容器
      docker run -d -v /path/to/host/dir:/path/in/container nginx
      
      # 启动容器并设置环境变量
      docker run -d -e "ENV_VAR=value" ubuntu
      
      # 使用 --name 为容器指定一个名称
      docker run -d --name mynginx nginx
      
      # 容器停止后自动删除容器
      docker run --rm ubuntu

  1. docker ps

    • 功能

      该命令用于列出当前正在运行的容器。docker ps 可以帮助用户查看容器的状态、容器 ID、镜像、端口映射等信息。

    • 语法

      bash 复制代码
      docker ps [OPTIONS]
    • 关键参数

      • -a, --all:列出所有容器(包括停止的容器)。
      • -q, --quiet:只列出容器的 ID。
      • -f, --filter:根据指定条件过滤容器(如按状态、镜像名称、容器名称等)。
      • --format:使用 Go 模板格式化输出,定制输出的字段。
      • --no-trunc:显示完整的容器 ID,而非截断的短 ID。
    • 样例

      bash 复制代码
      # 列出所有正在运行的容器
      docker ps
      
      # 列出所有容器(包括已经停止的容器)
      docker ps -a
      
      # 仅显示容器的 ID
      docker ps -q
      
      # 过滤显示特定镜像的容器
      docker ps -f "ancestor=ubuntu"
      
      # 显示格式化后的输出,仅显示容器名称和状态
      docker ps --format "{{.Names}}: {{.Status}}"
      
      # 显示完整的容器 ID
      docker ps --no-trunc

六、docker 镜像仓库 练习

练习一:搭建一个 nginx 服务

知识

Web 服务器(网站服务器,也称www服务器):是指驻留在互联网上某种类型计算机的程序。主要功能是 提供网上信息浏览服务。

Nginx 是一款功能强大且高效的开源软件,广泛应用于 Web 服务器和反向代理服务器的角色。它能够处理大量的并发请求,提供高性能的负载均衡、内容缓存、反向代理等功能。Nginx 的主要应用场景包括网站发布、反向代理和负载均衡等,它常常用于构建高性能、高可用性的 Web 应用架构。

正向代理与反向代理

在介绍 Nginx 的反向代理功能之前,了解正向代理和反向代理的区别非常重要。

正向代理

正向代理是代理服务器代替客户端访问目标服务器的方式。客户端需要访问一个外部网站,但由于各种原因(如防火墙或地理限制),无法直接访问,这时可以通过正向代理来进行访问。正向代理代理的是客户端,客户端是知道自己访问的目标的,而目标服务器并不知道客户端的真实 IP 地址。

举例:我们无法直接访问 Google,因为受到网络限制或防火墙的影响。但可以通过 VPN(正向代理)连接到代理服务器,代理服务器代替我们访问 Google。此时,Google 知道的是代理服务器的 IP 地址,而非客户端的真实 IP。

反向代理

与正向代理相对,反向代理代理的是服务器端。反向代理的工作原理是客户端发起请求时,代理服务器接收到请求并转发给真实的服务器。客户端并不知晓这个请求是被代理转发的,它只知道访问的是代理服务器。

在 Nginx 中,反向代理的作用非常关键,尤其是在负载均衡和保护后端服务器时。反向代理为客户端提供透明的访问体验,所有的请求都通过代理服务器转发,客户端只知道目标地址是代理服务器,而不知道背后的具体服务器细节。

举例:当我们访问百度时,我们实际上并不直接连接到百度的所有服务器,而是通过 Nginx 反向代理服务器,这样 Nginx 可以转发我们的请求到实际的百度服务器上处理。对于客户端来说,整个过程是透明的。

Nginx 可以作为反向代理服务器处理来自客户端的请求,然后将请求转发到多个后端服务器上,这样可以实现负载均衡,提高系统的可用性和扩展性。Nginx 还可以缓存内容、处理 SSL 加密、管理请求速率等,是现代 Web 架构中不可或缺的组成部分。


下面展示一下如何启动nginx:

以ubuntu为例,首先通过下面的命令安装nginx:

bash 复制代码
apt install nginx -y

可以通过下面的命令查看是否成功安装,并启动nginx

bash 复制代码
# 查看版本
nginx -v
# 手动启动
nginx

当我们通过服务器启动nginx时,此时在浏览器中访问该ip地址,此时页面首页就是nginx的首页:


实操

  1. 我们可以通过 dockers search 查找镜像

    bash 复制代码
    docker search nginx
  2. 随后通过 docker pull 拉取指定的镜像

    bash 复制代码
    ubuntu@VM-8-2-ubuntu:~$ docker pull nginx:latest
    latest: Pulling from library/nginx
    bc0965b23a04: Pull complete 
    650ee30bbe5e: Pull complete 
    8cc1569e58f5: Pull complete 
    362f35df001b: Pull complete 
    13e320bf29cd: Pull complete 
    7b50399908e1: Pull complete 
    57b64962dd94: Pull complete 
    Digest: sha256:fb197595ebe76b9c0c14ab68159fd3c08bd067ec62300583543f0ebda353b5be
    Status: Downloaded newer image for nginx:latest
    docker.io/library/nginx:latest
  3. 通过docker images可用查看所有镜像

    bash 复制代码
    ubuntu@VM-8-2-ubuntu:~$ docker images
    REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
    nginx        latest    66f8bdd3810c   3 weeks ago     192MB

  1. 通过下面的命令运行镜像

    bash 复制代码
    # <name> 为指定的容器名 <port> 为指定的端口号
    docker run --name <name> --rm -it -p <port>:80 nginx:latest bash
  2. 启动nginx

bash 复制代码
ubuntu@VM-8-2-ubuntu:~$ docker run --name nginx1 --rm -it -p 8080:80 nginx:latest bash
root@2ccd88631580:/# nginx
2024/12/25 01:22:53 [notice] 7#7: using the "epoll" event method
2024/12/25 01:22:53 [notice] 7#7: nginx/1.27.3
2024/12/25 01:22:53 [notice] 7#7: built by gcc 12.2.0 (Debian 12.2.0-14) 
2024/12/25 01:22:53 [notice] 7#7: OS: Linux 6.8.0-49-generic
2024/12/25 01:22:53 [notice] 7#7: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2024/12/25 01:22:53 [notice] 8#8: start worker processes
2024/12/25 01:22:53 [notice] 8#8: start worker process 9
2024/12/25 01:22:53 [notice] 8#8: start worker process 10
  1. 此时另开一个shell并执行curl命令,可以接收到nginx初始欢迎页面的html;
bash 复制代码
ubuntu@VM-8-2-ubuntu:~$ curl 127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
  1. 此时我们将shell退出,再次执行curl命令会发现ping 不通,即nginx是容器内的
bash 复制代码
root@0397436989f8:/# curl 127.0.0.1
curl: (7) Failed to connect to 127.0.0.1 port 80 after 0 ms: Couldn't connect to server

练习二:Docker hub 创建自己的私有仓库

BusyBox

BusyBox 是一个集成了许多 Unix 工具的小型软件包,旨在提供一个轻量级的、功能丰富的命令行工具集。它通常用于资源受限的环境中,如嵌入式系统、容器、路由器和其他需要小型操作系统的地方。

主要特点

  1. 多功能性 :BusyBox 将许多常见的 Unix 工具(如 ls, cp, mv, cat, echo, grep, awk, sed, ifconfig, ping 等)集成在一个单一的二进制文件中。每个命令实际上是同一个二进制文件的不同调用方式。

  2. 轻量级:由于将多个工具合并成一个单一的二进制文件,BusyBox 的文件大小通常非常小,可以有效地节省存储空间。通常它的大小仅为几百 KB。

  3. 可定制性:BusyBox 提供了一个配置工具,可以选择启用或禁用特定的命令和功能,以适应不同的需求。这使得它特别适合嵌入式开发。

  4. 兼容性:它提供了 POSIX 标准的实现,能够在没有完整 Linux 系统的情况下运行很多常见的命令和脚本。

使用场景

  • 嵌入式系统:例如路由器、智能设备、网络设备等,通常需要一个小型且功能强大的操作环境,BusyBox 是理想的选择。
  • Docker 容器 :许多轻量级的 Docker 镜像(例如 alpine)都使用 BusyBox 作为基础镜像,因为它非常小并且提供了大部分所需的常见命令。
  • 恢复模式:在某些系统恢复环境中,BusyBox 可以作为一个紧急工具集,帮助用户执行基本的文件操作和系统修复任务。

ubuntu下我们可以通过下面的命令进行安装、检查、卸载;

bash 复制代码
# 安装
apt install -y busybox
# 检查
busybox ls
busybox ifconfig
busybox ifconfig | busybox grep lo
# 卸载
apt --purge autoremove busybox
相关推荐
cv键盘侠1 小时前
HTML转义和反转义工具类
java·spring boot·spring cloud·mvc
阿强773 小时前
包装类缓存对象
java·缓存·包装类
LUCIAZZZ4 小时前
TCP基本入门-简单认识一下什么是TCP
java·网络·后端·网络协议·tcp/ip·计算机网络·spring
_未知_开摆5 小时前
2020年蓝桥杯Java B组第二场题目+部分个人解析
java·经验分享·后端·程序人生·蓝桥杯
虾球xz5 小时前
游戏引擎学习第126天
java·学习·游戏引擎
郑祎亦6 小时前
Java 关键字 volatile
java·开发语言·jvm
不会飞的小龙人6 小时前
Quickwit获取Kafka数据源消息
java·docker·容器·kafka·quickwit
诗诗的博客6 小时前
jmeter聚合报告如何添加单位_性能测试连载(8)jmeter压力测试中的难点解析
java·开发语言
lozhyf6 小时前
Docker 部署 Spring Cloud 项目:实战指南与经验分享
经验分享·spring cloud·docker