前往小程序,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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker 学习应用篇三:使用docker搭建的环境,安装thinksns
Thinksns 是一个开源的社交网站,因为目前的项目需要用到这个,所以就下载一个安装试试看。 之前在windows上用了wamp,安装的很顺利。但是项目是要部署到linux上的。于是我便用了Dock
ShenduCC
2018/04/27
1.2K0
Docker 学习应用篇三:使用docker搭建的环境,安装thinksns
浅谈日常使用的 Docker 底层原理-三大底座
适合的读者,对Docker有过简单了解的朋友,想要进一步了解Docker容器的朋友。
宁在春
2023/10/16
1.8K0
浅谈日常使用的 Docker 底层原理-三大底座
实战 | ​Docker ubuntu:18.04 镜像制作
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。近年来,Docker方式越来越受欢迎,本文针对Docker ubuntu的镜像操作进行了详细阐述:包括两种方式。
3D视觉工坊
2020/12/11
6.1K0
docker 容器从入门到入魔
1. docker 是什么2. docker 解决什么问题1. 解决虚拟机资源消耗问题。2. 快速部署。3. 提供一次性的环境。4. 提供弹性的云服务。5. 组建微服务架构。3. docker 安装部署与使用1. 安装 docker 引擎2. 使用 docker1. 理解 docker 的架构2. docker 命令3. 卷的概念4. 自制镜像并发布4. docker 网络6. docker pipework7. docker 网络端口映射4. 总结
somenzz
2020/12/10
1.2K0
docker 容器从入门到入魔
Docker容器逃逸
由于传播、利用本公众号亿人安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号亿人安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
亿人安全
2023/12/28
5820
Docker容器逃逸
简单几步搭建一个基于 Docker 的 Tomcat 运行环境!
Docker 旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器 (轻量级虚拟机) 并部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法。更多的玩法还有大规模 web 应用、数据库部署、持续部署、集群、测试环境、面向服务的云计算、虚拟桌面 VDI 等等。
用户6543014
2019/10/25
7190
Docker入门
Docker是容器技术的一个代表,容器的技术从本质上讲是程序打包、隔离的技术,不是一个很新的技术,核心的技术在内核中已经存在很久了。但容器技术被大众所用,变成这么流行,这么火爆的技术是因为Docker。Docker在13年被开源,变得越来越流行,Docker在微服务领域、云计算领域有着广泛的应用。这是为什么呢。任何技术的流行可能的原因有两点,一是能够解决大家的痛点,二是能够能够适应潮流.docker理顺了软件包的问题,有了docker运行一个镜像是非常容易的,不需要做各种环境的配置。
方志朋
2022/05/08
5520
Docker入门
Docker入门:Docker安装与基本使用
Docker支持主流的Linux Server、也支持Windows Server,同时为了方便开发者在开发环境中使用Docker,Docker官方也提供了支持Windows以及macOS的Docker Desktop。
KenTalk
2023/04/07
1.6K0
Docker入门:Docker安装与基本使用
Docker从门外到入门使用
取材 第一本Docker书。原作者:James Turnbull 安装 这里只说明Windows环境的安装(Windows7以上) 使用Docker Toolbox工具即可:http://mirror
嘘、小点声
2019/12/02
1K0
Vulhub靶场搭建教程
下一步配置好主机名称,账户和密码,千万别进去配置,不然巨麻烦,你如果不懂可能配置一个小时还没安装好,我这种方法,不需要进去点击任何操作,它自动把系统配置好了,10分钟左右系统就装好了,如下图所示:
Miloce
2022/09/28
2.3K1
Vulhub靶场搭建教程
Docker安装kali
a1765e8e381e为你的镜像id,-t 让 docker 分配一个伪终端并绑定到容器的标准输入上 ,-p 指定映射端口,如60001端口映射到虚拟机的 5901 端口,-d 保持后台运行, -c 执行一些命令
sakurajiamai
2022/01/02
3K0
Docker安装kali
docker 操作进阶
sudo docker exec -it merlingpu env LANG=C.UTF-8 /bin/bash
AI拉呱
2021/01/14
4810
Ubuntu安装podman
Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
用户6792968
2022/08/30
2.3K0
Docker 入门指南
Docker是基于Go开发的应用容器引擎,属于 Linux 容器的一种封装,提供简单易用的容器使用接口。
被水淹没
2023/02/25
2.2K0
Docker 入门指南
WSL 下优雅地 Coding
WSL:Windows Subsystem for Linux,Windows 系统下的 Linux 子系统
cnguu
2020/10/23
9900
WSL 下优雅地 Coding
使用PHP搭建Web版Docker管理系统实践
团队中使用容器比较频繁,但并不是所有人都可以登陆服务器去执行命令,但是又需要用到docker,所以有一个需求通过web来管理docker,而其他语言并不怎么熟悉,后期维护成本比较高,所以笔者采用PHP来管理容器。
汤青松
2018/10/19
2.3K0
使用PHP搭建Web版Docker管理系统实践
Docker 生产SSH服务的镜像
7.当前这个容器 root 用户目录下建立.ssh目录,复制需要的公钥到 authorized_keys 文件
solate
2019/07/19
8890
搭建 Ubuntu 24.04 基础开发环境指南
两年前我写过一篇《在笔记本上搭建高性价比的 Linux 学习环境:基础篇[1]》,随着时间推移,里面的一些内容需要更新了。
soulteary
2025/01/19
6220
搭建 Ubuntu 24.04 基础开发环境指南
基于OSX平台的Docker快速入门(还没有熟悉Docker吗?那就从这开始吧)
仅仅在2013年左右才发布的Docker,却已经遍布了我的Twitter消息和RSS阅读器。在之前我已经运行过“Hello World”的示例,但我自觉没有能真正理解其内涵,准确地说,我并不了解Doc
solarest
2018/01/08
1.8K0
基于OSX平台的Docker快速入门(还没有熟悉Docker吗?那就从这开始吧)
搭建 Ubuntu 24.04 基础开发环境指南
两年前我写过一篇《在笔记本上搭建高性价比的 Linux 学习环境:基础篇》,随着时间推移,里面的一些内容需要更新了。
soulteary
2025/01/17
2.5K0
搭建 Ubuntu 24.04 基础开发环境指南
相关推荐
Docker 学习应用篇三:使用docker搭建的环境,安装thinksns
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档