Docker 安装与第一行命令:把你的电脑变成“万能集装箱码头”
简单说,Docker 就是一套“标准化打包工具”,让你把任何软件连同它的运行环境一起打包带走,到任何电脑上都能直接运行,就像把整个厨房装进一个行李箱,到哪都能立刻做饭。
为什么会有 Docker?——一个“软件搬家”的悲惨故事
想象一下这个场景:你花了三天三夜,终于在自己的电脑上搭建好了一个复杂的网站。数据库、缓存、前端框架、后端服务……所有东西都配置得妥妥当当。然后老板说:“把这个网站部署到服务器上吧。”
你兴冲冲地把代码拷过去,一运行——报错。服务器上没有 Python 3.9,只有 3.6。数据库版本不对。环境变量没设置。依赖包缺了十几个。你开始疯狂百度,装这个配那个,折腾两天,服务器终于能跑了。但三个月后,服务器要迁移,你又得重来一遍……
这就是 Docker 诞生前的“软件搬运噩梦”。每个软件都像一套精密仪器,需要特定的“房间”(操作系统、版本、依赖)才能工作。而 Docker 的发明者想:为什么不能把软件和它的“房间”一起打包?就像搬家时,把整个房间连同家具一起搬走,而不是只搬家具过去再重新组装。
于是 Docker 诞生了——它创造了一种叫“容器”(Container)的轻量级虚拟房间。每个容器里装着软件 + 它需要的一切,到任何电脑上都能直接运行。
第一步:安装 Docker——给电脑装个“集装箱管理系统”
安装 Docker 就像给电脑装一个“集装箱调度中心”。你不需要理解它的底层原理,就像你不需要知道起重机怎么造,也能用集装箱运货。
Windows 用户(最省心版)
- 打开浏览器,搜索“Docker Desktop for Windows”
- 下载安装包(大约 500MB,像下载一个大型游戏)
- 双击安装,一路“下一步”
- 安装完成后,电脑会提示重启。重启后,桌面上会出现一个鲸鱼图标(Docker 的 logo)
注意:Windows 用户需要确保电脑开启了“硬件虚拟化”(大部分新电脑默认开启)。如果安装后提示“WSL 2 未安装”,按提示安装一个 Linux 子系统就行——就像给 Windows 装一个“翻译官”,让 Docker 能和系统顺畅沟通。
Mac 用户(更简单)
- 打开浏览器,搜索“Docker Desktop for Mac”
- 下载安装包(Intel 芯片和 Apple 芯片版本不同,注意选择)
- 把安装包拖进“应用程序”文件夹
- 打开 Docker,输入密码授权
Linux 用户(最灵活,但步骤稍多)
打开终端(相当于电脑的命令行),输入以下命令(就像给电脑下指令):
# 更新软件包列表(相当于刷新购物清单) sudo apt update # 安装 Docker(相当于下单购买) sudo apt install docker.io # 启动 Docker 并设置开机自启 sudo systemctl start docker sudo systemctl enable docker安装完成后,打开终端输入docker --version,如果看到类似Docker version 24.0.7的输出,就说明安装成功了。
第一行命令:Hello World——让 Docker 说句话
安装完成后,我们来执行 Docker 的“第一声啼哭”——运行一个最简单的容器。
打开终端(Windows 用户打开命令提示符或 PowerShell),输入:
docker run hello-world按下回车,你会看到类似这样的输出:
Hello from Docker! This message shows that your installation appears to be working correctly. ...发生了什么?这就像你第一次使用外卖 App——你点了一个“Hello World”套餐(docker run hello-world),Docker 发现本地没有这个套餐,就自动从“云端仓库”(Docker Hub)下载了一份,然后在一个隔离的“小厨房”(容器)里运行它,最后端出一盘“Hello World”的消息给你看。
理解核心概念:三个生活类比
1. 镜像(Image)——像“菜谱”
镜像就是容器的“菜谱”。菜谱上写着:需要什么食材(依赖)、怎么切菜(配置)、用什么锅(运行环境)。你拿着菜谱,随时可以做出同样的菜(启动容器)。镜像本身是只读的,不能修改——就像你不能在菜谱上直接改菜的味道,只能按菜谱做。
2. 容器(Container)——像“做好的菜”
容器是镜像的“运行实例”。你按照菜谱(镜像)做了一道菜(容器),这道菜可以端上桌(提供服务)。你可以同时做多道同样的菜(多个容器),每道菜互不影响。容器可以被启动、停止、删除,就像菜可以吃、可以放冰箱、可以倒掉。
3. 仓库(Registry)——像“菜谱图书馆”
Docker Hub 就是最大的“菜谱图书馆”,里面有几百万份菜谱(镜像)。你可以从图书馆借菜谱(下载镜像),也可以把自己写的菜谱上传(发布镜像)。docker run hello-world就是从图书馆借了一份叫“hello-world”的菜谱。
第二个命令:运行一个真正的网站
光看 Hello World 不过瘾,我们来运行一个真正的网站。输入:
docker run -d -p 8080:80 nginx拆解这个命令(就像拆解一个魔法咒语):
docker run:启动一个容器(点菜)-d:后台运行(让厨房自己忙活,别占用你的终端)-p 8080:80:端口映射(把电脑的 8080 端口“接一根水管”到容器的 80 端口)nginx:使用 nginx 镜像(一个流行的网页服务器软件)
命令执行后,打开浏览器,访问http://localhost:8080,你会看到一个“Welcome to nginx!” 的页面。
发生了什么?你从菜谱图书馆借了 nginx 的菜谱(镜像),做了一道菜(容器),然后把这道菜的“上菜窗口”(端口)映射到了你电脑的 8080 号窗口。现在任何人访问你的电脑的 8080 端口,就能看到 nginx 提供的网页。
管理你的容器:三个救命命令
1. 查看运行中的容器
docker ps就像查看厨房里正在做的菜:哪道菜在煮(容器 ID)、用的什么菜谱(镜像)、运行了多久(创建时间)。
2. 停止容器
docker stop [容器ID或名称]比如docker stop nginx或docker stop 3a4b5c6d(用docker ps看到的 ID 前几位)。就像关掉炉火,让菜停止烹饪。
3. 删除容器
docker rm [容器ID或名称]就像把做好的菜倒掉,清理厨房。注意:删除前必须先停止容器。
一个完整的“从零到网站”流程
让我们把刚才学的串起来,模拟一个真实场景:你想在本地测试一个网站,然后把它部署到服务器。
拉取镜像(从图书馆借菜谱):
docker pull nginx启动容器(按菜谱做菜,并开放端口):
docker run -d -p 8080:80 --name my-website nginx这里
--name my-website给容器起了个名字,方便管理。验证:浏览器访问
http://localhost:8080,看到欢迎页面。停止并删除(测试完毕,清理环境):
docker stop my-website docker rm my-website
关键点:整个过程你不需要安装 nginx,不需要配置环境变量,不需要处理依赖冲突。Docker 帮你把 nginx 连同它需要的 Linux 环境、配置文件、依赖库全部打包在一个容器里。你在自己电脑上测试通过后,把同样的命令在服务器上跑一遍,结果完全一致。
常见问题:新手最纠结的 3 个点
Q1:Docker 和虚拟机有什么区别?
生活类比:虚拟机就像租一整套房子(包括地基、墙壁、水电),而 Docker 就像租一个集装箱(只有你需要的那部分空间)。虚拟机启动要几分钟,Docker 启动只要几秒。虚拟机占用几个 GB,Docker 镜像通常只有几百 MB。
Q2:为什么我运行docker run后,终端卡住了?
因为你忘了加-d参数。没有-d,容器在前台运行,占用你的终端。按Ctrl+C可以退出,但容器也会停止。加上-d让它在后台运行。
Q3:端口冲突怎么办?
如果你运行docker run -p 8080:80 nginx时报错“port is already allocated”,说明 8080 端口已经被别的程序占用了。换个端口,比如-p 8081:80,然后访问localhost:8081。
下一步:你已经会了 80% 的 Docker
别惊讶,Docker 的核心操作就这么几个命令。你学会了:
- 安装 Docker
- 运行容器(
docker run) - 查看容器(
docker ps) - 停止/删除容器(
docker stop/docker rm) - 理解镜像、容器、仓库的概念
这已经足够你开始使用 Docker 了。就像学开车,你不需要先学会发动机原理才能上路。先会启动、挂挡、刹车,剩下的(网络配置、数据持久化、多容器协作)都是在实践中慢慢掌握的。
现在,打开终端,运行docker run -d -p 8080:80 nginx,然后打开浏览器看看——你已经用 Docker 运行了第一个真正的服务。这个服务可以跑在任何有 Docker 的电脑上,完全一致,毫无差异。这就是 Docker 的魔力。