前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >入门云原生:搭建Docker环境以及了解Docker架构

入门云原生:搭建Docker环境以及了解Docker架构

作者头像
Lion 莱恩呀
发布于 2025-05-01 13:17:19
发布于 2025-05-01 13:17:19
1840
举报
概述
本文带你快速入门云原生,从搭建Docker环境开始,详细讲解Docker的安装配置,以及Docker镜像、容器、架构等核心概念。通过实战操作,让你轻松掌握Docker技术,为后续的云原生学习打下坚实基础。
文章被收录于专栏:后端开发技术后端开发技术

一、主机环境搭建与配置

搭建运行环境,以便进行后续的开发和学习。 这里选择 Ubuntu 20.04 LTS (Long Term Support) 作为基础操作系统,因为它稳定、可靠,且拥有广泛的社区支持。

操作系统镜像下载:

  • 建议使用 Ubuntu 20.04.4 LTS 或更高版本。

  • 下载地址:https://mirrors.aliyun.com/ubuntu-releases/20.04/

  • 选择 ubuntu-20.04.5-live-server-amd64.iso 镜像文件。

  • 该镜像可用于在虚拟机 (如 VMware, VirtualBox) 或物理机上安装 Ubuntu Server 系统。 服务器版本占用资源少,适合作为开发环境。

镜像源配置 (加速软件安装):为了加速软件安装和更新速度,建议更换为国内镜像源。 提供两种配置方式。

方法一:在安装过程中配置 (推荐):

  • 在虚拟机安装 Ubuntu 系统时,安装程序通常会询问镜像源配置。

  • 如图所示,可以手动输入镜像服务器地址。 推荐使用阿里云镜像源或其他国内可靠的镜像源。

  • 输入正确的镜像源地址,可以大幅缩短安装时间。

方法二:安装完成后修改 (适用于已安装系统):如果已经安装了 Ubuntu 系统,可以通过修改 /etc/apt/sources.list 文件来更换镜像源。

操作步骤:

  1. 备份 sources.list 文件 (重要!):在修改之前,务必备份原始配置文件,以便在出现问题时可以恢复。 执行命令:

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

  2. 编辑 sources.list 文件: 使用文本编辑器 (例如 vimnano) 打开该文件,并替换其中的默认源地址。

    sudo vim /etc/apt/sources.list

    将文件中所有的 http://archive.ubuntu.com/ubuntu/ 替换为阿里云镜像源地址:http://mirrors.aliyun.com/ubuntu/。 可以选择其他的国内镜像源,例如清华大学、中科大的镜像源。

  3. 更新软件包列表: 修改完成后,保存并关闭文件。 然后执行以下命令来更新软件包列表,使配置生效。

    sudo apt-get update

    该命令会从新的镜像源下载软件包列表,如果一切顺利,就可以更快地安装和更新软件了。

注意事项:

  • 确保选择与您的 Ubuntu 版本相对应的镜像源地址。

  • 在修改配置文件时,请仔细检查,避免出现拼写错误或其他格式错误。

  • 如果 apt-get update 命令报错,请检查网络连接和镜像源地址是否正确。

通过以上步骤,就可以成功搭建 Ubuntu 20.04 主机环境,并配置国内镜像源,为后续的开发工作做好准备。

二、Docker 安装与配置

本节将指导在 Ubuntu 20.04 主机上安装 Docker,并进行一些必要的配置。

(1) Docker 安装 (使用 apt 包管理器):虽然 Docker 提供了多种安装方式,但使用 apt 包管理器是最便捷的方式之一。 也可以参考 Docker 官方文档进行安装,这里提供更简化的步骤。

执行以下命令安装 Docker:

代码语言:Bash
换行
自动换行
AI代码解释
sudo apt update # 更新软件包列表,确保安装最新版本 sudo apt install docker.io

Docker 卸载 (如果需要):如果需要卸载 Docker,可以执行以下命令,这将移除 Docker 以及相关的配置和数据:

代码语言:Bash
换行
自动换行
AI代码解释
sudo apt-get purge docker.io # 彻底移除 Docker 包 sudo rm -rf /var/lib/docker # 删除 Docker 数据目录 sudo rm -rf /var/lib/containerd # 删除 Containerd 数据目录 (如果存在)

(2) 用户权限配置 (无需 sudo 执行 Docker 命令):默认情况下,执行 Docker 命令需要 sudo 权限。为了方便使用,可以将当前用户添加到 docker 用户组。

添加用户到 docker 组:

代码语言:Bash
换行
自动换行
AI代码解释
sudo usermod -aG docker $USER # 将当前用户添加到 docker 组 newgrp docker # 刷新用户组信息 (或重新登录)

或者,也可以显式地指定用户名:

代码语言:Bash
换行
自动换行
AI代码解释
sudo addgroup <username> docker

重启 Docker 服务:

代码语言:Bash
换行
自动换行
AI代码解释
sudo systemctl restart docker

验证配置:使用 id 命令查看当前用户信息,确认 docker 组已包含在用户所属的组列表中:

代码语言:Bash
换行
自动换行
AI代码解释
id

如果没有 docker 组,可以尝试注销并重新登录。 现在,应该可以在没有 sudo 的情况下执行 Docker 命令了。

(3) 安装 OpenSSH Server (可选,但强烈推荐):OpenSSH Server 允许通过 SSH 远程连接到主机。 这对于远程管理和开发非常有用。

安装 OpenSSH Server:

代码语言:Bash
换行
自动换行
AI代码解释
sudo apt-get update sudo apt-get install openssh-server

配置 OpenSSH Server (可选,但建议配置公钥登录):可以配置 SSH 密钥认证,提高安全性,避免每次输入密码。 具体步骤请参考相关文档。

启动和管理 OpenSSH Server:

代码语言:Bash
换行
自动换行
AI代码解释
sudo systemctl enable ssh # 设置开机启动 sudo systemctl restart ssh # 重启 SSH 服务 sudo systemctl status ssh # 查看 SSH 服务状态

确保 SSH 服务正在运行,并且可以通过端口 22 连接。

(4) 设置 Docker 镜像加速器 (可选,但强烈推荐):由于 Docker Hub 位于国外,拉取镜像的速度可能较慢。 配置镜像加速器可以显著提高镜像下载速度。

编辑 Docker 配置文件:不同版本的 Docker 配置文件位置可能略有不同,通常位于 /etc/docker/daemon.json。 如果该文件不存在,则创建它。

代码语言:Bash
换行
自动换行
AI代码解释
sudo mkdir -p /etc/docker sudo nano /etc/docker/daemon.json

添加镜像加速器地址:将以下 JSON 内容添加到 /etc/docker/daemon.json 文件中 (替换为你选择的镜像源):

代码语言:JSON
换行
自动换行
AI代码解释
{ "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com" ] }

可以选择多个镜像源,Docker 会自动尝试。 推荐使用阿里云或网易云的镜像源,速度较快。

重启 Docker 服务:

代码语言:Bash
换行
自动换行
AI代码解释
sudo systemctl restart docker

验证配置:执行 docker info 命令,检查输出中是否包含 Registry Mirrors 字段,并且列出了配置的镜像加速器地址。

通过以上步骤,就成功安装了 Docker,并进行了必要的用户权限配置和镜像加速器设置。 为后续的 Docker 容器化开发奠定基础。

三、Docker 简介

Docker 是一种流行的容器化技术,提供了一个高效、可移植的平台,用于构建、发布和运行分布式应用程序。 Docker 的核心思想是将应用程序及其所有依赖项(例如库、运行时环境和配置文件)打包到一个称为容器的独立单元中。 容器彼此隔离,并与底层操作系统隔离,从而确保应用程序在各种环境中以一致的方式运行。

3.1、Docker 解决的关键问题

  • 环境一致性问题: Docker 解决了应用程序在开发、测试和生产环境中运行不一致的问题。 通过将应用程序及其依赖项打包到容器中,可以确保应用程序在任何支持 Docker 的平台上都能以相同的方式运行,避免了 "在我机器上运行正常" 的问题。

  • 资源管理问题: Docker 容器允许对应用程序的资源使用情况进行精细控制。 可以在创建容器时指定内存和 CPU 限制,从而确保应用程序不会占用过多的系统资源,并提高整体资源利用率。

  • 快速扩展和弹性伸缩: Docker 容器启动速度快,资源占用少,使得应用程序的快速扩展和弹性伸缩变得简单。 可以根据需要快速部署新的容器,并根据负载自动调整容器的数量。

3.2、Docker 的技术边界

Docker 主要针对应用及其依赖环境进行容器化,遵循单一职责原则。 最佳实践是每个容器只运行一个主进程。 将多个进程部署在同一个容器中存在以下弊端:

  • 更新困难: 更新单个进程的镜像会导致整个容器重启,影响其他进程的可用性。

  • 故障扩散: 一个进程出现问题可能导致整个容器崩溃,影响容器内所有进程。

  • 违反单一职责原则: 容器应该代表一个独立的、可部署的单元。

如果需要在单个 Docker 实例中运行多个应用程序,建议采用以下方法:

  • 使用进程管理工具: 例如 Supervisor 或 systemd,在容器内启动一个守护进程来管理多个应用程序。

  • 使用 Docker Compose: 使用 Docker Compose 定义和管理多容器应用程序。

3.3、Docker 带来的变革

  • 软件交付方式的变革: Docker 简化了软件的构建、发布和部署流程,实现了应用程序的快速交付。

  • 虚拟机替代方案: Docker 容器比虚拟机更轻量级、启动速度更快,资源占用更少,在某些场景下可以作为虚拟机的替代方案。

  • 用户体验的提升: Docker 简化了软件的安装和使用过程,用户可以通过简单的命令快速部署和运行应用程序。

  • 企业成本的降低: Docker 提高了资源利用率,降低了基础设施成本,并简化了应用程序的管理和维护。

  • 持续集成/持续部署 (CI/CD) 的推动: Docker 为 CI/CD 流程提供了可靠的基础,使得应用程序的持续集成和持续部署成为可能。

  • 微服务架构的促进: Docker 容器轻量级、可移植的特性非常适合微服务架构,每个微服务可以打包成一个独立的容器,实现独立部署和扩展。

3.4、Docker 与虚拟机的区别

特性

Docker (容器)

虚拟机 (VM)

虚拟化级别

操作系统级别虚拟化 (共享内核)

硬件级别虚拟化 (完整操作系统)

资源占用

轻量级 (资源占用少,启动速度快)

重量级 (资源占用多,启动速度慢)

镜像大小

通常较小 (几 MB 到几百 MB)

通常较大 (几 GB 到几十 GB)

隔离性

共享内核,隔离性相对较弱

完整操作系统,隔离性强

启动速度

秒级

分钟级

应用场景

应用开发、快速部署、微服务

资源隔离、运行多个操作系统、服务器整合

核心解决的问题

应用开发、测试和部署的环境一致性问题

资源调配、硬件资源的虚拟化

是否包含 Guest OS

No

Yes

3.5、Docker 架构图

  • 镜像 (Image): Docker 镜像是一个只读的模板,用于创建 Docker 容器。 它包含应用程序及其所有依赖项。 可以将镜像视为一个应用程序的快照。 例如,一个 Ubuntu 镜像包含 Ubuntu 操作系统的基本文件系统和工具。

  • 容器 (Container): 容器是 Docker 镜像的运行时实例。 它是一个独立运行的进程,包含应用程序及其所有依赖项。 容器是可写的,可以在其中运行应用程序、修改文件和安装软件。

  • 客户端 (Client): Docker 客户端是用户与 Docker 守护进程交互的工具。 客户端可以通过命令行或 API 与守护进程通信。

  • 主机 (Host): Docker 主机是运行 Docker 守护进程和容器的物理或虚拟机。

  • 注册中心 (Registry): Docker 注册中心是存储和共享 Docker 镜像的仓库。 Docker Hub 是一个公共的注册中心,包含了大量的官方和社区镜像。 您也可以搭建私有的 Docker 注册中心,用于存储和管理私有镜像。

  • Docker Machine (已逐渐被其他工具替代): Docker Machine 是一个用于简化 Docker 安装的工具,可以帮助您在不同的平台上(例如本地机器、云服务器)安装 Docker。

3.6、直观感受

通过一个简单的示例,演示 Docker 客户端如何通过 Socket 与 Docker 守护进程通信。

  1. 安装 socat:

    sudo apt update sudo apt install socat

  2. 使用 socat 监听 Unix Socket:

    socat -v UNIX-LISTEN:/tmp/dockerapi.sock UNIX-CONNECT:/var/run/docker.sock &

    • socat 是一个多功能的网络工具,用于在两个数据流之间建立连接。

    • -v 参数用于显示详细的通信信息。

    • UNIX-LISTEN:/tmp/dockerapi.sock 指定 socat 监听 /tmp/dockerapi.sock Unix Socket。

    • UNIX-CONNECT:/var/run/docker.sock 指定 socat 连接到 Docker 守护进程的 Unix Socket (/var/run/docker.sock)。

    • & 将 socat 命令放到后台运行。

  3. 使用 Docker 客户端与 socat 建立连接:

    docker -H unix:///tmp/dockerapi.sock ps

    • -H unix:///tmp/dockerapi.sock 指定 Docker 客户端连接到 /tmp/dockerapi.sock Unix Socket。

    • ps 命令用于列出正在运行的 Docker 容器。

  4. 会看到 Docker 客户端通过 socat 发送 HTTP 请求到 Docker 守护进程,并接收来自守护进程的响应。 这证明了 Docker 客户端和守护进程之间的通信是基于 Socket 的。

    > 2022/12/04 09:21:30.864275 length=82 from=0 to=81 HEAD /_ping HTTP/1.1\r Host: docker\r User-Agent: Docker-Client/20.10.12 (linux)\r \r < 2022/12/04 09:21:30.865645 length=281 from=0 to=280 HTTP/1.1 200 OK\r Api-Version: 1.41\r Cache-Control: no-cache, no-store, must-revalidate\r Content-Length: 0\r Content-Type: text/plain; charset=utf-8\r Docker-Experimental: false\r Ostype: linux\r Pragma: no-cache\r Server: Docker/20.10.12 (linux)\r Date: Sun, 04 Dec 2022 09:21:30 GMT\r \r > 2022/12/04 09:21:30.869675 length=97 from=82 to=178 GET /v1.41/containers/json HTTP/1.1\r Host: docker\r User-Agent: Docker-Client/20.10.12 (linux)\r \r < 2022/12/04 09:21:30.870824 length=205 from=281 to=485 HTTP/1.1 200 OK\r Api-Version: 1.41\r Content-Type: application/json\r Docker-Experimental: false\r Ostype: linux\r Server: Docker/20.10.12 (linux)\r Date: Sun, 04 Dec 2022 09:21:30 GMT\r Content-Length: 3\r \r [] CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

通过这个示例,了解 Docker 客户端和守护进程之间如何通过 Socket 进行通信,为理解 Docker 的内部工作原理打下了基础。

四、总结

  1. Docker可以安装多个应用程序,但是Docker只有一个程序入口,也就是docker的启动命令只有一条。

  2. Docker和虚拟机不一样,Docker本身是一个软件,管理自己的进程,没有虚拟硬件设备。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档