Docker安装与基础操作全攻略:从环境准备到核心命令实战
1. 从“Docter”到Docker一个常见的拼写错误与容器技术的入门如果你在搜索引擎里输入“Docter的安装和基础操作”大概率是想找“Docker”的相关内容。这其实是一个非常普遍且有趣的拼写错误就像把“Git”打成“Get”一样。这个小小的拼写差异恰恰反映了Docker技术已经像医生Doctor一样成为现代软件开发和运维领域中不可或缺的“诊断”和“治疗”工具。它通过容器化技术为应用提供了一致的运行环境从根本上解决了“在我机器上能跑到你那就出问题”的经典难题。无论你是刚接触后端开发的新手还是希望优化现有部署流程的运维工程师掌握Docker的安装和基础操作都是迈入云原生和现代化应用部署世界的第一步。这篇文章我就以一个过来人的身份和你聊聊在Windows、macOS和Linux这三大主流操作系统上如何避开那些常见的坑把Docker稳稳当当地装好并带你上手最核心的几个操作让你能立刻用起来。2. 安装前的“体检”理解虚拟化与系统要求在真正动手安装之前我们必须先给电脑做个“体检”。Docker的核心依赖于操作系统的虚拟化技术但不同系统下的实现方式和前置条件截然不同。盲目安装你很可能会卡在Virtualization support not detected或Docker Desktop failed to start这样的错误上白白浪费几个小时。2.1 Windows系统Hyper-V与WSL2的抉择对于Windows用户尤其是Win10和Win11你有两条主要路径传统的Hyper-V和现代的WSL 2Windows Subsystem for Linux 2。为什么是WSL 2这是目前微软和Docker官方共同推荐的首选方案。它不是一个完整的虚拟机而是一个在Windows内核上运行的Linux兼容层。相比Hyper-VWSL 2启动更快、资源占用更少并且能实现与Windows文件系统的高性能互操作。Docker Desktop for Windows可以无缝集成到WSL 2中让你感觉像是在用Linux原生Docker一样顺滑。必须完成的“体检”步骤确认CPU虚拟化已开启重启电脑进入BIOS/UEFI设置通常是开机时按F2、Del或F12找到“Intel Virtualization Technology (VT-x)”或“AMD-V”选项确保其状态为“Enabled”。这是所有虚拟化技术的硬件基础。检查Windows版本Docker Desktop要求Win10 2004内部版本19041或更高版本以及Win11。低于此版本的系统会遇到win10版本低无法安装docker的错误唯一的升级路径就是更新系统。启用“Windows虚拟机监控程序平台”和“WSL”功能在Windows搜索栏输入“启用或关闭Windows功能”打开对话框。你需要勾选“适用于Linux的Windows子系统”这是WSL 1安装WSL 2的先决条件。“虚拟机平台”这是WSL 2和Hyper-V的底层支持。 勾选后重启电脑。这一步是解决virtualisation support wasn’t detected错误的关键。2.2 macOS系统利用原生虚拟化框架macOS的情况相对简单。从2010年后的Intel Mac到现在的Apple SiliconM1/M2/M3MacDocker Desktop都能很好地支持。它的底层利用的是macOS自带的Hypervisor.framework虚拟化框架无需用户手动配置。需要注意的细节芯片架构确保你下载的Docker Desktop安装包与你的芯片匹配Intel或Apple Silicon。安装错误版本虽然可能通过Rosetta 2运行但性能和稳定性会打折扣。系统权限安装后首次运行时系统会请求安装网络助手和权限提升务必点击“允许”并输入密码。很多新手卡在这里以为安装失败了。2.3 Linux系统最原生的体验在Linux上安装Docker是最直接、最“原生”的体验因为容器技术本就源于Linux。主流发行版如Ubuntu、CentOS、Debian都有成熟的安装方式。但即便如此也有坑点。关键准备卸载旧版本如果你的系统上存在可能叫做docker、docker.io或docker-engine的旧版本软件包务必先彻底卸载它们。残留的旧配置和新版本冲突是启动失败的常见原因。sudo apt-get remove docker docker-engine docker.io containerd runc存储驱动选择对于生产环境需要根据你的文件系统如ext4, xfs和需求选择合适的存储驱动如overlay2。不过对于初学者使用Docker官方仓库安装的默认配置通常就是最优解。完成上述针对你操作系统的“体检”后我们才算是拿到了安装Docker的“健康证明”可以进入正式的安装环节了。3. 分步安装指南从下载到验证这里我将以目前最主流、对新手最友好的WindowsWSL 2后端和LinuxUbuntu为例为例详解安装过程。macOS的安装过程近乎“下一步到底”遇到问题可参考官网文档。3.1 Windows平台Docker Desktop安装详解下载安装包访问 Docker 官网的 Docker Desktop for Windows 下载页。如果你已完成2.1节的体检系统会自动推荐适合你硬件的版本通常是带有WSL 2后端的稳定版。直接下载.exe安装文件。运行安装程序双击安装文件。安装过程中安装向导会提示你选择是否使用WSL 2而非Hyper-V作为默认后端。请务必勾选这个选项除非你有明确的理由必须使用Hyper-V比如要同时运行VMware Workstation但两者通常不兼容。关键配置安装后首次启动安装完成后从开始菜单启动“Docker Desktop”。它会先进行初始化可能需要几分钟。首次启动成功时通常会弹出一个庆祝界面并可能提示你创建Docker Hub账户。你可以选择跳过这不会影响本地使用。在系统托盘右下角找到Docker的鲸鱼图标右键点击选择“Settings”。在“General”设置中建议勾选“Start Docker Desktop when you log in”方便日常使用。在“Resources” - “WSL Integration”中确保你常用的WSL发行版比如Ubuntu后面的开关是打开的。这允许你在WSL终端里直接使用docker命令。验证安装打开 PowerShell 或 WSL 终端输入以下命令docker --version docker run hello-world如果第一行输出了Docker版本号如Docker version 24.0.7, build afdd53b第二行命令下载了一个镜像并运行最后打印出“Hello from Docker!”等信息那么恭喜你安装成功了。注意如果启动失败Docker Desktop通常会给出明确的错误提示。最常见的依然是虚拟化问题。此时应返回2.1节仔细检查BIOS虚拟化开关和Windows功能是否已启用。另一个常见问题是与杀毒软件或防火墙冲突可尝试暂时禁用后再启动Docker。3.2 Linux平台Ubuntu使用官方仓库安装在Linux上我强烈建议使用Docker提供的官方仓库进行安装而不是使用发行版自带的旧版本软件包。官方仓库能确保你获得最新的稳定版本和及时的安全更新。卸载旧版本如有如前所述先清理可能存在的旧版本。安装依赖工具sudo apt-get update sudo apt-get install ca-certificates curl gnupg添加Docker官方GPG密钥和仓库# 创建密钥环目录 sudo install -m 0755 -d /etc/apt/keyrings # 下载并导入Docker的GPG公钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod ar /etc/apt/keyrings/docker.gpg # 添加稳定版仓库到APT源列表 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release echo $VERSION_CODENAME) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null这一长串命令的目的是安全地配置软件源。GPG密钥用于验证下载的软件包是否来自Docker官方防止被篡改。安装Docker引擎sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin这里安装了核心的Docker引擎、客户端、容器运行时以及两个非常实用的插件Buildx用于多架构镜像构建和Compose插件用于编排多容器应用。验证安装sudo docker run hello-world由于Linux下默认需要sudo权限才能运行Docker命令你会被要求输入密码。同样看到“Hello from Docker!”即表示成功。可选但重要以非root用户身份管理Docker每次都要输入sudo很麻烦也不安全。可以将你的用户加入docker组sudo usermod -aG docker $USER执行此命令后你必须完全注销当前用户并重新登录或者重启电脑这个组权限变更才会生效。之后你就可以直接使用docker命令了。4. 镜像与容器理解Docker的核心概念安装成功只是开始要玩转Docker必须理解两个最核心的概念镜像Image和容器Container。你可以把它们类比成“程序安装包”和“正在运行的程序”。镜像一个只读的模板里面包含了运行某个软件所需的所有内容——代码、运行时环境、库、环境变量和配置文件。nginx:alpine、mysql:8.0、python:3.11-slim这些都是镜像。它类似于虚拟机中的.iso系统镜像但更轻量。容器是镜像的一个运行实例。当你执行docker run时Docker会从镜像创建一个可写的容器层然后在这个隔离的环境里启动进程。容器是轻量级、可移植的并且彼此隔离。一个关键比喻镜像就像是盖房子用的蓝图和预制件而容器则是根据这份蓝图实际搭建起来并正在居住的房子。你可以用同一份蓝图镜像盖出无数个房子容器它们初始结构一样但内部生活产生的数据各不相同。理解了这一点我们再来看操作命令就不会混乱了。所有命令基本都围绕“获取镜像”、“运行/管理容器”展开。5. 必须掌握的Docker基础操作命令下面这些命令是你每天都会用到的“生存技能”。我按照使用场景来分组并解释每个参数常见的用法。5.1 镜像相关操作获取与管理你的“蓝图”搜索镜像当你不知道确切镜像名时可以到Docker Hub默认的公共镜像仓库搜索。docker search nginx这会列出所有包含“nginx”关键词的官方及个人镜像。OFFICIAL列为[OK]的是官方维护的镜像通常更可靠。拉取镜像从仓库下载镜像到本地。docker pull nginx:alpinenginx是镜像名alpine是标签Tag通常用来指定版本或变体如latest,1.25,alpine精简版。强烈建议总是显式指定标签而不是依赖默认的latest因为latest可能随时指向新版本导致你的环境不稳定。列出本地镜像docker images # 或使用更强大的新命令 docker image ls这里你会看到镜像的仓库名、标签、ID、创建时间和大小。删除镜像docker rmi image_id或image_name:tag # 示例删除所有名为nginx的镜像 docker rmi nginx如果镜像有对应的容器存在即使容器已停止你需要先删除容器才能删除镜像或者使用-f强制删除不推荐。5.2 容器生命周期管理让你的“房子”运转起来运行容器这是最核心的命令。docker run -d --name my-nginx -p 8080:80 nginx:alpine-d后台运行detached mode。--name给容器起个名字方便后续管理。不用名字的话Docker会分配一个随机名字。-p 8080:80端口映射将宿主机的8080端口映射到容器的80端口。这样你访问http://localhost:8080就能看到容器内的Nginx页面了。最后是镜像名。这个命令会先检查本地是否有nginx:alpine镜像没有则自动拉取然后创建并运行容器。列出容器docker ps # 查看正在运行的容器 docker ps -a # 查看所有容器包括已停止的停止/启动/重启容器docker stop my-nginx docker start my-nginx docker restart my-nginx进入运行中的容器有时需要排查问题或执行临时命令。docker exec -it my-nginx /bin/sh-it-i保持标准输入打开-t分配一个伪终端合起来让我们可以交互式操作。/bin/sh或/bin/bash指定要启动的shell。Alpine镜像默认用shUbuntu等用bash。查看容器日志这是排查应用问题的第一现场。docker logs my-nginx # 查看历史日志 docker logs -f my-nginx # 实时跟踪日志输出类似 tail -f删除容器docker rm my-nginx # 删除已停止的容器 docker rm -f my-nginx # 强制删除运行中的容器5.3 数据持久化与端口映射让容器变得有用容器本身是临时的停止删除后其内部产生的所有数据都会丢失。要让数据持久化必须使用卷Volume或绑定挂载Bind Mount。使用命名卷这是Docker管理数据的最佳实践数据存储在宿主机的特定区域与容器生命周期分离。docker run -d --name mysql-demo \ -v mysql_data:/var/lib/mysql \ # mysql_data是卷名/var/lib/mysql是容器内路径 -e MYSQL_ROOT_PASSWORDmy-secret-pw \ mysql:8.0即使删除了mysql-demo容器名为mysql_data的卷依然存在下次启动新容器时挂载它数据就恢复了。使用绑定挂载将宿主机的一个目录直接挂载到容器内适合开发时同步代码。docker run -d --name nginx-dev \ -p 80:80 \ -v /home/user/my-website:/usr/share/nginx/html:ro \ # 宿主机路径:容器路径:只读 nginx:alpine这样你修改/home/user/my-website下的HTML文件Nginx容器内能立即生效。6. 实战演练运行一个简单的Web应用栈光说不练假把式。我们用一个最简单的例子把上面的命令串起来运行一个Python Flask应用并用Nginx做反向代理。这里我们用docker run命令直接完成更复杂的编排会用到docker-compose。准备一个简单的Flask应用app.pyfrom flask import Flask app Flask(__name__) app.route(/) def hello(): return Hello from Flask inside Docker! if __name__ __main__: app.run(host0.0.0.0, port5000)为Flask应用编写DockerfileDockerfile# 使用官方Python精简镜像 FROM python:3.11-slim # 设置工作目录 WORKDIR /app # 复制依赖文件并安装 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 声明容器运行时监听的端口 EXPOSE 5000 # 启动命令 CMD [python, app.py]同时创建requirements.txt文件内容为Flask2.3.3。构建Flask应用镜像docker build -t my-flask-app .这个命令会在当前目录.寻找Dockerfile并构建一个名为my-flask-app的镜像。运行Flask容器docker run -d --name flask-container -p 5000:5000 my-flask-app访问http://localhost:5000你应该能看到“Hello from Flask inside Docker!”。运行Nginx容器并配置反向代理简化版使用默认配置docker run -d --name nginx-container -p 8080:80 nginx:alpine访问http://localhost:8080看到Nginx欢迎页。要让它代理到Flask需要修改Nginx配置并挂载进去这涉及到进入容器修改文件或使用自定义镜像是下一步的学习内容。通过这个简单的流程你实践了镜像构建、容器运行、端口映射。虽然两个容器还没联动起来但你已经完成了单容器应用的部署闭环。7. 避坑指南与进阶学习路径在学习和使用Docker的过程中我踩过不少坑这里分享几个最常见的权限错误在Linux上最常见的错误是Got permission denied while trying to connect to the Docker daemon socket。这就是因为你没有将用户加入docker组或者加了组但没有重新登录会话。务必记得执行usermod后要注销重登。端口冲突docker run -p 80:80失败提示端口被占用。用netstat -tulnp | grep :80找出谁占用了宿主机的80端口停止该服务或改用其他端口如-p 8080:80。磁盘空间不足Docker镜像、容器和卷会占用大量磁盘空间。定期清理无用资源docker system prune -a # 清理所有未使用的镜像、容器、网络和卷慎用会删掉停止的容器和没被引用的卷 docker image prune # 仅清理悬空镜像未被任何容器引用的镜像镜像拉取慢默认从Docker Hub拉取镜像在国内可能很慢。为Docker Daemon配置国内镜像加速器Registry Mirror是必做操作。在Docker Desktop的设置中Linux在/etc/docker/daemon.json添加如https://registry.docker-cn.com或阿里云、腾讯云等提供的加速地址。掌握了安装和这些基础命令你已经可以应对80%的日常场景。接下来我建议你沿着这个路径深入学习Dockerfile编写掌握FROM,RUN,COPY,CMD,ENTRYPOINT等指令学会构建自己的镜像。使用Docker Compose当你需要管理多个关联容器如Web应用数据库缓存时用docker-compose.yml文件来定义和启动整个应用栈比一堆docker run命令高效得多。理解Docker网络学习桥接网络、主机网络等让容器之间、容器与外部能够按需通信。深入存储卷理解Volume Driver、备份恢复等。Docker的世界很大但入门并不难。从解决“安装”这个拼写错误开始你已经打开了这扇门。剩下的就是在实际项目中不断实践和探索。记住容器化的核心思想是“一次构建处处运行”以及“基础设施即代码”。当你开始用Dockerfile和Compose文件来定义你的环境时你就真正开始享受它带来的可重复性和便利性了。

相关新闻

前缀和:中心下标与数组乘积

前缀和:中心下标与数组乘积

文章目录一、左右信息的统一视角二、寻找数组的中心下标三、除了自身以外数组的乘积一、左右信息的统一视角 对于下标 i,可以把数组拆成三部分: [0, i) nums[i] (i, n)中心下标比较左右两侧的和;除自身以外数组的乘积则把左右两侧的乘积相…

2026/10/25 17:18:05 阅读更多 →
AI 画完审批流,先别点保存:我给分支路由加了两道门禁

AI 画完审批流,先别点保存:我给分支路由加了两道门禁

让 AI 生成审批流并不难:给它表结构、节点角色和金额规则,几秒钟就能画出一张“看起来很完整”的流程图。真正危险的恰恰是这种完整感——节点都在、线也连着,但某条线可能指向不存在的节点;分支代码看着合理,却从没拿…

2026/10/23 19:18:30 阅读更多 →
Flutter+OpenHarmony高校资产管理方案解析

Flutter+OpenHarmony高校资产管理方案解析

1. 项目背景与核心价值高校固定资产管理一直是后勤管理中的痛点领域。传统纸质台账或简单电子表格管理方式存在资产盘点效率低、跨部门调拨流程繁琐、实时状态更新滞后等问题。某985高校后勤处数据显示,仅2022年因资产定位不清导致的重复采购金额就达37万元。这个基…

2026/10/25 20:27:25 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →