本文系统梳理 Docker 核心概念、安装配置、常用命令,适合从零开始学习容器化部署的开发者。
一、核心基础概念
1.1 什么是 Docker
Docker 是一款开源的容器化部署工具,基于 Linux 容器技术开发,能够将应用程序及其依赖、环境、配置统一打包到容器中,实现一次打包、随处运行。
彻底解决开发、测试、生产环境不一致导致的"本地能跑,线上报错"问题,是目前后端开发、微服务、自动化部署的核心工具。
1.2 容器 vs 虚拟机(核心区别)
| 特性 | 虚拟机 | Docker 容器 |
|---|---|---|
| 底层原理 | 模拟完整硬件,搭载独立操作系统 | 共享宿主机操作系统内核 |
| 体积 | GB 级 | MB 级 |
| 启动速度 | 分钟级 | 秒级 |
| 资源占用 | 高 | 低 |
| 隔离性 | 强(完全隔离) | 轻量(进程级隔离) |
| 核心定位 | 装系统 | 装应用 |
一句话总结:虚拟机是装系统,Docker 是装应用。
1.3 Docker 三大核心组件
- 镜像(Image):容器的模板,只读文件,包含应用、依赖、运行环境。相当于"系统安装包"。
- 容器(Container):镜像运行后的实例,可读写、独立运行、相互隔离。相当于"运行中的系统程序"。
- 仓库(Registry):存放镜像的远程仓库,默认官方仓库是 Docker Hub,也可搭建私有仓库。
二、安装教程
2.1 Linux 安装
debain系安装步骤
# 更新源索引
sudo apt update
# ca-certificates:https证书信任;curl:用来下载GPG公钥
sudo apt install -y ca-certificates curl
# 创建 /etc/apt/keyrings 目录,权限0755
sudo install -m 0755 -d /etc/apt/keyrings
# 下载docker官方gpg公钥
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
# 添加读权限,让apt可以读取这个密钥文件
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加 Docker APT 软件源(这里使用清华镜像源)
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
# Ubuntu换成下面这条命令
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
# 把 apt 源配置写入 docker.list 文件
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新 apt 索引
sudo apt update
# 安装 docker 全套组件
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 开机自动启动
docker sudo systemctl enable docker
# 立刻启动docker服务
sudo systemctl start docke
# 查看版本
docker --version
# 运行hello-world测试容器
sudo docker run hello-world
红帽系安装步骤
# 安装dnf工具包,提供dnf-config-manager命令,用来管理yum源
sudo dnf install -y dnf-plugins-core
# 添加docker官方yum源(清华镜像)
sudo dnf config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/docker-ce.repo
# 更新dnf源缓存索引(相当于apt update)
sudo dnf makecache
# 安装docker全套组件,包名和Debian保持一致!
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 设置开机自启docker
sudo systemctl enable docker
# 立即启动docker服务
sudo systemctl start docker
# 查看docker版本
docker --version
# 运行hello-world测试容器
sudo docker run hello-world
2.2 配置国内镜像
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}
EOF
# 生效
sudo systemctl daemon-reload
sudo systemctl restart docker
# 验证
docker info
国内常用镜像列表
https://docker.m.daocloud.ioDaoCloud 镜像https://docker.1ms.run毫秒镜像https://docker.xuanyuan.me轩辕镜像- 腾讯云内网:
https://mirror.ccs.tencentyun.com(仅腾讯云服务器内可用)
三、docker常用命令
3.1 基础信息命令
# 查看 Docker 版本
docker --version
# 详细版本(客户端+服务端)
docker version
# 查看详细信息(docker环境信息)
docker info
# 检查命令帮助
docker 命令名 --help
3.2 镜像操作命令
# 搜索镜像(Docker Hub)
docker search 镜像名
# 下载镜像(默认最新版 latest)
docker pull 镜像名:版本号
# 示例:下载 nginx 1.21 版本
docker pull nginx:1.21
# 查看本地所有镜像
docker images
# 删除本地镜像
docker rmi 镜像ID/镜像名
# 强制删除镜像
docker rmi -f 镜像ID
# 查看镜像详细信息
docker inspect 镜像ID
# 清理所有未使用镜像
docker image prune -a
3.3 容器操作命令
# 1. 运行容器(核心命令)
docker run [参数] 镜像名:版本
| 参数 | 说明 |
|---|---|
-d | 后台运行容器(守护进程) |
-p 宿主机端口:容器端口 | 端口映射 |
--name 名称 | 自定义容器名称 |
--restart=always | 开机自启容器 |
-v 宿主机目录:容器目录 | 数据挂载 |
# 示例:后台运行 nginx,映射 80 端口
docker run -d --name nginx-demo -p 80:80 nginx:1.21
# 2. 查看正在运行的容器
docker ps
# 查看所有容器(包含已停止)
docker ps -a
# 3. 启动/停止/重启容器
docker start 容器ID/容器名
docker stop 容器ID/容器名
docker restart 容器ID/容器名
# 4. 删除容器(必须先停止)
docker rm 容器ID/容器名
# 强制删除运行中的容器
docker rm -f 容器ID/容器名
# 5. 查看容器日志
docker logs 容器ID/容器名
# 实时查看日志
docker logs -f 容器ID/容器名
# 6. 进入容器内部
docker exec -it 容器ID/容器名 /bin/bash
四、数据持久化
docker数据持久化有3种方式:Bind Mount、Volume、tmpfs mount
4.1 Bind Mount(绑定挂载)
直接映射宿主机指定目录 / 文件到容器;数据位置自己掌控,适合开发代码热加载、挂载配置文件;缺点:强依赖宿主机路径,移植差
4.2 Volume(数据卷)
Docker 自行管理,默认存放在
/var/lib/docker/volumes,分命名卷、匿名卷;容器删除卷还在;支持远程驱动(NFS、云盘),可多容器共享
匿名卷((Anonymous Volume))
- 只写容器内路径,不写冒号前面名字
# 匿名卷
docker run -v 容器内路径 镜像名
- Docker 自动生成一长串 UUID 作为卷名,比如:
abc123xxxx... - 位置:
/var/lib/docker/volumes/UUID/_data - 特点:
- 属于 volume,容器删除默认卷还在 。
- 名字是随机 UUID,很难手动找到、不好复用、不好备份。
- 容易堆积垃圾,清理麻烦
- 典型场景:临时测试、不想自己起名、只给当前容器用
- 清理匿名卷
# 只清理没有被容器引用的匿名卷
docker volume prune
命名卷(Named Volume)
- 创建方法:冒号前面自己指定名字
# 先创建(可选)
docker volume create 卷名
# 使用命名卷
docker run -v 卷名:容器内路径 镜像名
-
位置:
/var/lib/docker/volumes/卷名/_data -
特点:
- 名字自己定义,可读性强,多个容器直接共享同一个卷
- 方便备份、迁移、查看
- 需要自己管理名字,不要重名冲突
4.3 tmpfs mount(内存挂载,不持久化)
数据放在宿主机内存,不落磁盘;容器停止 / 重启数据直接丢失;适合临时敏感数据、缓存