Docker基础:Docker的安装与基本命令
说实话,很多新手一上来就急着敲命令,结果环境没配好,后面全崩了。Docker的安装其实不难,但不同操作系统有各自的坑。我当年第一次在Windows上装Docker,折腾了整整一下午——后来发现是没开虚拟化。
咱们先把环境搭好,再学那几条最核心的命令。你只要会用 pull、run、ps、stop、rm 这五个,日常操作就够用了。
安装概览
Docker 的安装方式因系统而异。我个人习惯这样选择:
| 平台 | 推荐安装方式 | 核心注意事项 |
|---|---|---|
| Linux (Ubuntu/Debian) | apt 仓库安装 | 需要 sudo 权限,记得加用户组 |
| macOS | Docker Desktop for Mac | Intel / Apple Silicon 版本不同 |
| Windows | Docker Desktop + WSL2 后端 | 必须开启硬件虚拟化 |
Linux 上安装 Docker
我在项目中遇到最多的就是 Linux 服务器部署。装 Docker 之前,先确认内核版本——低于 3.10 的话,很多功能跑不起来。
标准安装步骤:
# 卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc
# 更新包索引并安装依赖
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker 引擎
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动并验证
sudo systemctl enable docker
sudo systemctl start docker
docker --version
避坑指南:我曾经忘记把当前用户加入 docker 组,结果每次执行 docker 命令都要加 sudo,特别烦。做完上面步骤后,务必执行一下:
sudo usermod -aG docker $USER
newgrp docker
然后重新登录,就可以不用 sudo 直接敲 docker 命令了。
macOS 上安装 Docker
macOS 用户直接用 Docker Desktop 就好。但要注意芯片架构的区别——Apple Silicon 的机器要下载 Docker Desktop for Apple Silicon 版本。
安装步骤很简单:
- 去 Docker 官网下载对应芯片的 DMG 安装包。
- 双击安装,把 Docker 图标拖进 Applications 文件夹。
- 启动 Docker Desktop,等待顶部状态栏的小鲸鱼图标稳定(不再转圈)。
验证安装:
docker --version
docker run hello-world
如果 hello-world 能正常打印信息,说明安装完美。我在 macOS 上遇到过 Docker Desktop 占用内存偏高的问题,解决方案是进设置,把资源限制调到 4GB 内存、2 个 CPU 核心,基本就稳了。
Windows 上安装 Docker
Windows 的情况比较特殊。早期我用 Docker Toolbox,体验很差。现在建议直接用 Docker Desktop + WSL2 后端。为什么要这样做?说白了,WSL2 才是真正的 Linux 内核,跑容器性能基本无损耗。
准备工作:
- 开启硬件虚拟化(BIOS 里找 Intel VT-x 或 AMD SVM)。
- 安装 WSL2,并设置它为默认版本。
- 下载 Docker Desktop for Windows,安装时勾选 Use WSL 2 instead of Hyper-V。
验证命令和 macOS 一样:
docker --version
docker run hello-world
小技巧:我建议你在 Windows 上装个 Windows Terminal,配合 WSL2 的 Ubuntu 发行版,直接在里面敲 docker 命令,比在 PowerShell 里顺手得多。你想想看,真正生产环境跑的也是 Linux,习惯一致很重要。
Docker 基本命令
环境搭好了,咱们开始上手命令。你只要掌握这几个,就能完成 80% 的日常操作。我平时排查问题,翻来覆去用的也就是它们。
| 命令 | 作用 | 常用场景 |
|---|---|---|
docker pull |
下载镜像到本地 | 从 Docker Hub 拉取 nginx、redis 等 |
docker run |
创建并启动容器 | 启动一个 nginx 服务 |
docker ps |
列出运行中的容器 | 查看当前有哪些容器在跑 |
docker stop |
停止一个运行中的容器 | 优雅关闭服务 |
docker rm |
删除已停止的容器 | 清理不再需要的容器 |
1. docker pull — 拉取镜像
镜像就是容器的模板。没有镜像,容器跑不起来。我第一次用 Docker 时,直接 docker run 发现它自动帮我拉取了镜像,很省心。但批量部署时,提前 pull 到本地会更可控。
# 拉取最新版 nginx
docker pull nginx
# 拉取指定版本
docker pull nginx:1.25-alpine
# 从私有仓库拉取
docker pull registry.mycompany.com/myapp:latest
为什么会用 alpine 版本?它体积小,基础镜像就 5MB 左右,部署快、攻击面小。我个人习惯,生产环境尽量用 alpine 变体。
2. docker run — 运行容器
这是最核心的命令。它把镜像实例化成一个容器。你想想看,镜像好比是 ISO 文件,容器就是装好的系统。
# 最简单的运行方式(前台运行,CTRL+C 退出)
docker run nginx
# 后台运行(-d 表示 daemon 模式)
docker run -d nginx
# 映射端口(宿主机 8080 到容器 80)
docker run -d -p 8080:80 nginx
# 给容器命名,方便管理
docker run -d --name my-nginx -p 8080:80 nginx
核心参数:
-d:后台运行容器,不占用当前终端。-p:端口映射,格式宿主机端口:容器端口。--name:给容器起个名字,后续可以用名字操作。-it:交互模式运行,常用于调试(例如docker run -it ubuntu bash)。
3. docker ps — 列出容器
要搞清楚当前有哪些容器在干活,全靠这条命令。
# 只显示运行中的容器
docker ps
# 显示所有容器(包括已停止的)
docker ps -a
# 显示最近创建的容器
docker ps -l
# 只显示容器 ID(方便脚本处理)
docker ps -q
输出示例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a8f1c2e4b5d nginx "/docker-entrypoint.…" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp my-nginx
我经常用 docker ps -a 来查那些意外退出的容器,配合 docker logs 看错误日志,排查问题特别快。
4. docker stop — 停止容器
停止容器时,系统会先发 SIGTERM 信号,给进程 10 秒的优雅退出时间。超时才会强制杀死。这个设计很好,避免直接断电导致数据损坏。
# 通过容器名称停止
docker stop my-nginx
# 通过容器 ID 停止(只需输入前几位,能唯一标识即可)
docker stop 3a8f
我在项目中遇到过一个问题:有些容器对 SIGTERM 没反应,卡住了。这时候可以用 docker kill 强制停,不过那是最后的手段。
5. docker rm — 删除容器
停掉的容器并不会自动消失,它还在占用磁盘空间。跑得久了,你可能会发现一堆 Exited 状态的容器,白白浪费资源。
# 删除已停止的容器
docker rm my-nginx
# 强制删除运行中的容器
docker rm -f my-nginx
# 删除所有已停止的容器(清理大法)
docker container prune
注意:经常有人删错了正在跑的容器。养成好习惯:先用 docker ps 确认容器状态,再决定是 stop 还是 rm。我的经验是,手快之前先按一次上箭头,看清命令再回车。
本章知识体系
下面这张图,把 Docker 安装、镜像拉取、容器运行全流程串起来了。你对照着看,脑子里能形成一条清晰的链路。
说实话,这几条命令学通了,你就能独自部署一个完整的容器化服务。我在质量环境里部署 maven 编译环境、sql 审核工具,全靠这套思路——装好 Docker,pull 镜像,run 起来,做端口映射,齐活。
一个实用技巧:别死记命令。你可以在命令行里敲 docker --help 查看所有子命令,或者 docker run --help 看具体参数。我到现在都经常用这招,比你打开浏览器搜书签快多了。