2、ubuntu系统docker介绍及镜像源和仓库配置

1、Docker 介绍

1.1、Docker 简介

Docker:Docker 是一个开源的应用容器引擎,让开发者可以将应用程序和所有依赖打包到一个轻量级、可移植的容器中,然后在任何支持 Docker 的环境中运行。

在传统的项目开发中,开发者经常遇到环境不一致的问题,比如代码在本地开发环境运行正常,但在测试或生产环境却出现各种错误,原因可能是操作系统版本、依赖库版本或配置差异。此外,传统部署方式需要手动安装和配置各种软件环境,过程繁琐且容易出错,不同服务器之间的环境也难以保持一致。

Docker 的核心目标就是解决这些问题,通过容器化技术将应用及其运行环境打包在一起,确保应用在不同环境中表现一致。Docker 的出现极大简化了开发、测试和部署的流程,成为现代 DevOps 和云计算中的重要工具。Docker 有几个显著特点:

  1. 轻量性:由于容器共享宿主机的操作系统内核,它们比传统虚拟机更小且启动更快,解决了传统虚拟化技术资源占用高、启动慢的问题。
  2. 可移植性:Docker 容器可以在任何支持 Docker 的平台上运行,无论是本地开发机、物理服务器还是云环境,彻底解决了「在我机器上能跑,线上却不行」的难题。
  3. 隔离性:每个容器拥有独立的文件系统、网络和进程空间,确保应用之间互不干扰,避免了传统部署中多个应用共用环境导致的依赖冲突问题。
  4. 标准化:Docker 提供统一的接口和工具链,使得构建、分发和运行容器变得简单高效,替代了传统部署中复杂的手动配置流程。

Docker 采用了客户端-服务器架构。Docker 客户端负责发送命令,Docker 守护进程(服务端)负责执行这些命令。它们可以运行在同一台机器上,也可以分开运行。客户端和守护进程通过 UNIX 套接字或网络接口进行通信,使用 REST API 交换数据。这种架构让用户可以通过本地或远程客户端管理 Docker 服务。Docker 的架构图如下所示:

1.2、Docker 核心概念

Docker 的核心概念包括容器、镜像、Dockerfile 和镜像仓库,这些是理解 Docker 技术的基础。

容器(Container):一种轻量级的虚拟化技术,它共享操作系统内核但保持独立的运行环境,这使得容器比传统虚拟机更快速且占用资源更少。

容器是 Docker 技术的核心运行单元,它是一种轻量级的虚拟化技术实现方式。与传统的虚拟机不同,容器不需要模拟完整的硬件环境,也不需要运行独立的操作系统内核。容器在运行时与其他容器和宿主机共享操作系统内核,这使得容器启动更快且占用资源更少。

容器之间是相互独立的。每个容器都拥有自己的文件系统、网络和进程空间,确保应用之间不会互相干扰。

镜像(Image):镜像是用于创建容器的模板,它包含了运行应用所需的代码、库和配置文件,用户可以从 Docker Hub 下载现成镜像或自己构建。

镜像是用来创建 Docker 容器的基础,镜像中包含了运行应用所需的代码、库、环境变量和配置文件,用户可以直接使用现成的镜像,比如从 Docker Hub 下载,也可以基于现有镜像定制自己的镜像。镜像采用分层存储结构,每一层代表一个修改步骤,这种设计使得镜像的构建和分发更高效。镜像中不包含任何的动态数据,其内容在构建之后不再变动。

Dockerfile:Dockerfile 是一个文本文件,里面写明了如何一步步构建镜像,通过执行 Dockerfile 中的指令,Docker 能自动生成镜像。

Dockerfile 是用于定义镜像构建过程的脚本文件,它由一系列指令组成,比如 FROM 指定基础镜像,RUN 执行命令,COPY 复制文件等,Docker 会根据 Dockerfile 的指令自动构建镜像,这使得镜像的创建过程可重复且透明。

镜像仓库(Image Repository):用于集中存储和分发镜像的地方。

最常用的公共仓库是 Docker Hub,它提供了大量官方和社区维护的镜像。此外,我们也可以搭建公司内部 / 个人使用的私有镜像仓库,用于存放自己的镜像。当需要在另一台主机上使用该镜像时,只需要从仓库上下载即可。

容器、镜像和 Dockerfile、镜像仓库共同构成了 Docker 的工作流程:

  1. 开发者编写 Dockerfile 定义环境,构建 Docker 镜像。
  2. 将构建好的镜像推送到镜像仓库(公共仓库 / 私有仓库)。
  3. 在任何支持 Docker 的机器上拉取镜像并运行容器。

整个过程标准化且高效。理解这些核心概念是掌握 Docker 的关键,它们解决了传统开发部署中的环境不一致问题,使应用在任何地方都能以相同的方式运行。

1.3、Docker 和虚拟机

Docker 和虚拟机都是用来隔离应用运行环境的技术,但它们的工作原理和资源占用方式完全不同。Docker 容器不需要模拟整个操作系统,而是直接运行在宿主机的内核上,这使得容器启动更快、占用资源更少,同时仍能提供良好的隔离性。

Docker 容器和虚拟机的具体区别如下:

  • Docker 容器:使用 Docker 引擎进行调度和隔离,直接共享宿主机的操作系统内核,不需要额外的操作系统层,这使得容器启动更快、占用资源更少。
  • 虚拟机:通过 Hypervisor 软件模拟完整的硬件环境,管理每个虚拟机中操作系统的运行。每个虚拟机需要运行独立的操作系统、应用程序和必要的依赖文件等,因此启动速度慢且占用大量内存和存储。

虚拟机的隔离性更强,因为每个虚拟机有完全独立的操作系统,适合运行需要强隔离的不同类型应用。Docker 的隔离性主要依靠 Linux 内核的命名空间和控制组功能,虽然隔离程度不如虚拟机,但对于大多数应用场景已经足够。Docker 和虚拟机对比如图所示:

2、配置镜像源地址

镜像源(Mirror)的主要目的是加速镜像的拉取操作(即从远程仓库下载镜像)。它们通常作为缓存服务器,存储从主仓库(如 Docker Hub)拉取的镜像,以减少延迟和网络负载。Docker 下载镜像默认从国外的官网下载,在国内需要通过代理访问 / 更换国内镜像源。下面介绍一下更换国内镜像源的方法。

创建镜像源配置文件:

配置镜像源:

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://<你的阿里云镜像地址>.mirror.aliyuncs.com",
        "https://1ms.run",
        "https://docker.xuanyuan.me",
        "https://docker.jsdelivr.fyi",
        "https://docker.yomansunter.com"
    ]
}
EOF

 阿里云镜像源的个人免费注册地址为:阿里云容器镜像服务

保存文件并重启Docker服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

验证Docker服务状态:

sudo systemctl status docker.service

 查看配置的docker镜像源:


wangqiang@wangqiang:~$ cat /etc/docker/daemon.json
{
   "registry-mirrors": [
    "https://<你的阿里云镜像地址>.mirror.aliyuncs.com",
    "https://1ms.run",
    "https://docker.xuanyuan.me",
    "https://docker.jsdelivr.fyi",
    "https://docker.yomansunter.com"
  ]
}

3、配置个人镜像仓库

大多数公共镜像源(如你配置的 https://1ms.runhttps://docker.jsdelivr.fyi 等)是只读的,仅允许拉取操作,不允许推送操作。这是为了防止镜像源被滥用或污染。

Docker 的镜像源(registry-mirrors)在推送镜像时不会生效。即使你配置了镜像源,Docker 仍然会直接连接到原始仓库进行推送操作。

个人用户可以将镜像推送到阿里云的镜像仓库。以下是详细的操作步骤:

3.1、开通阿里云容器镜像服务

  • 登录阿里云账号:访问 阿里云官网 并登录。
  • 开通容器镜像服务
    1. 在阿里云控制台搜索“容器镜像服务”并进入控制台。
    2. 选择“个人版实例”(免费)或“企业版实例”(付费),根据需求开通服务。
    3. 设置登录密码(用于后续 docker login 的认证)。

3.2、创建命名空间和镜像仓库

  • 创建命名空间

    1. 进入 容器镜像服务控制台
    2. 在左侧导航栏选择 个人版实例 > 仓库管理 > 命名空间
    3. 点击 创建命名空间,输入名称(如 my-namespace)并提交。
  • 创建镜像仓库

    1. 仓库管理 > 镜像仓库 页面,点击 创建镜像仓库
    2. 选择 个人版实例,填写以下信息:
      • 命名空间:选择刚创建的命名空间(如 my-namespace)。
      • 镜像仓库名称:输入自定义名称(如 my-image)。
      • 镜像仓库类型:选择 私有仓库(仅自己可见)或 公开仓库(所有人都可拉取)。
    3. 提交后,系统会生成镜像仓库的地址(如 registry.cn-hangzhou.aliyuncs.com/my-namespace/my-image:tag)。

3.3、登录阿里云镜像仓库

在本地终端执行以下命令登录阿里云镜像仓库:

docker login --username=<你的阿里云账号> registry.cn-<地域>.aliyuncs.com
  • 替换参数:
    • <你的阿里云账号>:阿里云账号的登录名。
    • <地域>:镜像仓库所在的地域(如 hangzhoubeijing 等)。
  • 输入开通服务时设置的密码,登录成功后显示 Login Succeeded

3.4、为本地镜像打标签

将本地镜像的标签修改为阿里云镜像仓库的地址:

docker tag <本地镜像ID或名称> registry.cn-<地域>.aliyuncs.com/<命名空间>/<镜像仓库名称>:<tag>

示例:
docker tag my-local-image registry.cn-hangzhou.aliyuncs.com/my-namespace/my-image:v1.0
  • 可通过 docker images 查看本地镜像的 ID 或名称。

3.5、推送镜像到阿里云仓库

执行以下命令推送镜像:

docker push registry.cn-<地域>.aliyuncs.com/<命名空间>/<镜像仓库名称>:<tag>

示例:
docker push registry.cn-hangzhou.aliyuncs.com/my-namespace/my-image:v1.0

3.6、验证推送结果

  1. 登录阿里云容器镜像服务控制台。
  2. 仓库管理 > 镜像版本 页面,查看推送的镜像是否显示在列表中。
  3. 如果显示成功,则表示推送完成。

3.7、拉取镜像(可选)

其他用户或服务器可以通过以下命令拉取镜像:

docker pull registry.cn-<地域>.aliyuncs.com/<命名空间>/<镜像仓库名称>:<tag>


示例:
docker pull registry.cn-hangzhou.aliyuncs.com/my-namespace/my-image:v1.0

注意事项

  1. 认证问题
    • 推送前必须通过 docker login 登录阿里云仓库。
    • 如果密码错误,推送会失败(提示 unauthorized: authentication required)。
  2. 标签格式
    • 确保标签地址与阿里云仓库地址完全一致(包括地域、命名空间、镜像名称和 tag)。
  3. 网络问题
    • 如果推送过程中断,检查网络连接是否正常。
  4. 权限问题
    • 个人版实例默认仅允许推送私有仓库(除非手动设置为公开)。
  5. 费用问题
    • 个人版实例免费,但私有仓库可能产生存储费用(具体以阿里云最新计费规则为准)。

3.8、完整示例

# 1. 登录阿里云仓库
docker login --username=your-aliyun-account registry.cn-hangzhou.aliyuncs.com

# 2. 查看本地镜像
docker images

# 3. 为本地镜像打标签
docker tag my-local-image registry.cn-hangzhou.aliyuncs.com/my-namespace/my-image:v1.0

# 4. 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/my-namespace/my-image:v1.0

# 5. 验证推送结果(在阿里云控制台查看)

4、docker中文教程网站

4.1、综合教程类

  • 菜鸟教程Docker 教程 | 菜鸟教程

  • 内容全面,从Docker的基本概念、安装配置,到镜像、容器的使用,再到网络和数据卷等高级内容都有详细讲解,适合初学者系统学习

  • Docker中文网Docker中文网

  • 有入门指南、手册、参考等板块,涵盖了Docker的安装、设置、配置和使用等方面的内容,还提供了CLI和API文档

  • Datawhale教程https://segmentfault.com/a/1190000046520353

  • 从Docker的安装到使用,再到一些高级应用都有涉及,且有详细的代码示例和解释,适合有一定基础的读者

4.2、专项教程类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI风老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值