核心理念
Docker 可以想象成 “软件的标准化集装箱”。
它将一个应用及其所有依赖(代码、库、环境配置等)打包到一个独立的、可移植的“容器”中。
这个容器可以在任何安装了 Docker 的机器上以完全相同的方式运行,彻底解决了“在我电脑上明明是好的”这个经典难题。
一、核心概念解析
- 镜像 (Image):一个只读的模板,可以把它看作是软件的“安装包”或者“类”。它包含了运行应用所需的一切。例如,
ubuntu:22.04是一个镜像,nginx也是一个镜像。 - 容器 (Container):镜像的运行实例,可以把它看作是软件“运行起来的程序”或者“对象”。你可以创建、启动、停止、删除容器。每个容器都是独立的、隔离的。
- 仓库 (Registry):存放镜像的“应用商店”。最著名的就是 Docker Hub。你可以从这里
pull(拉取)官方镜像,也可以把自己构建的镜像push(推送)上去。 - Dockerfile:一个文本文件,里面包含了构建一个新镜像的所有指令。它就像一份制作镜像的“菜谱”。
二、安装 Docker
在 Ubuntu 上安装
推荐使用官方脚本来安装最新版本。
- 更新包列表
1
sudo apt-get update
- 安装必要的依赖
1
sudo apt-get install ca-certificates curl gnupg
- 添加 Docker 官方 GPG 密钥
1
2
3sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg - 设置 Docker 仓库
1
2
3
4echo \
"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 - 安装 Docker Engine
1
2sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - (重要) 配置用户组,避免每次都用
sudo配置后,你需要退出当前终端会话并重新登录才能生效。1
2sudo groupadd docker
sudo usermod -aG docker $USER
在 macOS 上安装
在 Mac 上最简单的方式是安装 Docker Desktop。
- 前往 Docker 官网下载 Docker Desktop for Mac。
- 下载
.dmg文件后,双击打开,并将其拖拽到 Applications 文件夹。 - 从应用程序中启动 Docker Desktop。它会在菜单栏显示一个小鲸鱼图标,表示正在运行。
验证安装:无论在哪个系统,打开终端输入以下命令,看到版本信息即表示成功。
1 | docker --version |
三、核心命令备忘单
3.1 镜像管理 (Image Management)
拉取(下载)镜像
1 | docker pull <镜像名>:<标签> |
功能: 从 Docker Hub 或其他仓库下载一个镜像到本地。标签(tag)通常是版本号,latest 是默认值。
示例: docker pull nginx:latest
查看本地所有镜像
1 | docker images |
功能: 列出你电脑上已经下载的所有镜像。
示例: docker images
删除本地镜像
1 | docker rmi <镜像ID或镜像名> |
功能: 删除一个或多个本地镜像以释放磁盘空间。如果该镜像有正在运行的容器,需要先停止并删除容器。
示例: docker rmi nginx
从 Dockerfile 构建镜像
1 | docker build -t <新镜像名>:<标签> <Dockerfile所在目录> |
功能: 根据 Dockerfile 的指令创建一个新的自定义镜像。-t 用来给镜像命名。
示例: docker build -t my-app:1.0 . (注意最后的 . 表示当前目录)
容器管理 (Container Management)
创建并运行容器
1 | docker run [选项] <镜像名> |
功能: 这是最核心的命令,用于从镜像创建并启动一个容器。它有很多常用选项:
-d: 后台运行 (detach)-p <主机端口>:<容器端口>: 端口映射 (port mapping)-v <主机路径>:<容器路径>: 卷挂载 (volume),用于数据持久化--name <容器名>: 给容器起一个好记的名字-it: 交互模式,进入容器的终端 (interactive & TTY)
示例: docker run -d -p 8080:80 --name my-nginx nginx
查看正在运行的容器
1 | docker ps |
功能: 列出当前正在运行的容器。
示例: docker ps
查看所有容器(包括已停止的)
1 | docker ps -a |
功能: 列出所有曾经创建过的容器。
示例: docker ps -a
停止一个容器
1 | docker stop <容器ID或容器名> |
功能: 优雅地停止一个正在运行的容器。
示例: docker stop my-nginx
启动一个已停止的容器
1 | docker start <容器ID或容器名> |
功能: 重新启动一个之前被停止的容器。
示例: docker start my-nginx
删除一个容器
1 | docker rm <容器ID或容器名> |
功能: 删除一个已经停止的容器。如果要删除正在运行的,需要加 -f (force) 参数。
示例: docker rm my-nginx
查看容器日志
1 | docker logs <容器ID或容器名> |
功能: 实时查看容器内部的标准输出信息,非常适合排错。可以加 -f 持续跟踪。
示例: docker logs -f my-nginx
进入正在运行的容器
1 | docker exec -it <容器ID或容器名> /bin/bash |
功能: 在一个正在后台运行的容器中打开一个新的终端会话,让你可以在容器内部执行命令。
示例: docker exec -it my-nginx /bin/bash
系统清理 (System Cleanup)
清除构建缓存 (Clean Build Cache)
1 | docker builder prune |
功能: 删除所有在构建镜像过程中产生的缓存。如果你经常构建镜像,这可以释放大量磁盘空间。
示例: docker builder prune
一键清理所有无用资源
1 | docker system prune -a |
功能: 清理所有未被使用的 Docker 资源,包括停止的容器、无用的网络、悬空(dangling)的镜像和所有构建缓存。这是释放磁盘空间的神器!
示例: docker system prune -a
希望这份完整的备忘单对你有帮助!