Docker 到底是个什么?

Docker 技术全面解析:从安装到应用

一、引言

在当今的软件开发和运维领域,Docker 已经成为了一个不可或缺的工具。它以其轻量级、可移植性和高效性等特点,改变了开发者和运维人员的工作方式,使得应用的打包、分发、运行变得更加简便和高效。本文将深入探讨 Docker 的各个方面,包括安装教程、原理图、常用命令、应用场景以及带来的好处。

二、Docker 安装教程

(一)安装前的准备工作

在安装 Docker 之前,需要确保满足以下条件:

  1. 操作系统要求
    • Windows 10 或更高版本(需启用 WSL 2)。
    • macOS 10.15(Catalina)或更高版本。
    • Linux 支持主流发行版(如 Ubuntu、CentOS)。
  2. 硬件要求
    • 至少 4GB 的内存。
    • 支持虚拟化技术(如 VT - x 或 AMD - V)。
  3. 网络需求:安装过程中需要稳定的网络连接。

(二)不同系统的安装步骤

1. Windows 平台

Windows安装Docker

  • 下载 Docker Desktop
    1. 打开 [Docker 官方网站](https://www.docker.com/products/docker - desktop)。
    2. 选择 Get Docker,下载适用于 Windows 的安装包。
  • 安装 Docker Desktop
    1. 双击下载的安装文件(如 Docker Desktop Installer.exe)。
    2. 在安装向导中,勾选 Enable WSL 2 Features,确保启用了 WSL 2。
    3. 点击安装,等待安装完成。
  • 启用 WSL 2(若未启用)
    1. 打开 PowerShell,以管理员身份运行以下命令,安装 WSL:
wsl --install
2. 设置默认 WSL 版本为 WSL 2:
wsl --set - default - version 2
  • 配置 Docker Desktop
    1. 安装完成后,启动 Docker Desktop。
    2. 登录 Docker Hub 账号(若无账号,可前往 Docker Hub 免费注册)。
    3. 确认 Docker Desktop 显示 Running 状态。
  • 验证安装:在 PowerShell 中运行以下命令,确认 Docker 已正确安装:
docker --version
2. macOS 平台
  • 下载 Docker Desktop
    1. 前往 [Docker 官方网站](https://www.docker.com/products/docker - desktop)。
    2. 选择适用于 macOS 的版本并下载。
  • 安装 Docker Desktop
    1. 下载完成后,双击 .dmg 文件。
    2. 将 Docker 图标拖入 Applications 文件夹。
    3. 打开 Applications,运行 Docker。
  • 登录并配置
    1. 启动 Docker Desktop 时,可能会提示输入管理员密码,输入后继续。
    2. 登录 Docker Hub 账号,完成配置。
  • 验证安装:打开终端,运行以下命令:
docker --version
3. Linux 平台(以 Ubuntu 为例)
  • 安装 Docker 引擎
    1. 更新系统软件包:
sudo apt update
sudo apt upgrade
2. 安装必要的依赖项:
sudo apt install apt - transport - https ca - certificates curl software - properties - common
3. 添加 Docker 官方的 GPG 密钥:
curl - fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor - o /usr/share/keyrings/docker - archive - keyring.gpg
4. 添加 Docker 的软件源:
echo "deb [arch=$(dpkg --print - architecture) signed - by=/usr/share/keyrings/docker - archive - keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release - cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. 更新软件包列表并安装 Docker:
sudo apt update
sudo apt install docker - ce docker - ce - cli containerd.io
  • 启动并配置 Docker
    1. 启动 Docker 服务:
sudo systemctl start docker
2. 设置开机自启动:
sudo systemctl enable docker
3. 将当前用户加入 `docker` 用户组(可选):
sudo usermod - aG docker $USER
注意:执行此命令后需重新登录以生效。
  • 验证安装:运行以下命令检查 Docker 是否安装成功:
docker --version

三、Docker 原理图

(一)Docker 架构原理

Docker架构原理图
Docker 的工作原理可以分为三个核心组件:Docker 引擎、镜像和容器。

  1. Docker 引擎(Docker Engine):这是 Docker 的核心,它实际上是一个客户端 - 服务器架构。Docker 引擎分为两个部分:
    • Docker Daemon(守护进程):这是一个常驻进程,负责管理 Docker 容器、镜像和网络等,接受 Docker 客户端的请求。
    • Docker 客户端:这是一个命令行工具或 API 接口,用户通过它向 Docker Daemon 发送请求,控制 Docker 容器的生命周期。
  2. 镜像(Image):镜像是 Docker 容器的模板,它包含了应用程序和运行它所需的所有依赖库。镜像是只读的,可以从公共或私有的镜像仓库(如 Docker Hub)中下载,也可以根据需求自己构建。镜像是轻量级和可移植的,帮助开发者快速创建容器。
  3. 容器(Container):容器是镜像的运行实例,类似于虚拟机中的虚拟机实例。容器是隔离的,但它与宿主机共享内核,这使得它比虚拟机更加高效。容器是可启动的、可停止的、可删除的,它也可以在不同的环境中运行。

(二)Docker 容器运行原理

Docker 容器的运行基于 Linux 内核的 cgroups(控制组)和 namespaces(命名空间):

  1. cgroups:这是一种资源限制机制,它允许 Docker 为每个容器分配一定的 CPU、内存、网络带宽等资源,防止容器之间互相干扰。
  2. Namespaces:命名空间机制是用来隔离容器之间的运行环境的。每个容器都有自己独立的网络、进程、文件系统等环境,容器之间互相看不到对方的内容,从而确保了容器的隔离性。

四、Docker 常用命令

(一)镜像相关命令

  1. 列出本地主机上的镜像
docker images

此命令会列出镜像的仓库源、标签版本号、镜像 ID、创建时间和大小等信息。
2. 搜索镜像

docker search [OPTIONS] 镜像名字

例如:

docker search mysql

可以使用 --limit 参数只列出指定数量的镜像,如:

docker search --limit 5 redis
  1. 拉取(下载)镜像
docker pull 某个XXX镜像名字[:TAG]

如果没有指定 TAG,则默认拉取最新版,等价于 docker pull 镜像名字:latest
4. 删除镜像
- 删除单个镜像:

docker rmi -f 镜像ID
- 删除多个镜像:
docker rmi -f 镜像名1:TAG 镜像名2:TAG
- 删除全部镜像:
docker rmi -f $(docker images -qa)

(二)容器相关命令

  1. 新建 + 启动命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

例如,使用 Ubuntu 镜像创建一个名为 mycontainer 的容器并在后台运行:

docker run -d --name mycontainer ubuntu
  1. 查看正在运行的容器
docker ps

如果想查看包括已停止的容器,可以使用:

docker ps -a
  1. 进入容器
docker exec -it <容器名或容器ID> /bin/bash

这将启动容器内的 Bash shell,让你能够与容器交互。
4. 停止容器

docker stop <容器名或容器ID>
  1. 启动已停止的容器
docker start <容器名或容器ID>
  1. 重启容器
docker restart <容器名或容器ID>
  1. 删除容器
docker rm <容器名或容器ID>

如果要删除运行状态的容器,可以使用 -f 参数强制删除:

docker rm -f <容器名或容器ID>

(三)其他常用命令

  1. 查看 Docker 版本
docker --version
  1. 查看 Docker 系统信息
docker info

五、Docker 的应用场景

(一)应用隔离

Docker 通过容器技术实现了操作系统级别的虚拟化,让应用和服务能在隔离的环境中运行,从而提供了一种轻量级的、可重复的、便携式的应用隔离解决方案。这使得开发者和系统管理员能够在不同的环境中快速部署和扩展应用,同时避免了因为环境依赖而产生的冲突问题。

  • 环境一致性的保障:当应用在开发、测试和生产等不同环境中迁移时,Docker 能确保环境的一致性。容器内包含了运行应用所需的所有依赖,确保应用在开发和部署过程中的环境一致性。
  • 容器与底层基础设施的隔离:Docker 容器与宿主操作系统之间提供了一个清晰的界限,减少了与底层基础设施的耦合。这让 Docker 在不同的操作系统和云平台上具有很好的可移植性。

(二)微服务架构

在微服务架构中,应用被分解成许多小型、自治的服务。Docker 提供的轻量级容器,非常适合微服务架构,每个微服务可以打包在单独的容器中进行部署、运行和管理。

  • 支持服务的独立性与扩展性:每个微服务可以放在单独的容器中,并且相互之间通过定义良好的 API 通讯。在需要时,可以独立地扩展或更新某个特定服务的容器而不影响其他服务。
  • 服务发现与负载均衡:在微服务架构中,Docker 容器需要能够自动发现其他服务容器并与之通讯。此外,根据流量和负载的变化自动进行负载均衡也是微服务架构常见的需求。

(三)持续集成与部署(CI/CD)

持续集成与持续部署是现代软件开发的重要实践,Docker 天然适配 CI/CD 流程,使软件开发的每一步都更加高效和自动化。

  • 流程标准化与自动化:Docker 容器可以确保应用在任何地方都以相同的方式运行,这一点对于自动化测试和部署至关重要。通过容器化,可以简化构建、测试和部署流程。
  • 持续交付的便捷性:Docker 容器的快速启动和停止特性使得新版本的应用能够迅速部署和回滚,从而加速持续交付的周期。

(四)开发测试环境的一致性

Docker 为开发人员和测试人员提供了一个与生产环境尽可能相符的环境,这减少了开发和测试中常见的环境差异问题。

  • 快速搭建和拆除环境:使用 Docker 可以快速启动或销毁用于开发和测试的环境,提高了开发与测试的效率。
  • 多环境并行运行:Docker 允许在同一台机器上运行多个不同配置或不同版本的应用环境,开发者可以使用 Docker 同时处理多个任务或测试多个版本的代码。

(五)应用迁移和优化

Docker 提供了一种简便的方式,使现有的传统应用可以更容易地迁移到现代的基础设施平台上,比如云环境,同时实现资源利用的优化。

  • 促进应用的云迁移:Docker 容器可以在云环境和数据中心无缝迁移,这帮助企业轻松实现混合云或多云策略。
  • 效率与性能的提升:通过 Docker,可低成本地实现负载调度和管理,优化系统的资源分配和利用,减少不必要的资源浪费。

六、Docker 带来的好处

(一)环境一致性

Docker 通过将应用程序及其所有依赖项打包到一个容器中,确保了从开发到生产的环境一致性。这减少了因环境配置不同而导致的问题,提高了应用的可靠性。同时,传统的软件部署方法需要在目标环境中手动配置和安装软件,而 Docker 通过简单的命令(如 docker run)即可启动预配置好的容器,大大简化了配置工作,降低了出错的可能性。

(二)快速部署

与传统虚拟机相比,Docker 容器的启动速度更快。虚拟机需要完整地启动一个操作系统,而 Docker 容器在几秒钟内即可启动,这使得部署过程更加迅速和高效。在灾难恢复场景中,Docker 支持容器级别的快照和备份,可以在任何时刻保存应用的状态,并在需要时快速恢复到该状态,保障了业务连续性。

(三)提高资源利用率

Docker 使用容器技术与宿主机共享内核但隔离其他资源,这使得 Docker 容器非常轻量级,能够在同一硬件上运行更多实例,从而提高资源利用率。相比于传统虚拟机,Docker 占用更少的内存和 CPU 资源,在同一台物理服务器上,可以部署更多的 Docker 容器,提升了部署密度和基础设施效率。

(四)简化管理操作

Docker 提供了一套完整的命令行工具和 API,使得容器的创建、监控、维护和更新变得简单和自动化。这降低了管理复杂性,提高了运维效率。同时,Docker 容器镜像可以打标签并管理不同版本,这使得回滚和升级变得更加容易,并且可以跟踪历史记录,类似于代码的版本控制系统。

(五)提高安全性

Docker 确保每个容器都在自己的独立环境中运行,与宿主机和其他容器完全隔离,这降低了安全风险。例如,一个容器中的应用程序被入侵或崩溃,不会影响在其他容器中运行的应用程序。此外,Docker 使用多种安全机制来增强容器的安全性,它将主机的敏感挂载点挂载为只读,并使用写时复制(copy - on - write)的文件系统来确保容器间不能读取彼此的数据,还限制容器内的应用程序对主机进行系统调用,与 SELinux 和 AppArmor 等安全措施兼容。

七、总结

Docker 作为一种开源的容器化平台,以其独特的优势在软件开发和运维领域得到了广泛的应用。通过本文的介绍,我们了解了 Docker 的安装教程、原理图、常用命令、应用场景以及带来的好处。无论是在微服务的构建、应用的部署、开发流程的标准化还是跨环境的流畅迁移,Docker 都展现出了其不可替代的优势。随着技术的不断发展,相信 Docker 将会在更多的领域发挥重要作用,为开发者和企业带来更多的便利和价值。"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/911870.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/911870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 可迭代的对象、迭代器 和生成器(Sentence类第3版:生成器函数)

Sentence类第3版&#xff1a;生成器函数 实现相同功能&#xff0c;但却符合 Python 习惯的方式是&#xff0c;用生成器函数代替 SentenceIterator 类。先看示例 14-5&#xff0c;然后详细说明生成器函数。 示例 14-5 sentence_gen.py&#xff1a;使用生成器函数实现 Sentence…

5G自协商

好的&#xff0c;下面是一个基于裸机 C 环境的自协商实现示例代码&#xff0c;支持 **最高 5G 并向下兼容**。这个代码框架假设你使用的是 IEEE 802.3 规范下的 **MDIO** 接口和常见的 **Marvell PHY**&#xff08;或类似支持 5G/2.5G 的PHY&#xff09;。 c #include <std…

sublime 4200 激活

目录 下载激活方式一&#xff1a;sublime 打开方式二&#xff1a;https://hexed.it 打开 下载 sublime官方下载 sublime_text_build_4200_x64.zip 激活 方式一&#xff1a;sublime 打开 1、复制 sublime_text.exe 为 sublime_text_activation.exe 2、直接使用 sublime_ 打开…

Ceph 和 MinIO

Ceph 和 MinIO 是两种主流的分布式存储系统&#xff0c;但它们的设计目标、架构和使用场景存在显著差异。以下是清晰的对比解析&#xff1a; &#x1f9e9; 核心定位对比 维度CephMinIO定位统一存储平台&#xff08;块/对象/文件&#xff09;纯对象存储&#xff08;S3兼容&…

cili3d笔记20 正交投影3d重建笔记1

正交视图转3d mostFrequentCluster.lines.forEach(line > {const [x1, y1, x2, y2] line;let xhat{x1,x2};let yhat{y1,y2};}); 没考虑到侧视图 const clusters clusterLines(inputlines, 5);const lines3d:[number,number,number,number,number,number][][]const { mostM…

【Docker基础】Docker容器生命周期管理:从创建到删除的完整指南

目录 1 容器生命周期概述 2 容器创建&#xff08;docker create&#xff09; 2.1 docker create命令详解 2.2 创建流程解析 2.3 创建与运行的区别 3 容器启动&#xff08;docker start&#xff09; 3.1 docker start命令详解 3.2 启动流程解析 3.3 启动与运行的区别 …

Docker、Docker composer与Docker desktop

文章目录 Docker、Docker composer与Docker desktop一、docker、docker composer、docker desktop1.1 Docker1.2 Docker Compose1.3 Docker Desktop1.4 三者之间的区别 二、docker desktop的安装和换源2.1 前期准备WSL2 2.1 Docker Desktop 安装下载 Docker Desktop安装 Docker…

H5录音、图文视频IndexDB储存最佳实践:用AI生成语音备忘录

引言 早在大学的时候&#xff0c;我就期望做一款属于自己的 APP&#xff0c;可惜那时不懂技术。现在有了技术&#xff0c;但却没有时间。好在 AI 的快速发展终于让我完成了这个愿望。于是&#xff0c;我用半天的时间&#xff0c;用 AI 生成了一个纯前端的 H5 程序&#xff1a;…

简述C++ nlohmann/json 库

目录 JSON概述 nlohmann/json 库的使用 创建json数组/对象 字符串解析&#xff08;parse反序列化&#xff09; 数据访问 序列化 文件读写 JSON概述 JSON(JavaScrip Object Notation)是一种轻量级、跨语言的数据交换格式。它基于 ECMAScript 子集&#xff0c;以独立于编程…

定制开发开源AI智能名片与S2B2C商城小程序的内容分发体系构建:基于“1+N“素材复用模型的创新实践

摘要&#xff1a;在数字内容爆炸式增长的当下&#xff0c;本文针对内容分发效率低下的行业痛点&#xff0c;提出基于"定制开发开源AI智能名片S2B2C商城小程序"的一体化解决方案。通过构建"1篇长文10条长视频20条短视频10个平台"的素材复用公式&#xff0c;…

c++26新功能—hive容器

一、容器的演进 科学进步的过程一般来说都是从先解决常用的、迫切的问题开始&#xff0c;然后再逐步解决一些少见不迫切的问题&#xff0c;直到最终解决到认知程度内的诸多问题。举一个网上的例子&#xff0c;以前说咱们无法生产水笔的尖头上的钢球&#xff0c;其实这对于国内…

Kafka 源码剖析:消息存储与协议实现(二)

四、协议实现机制探秘 4.1 生产者协议 4.1.1 消息发送流程 Producer 在向 Kafka 集群发送消息时&#xff0c;首先会根据分区策略选择目标分区 。常见的分区策略有轮询、按消息键的哈希值分区以及自定义分区策略 。如果生产者在发送消息时指定了分区号&#xff0c;那么消息就…

Vue.js 与 TypeScript:最佳实践

1. 引言 Vue.js 是一个渐进式、灵活的 JavaScript 框架&#xff0c;广泛用于构建用户界面和单页应用&#xff08;SPA&#xff09;。而 TypeScript 是 JavaScript 的一个超集&#xff0c;添加了静态类型和其他高级特性。将两者结合使用&#xff0c;可以帮助开发者构建更具可维护…

webpack5 css-loader:从基础到原理

webpack 处理样式 webpack本身是不能识别样式资源的&#xff0c;需要借助Loader来帮助webpack解析样式资源&#xff0c;样式资源包括但不限于css/less/sass/scss/styl 未使用样式处理加载器前 运行webpack打包命令 bash npx webpack报错信息如图&#xff0c;提示无法识别css…

【GESP】C++三级练习 luogu-B2096 直方图

GESP C三级练习&#xff0c;一维数组练习&#xff0c;难度★★☆☆☆。 题目题解详见&#xff1a;【GESP】C三级练习 luogu-B2096 直方图 | https://www.coderli.com/gesp-3-luogu-b2096/ 【GESP】C三级练习 luogu-B2096 直方图 | OneCoderGESP C三级练习&#xff0c;一维数组…

【网站内容安全检测】之2:从网站所有URL页面中提取所有外部及内部域名信息

还没写成Go的&#xff0c;用Python吧&#xff0c;稍微慢一点 依赖内容&#xff08;安装命令pip install -r requirements.txt) requirements.txt aiohttp beautifulsoup44.12.2 tqdm4.66.1 redis5.2.1 motor3.3.1 pymongo4.6.0 chardet提取域名的程序 domain_extractor.py …

【LLaMA-Factory 实战系列】四、API 篇 - 部署推理服务与批量调用实战

【LLaMA-Factory 实战系列】四、API 篇 - 部署推理服务与批量调用实战 1. 引言2. 推理后端的选择与对比3. 部署 API 推理服务3.1 创建 API 配置文件3.2 启动 API 服务3.3 探索交互式 API 文档 4. 编写 Python 脚本进行批量调用4.1 准备工作4.2 批量调用脚本4.3 运行脚本并查看结…

C++工厂模式的作用(工厂方法、Factory Method、Factory Pattern)

文章目录 代码示例工厂的作用1. 对象创建的封装 &#x1f3ed;2. 解耦客户端和具体类 &#x1f517;3. 统一的创建入口 &#x1f6aa;4. 隐藏实现细节 &#x1f3ad; 在这个项目中的具体体现总结 代码示例 https://gitee.com/arnold_s/my-learning-test/tree/master/20250610_…

9-C#修改任务管理的名称

C#修改任务管理的名称

Fisco Bcos学习 - 搭建第一个区块链网络

文章目录 一、前言二、环境准备三、安装依赖在 macOS 上安装依赖在 Ubuntu 上安装依赖在 CentOS 上安装依赖 四、创建操作目录并下载安装脚本五、搭建单群组 4 节点联盟链六、启动 FISCO BCOS 链七、检查进程八、检查日志输出 在数字化时代&#xff0c;区块链技术正逐渐成为推动…