一、容器与 Docker 核心认知
1. 什么是容器
容器是操作系统层面的轻量级虚拟化,把应用、依赖、配置打包成独立运行单元,共享宿主机内核,实现环境一致性与资源隔离。
2. 为什么用 Docker
- 启动秒级,性能接近原生
- 环境一次打包,到处运行
- 资源占用低,单机可跑上千容器
- 适配微服务、CI/CD、云原生
3. Docker vs 虚拟机(补充知识点)
表格
| 维度 | Docker 容器 | 传统虚拟机 |
|---|---|---|
| 虚拟化层级 | 操作系统层 | 硬件层 |
| 内核 | 共享宿主机内核 | 独立 Guest OS |
| 启动速度 | 秒级 | 分钟级 |
| 资源开销 | 极低 | 高(约损耗 50%) |
| 隔离性 | 进程 / 资源隔离 | 强系统级隔离 |
| 存储大小 | MB 级 | GB 级 |
补充知识点:
- cgroup:限制容器 CPU、内存、磁盘 IO 等资源,防止资源抢占。
- namespace:实现 PID、网络、挂载、用户等隔离,让容器 "看起来像独立机器"。
- UnionFS(联合文件系统):Docker 镜像分层存储的基础,支持复用、增量更新、节省空间。
二、Docker 三大核心概念
- **镜像(Image)**只读模板,分层存储,是容器的 "安装包"。
- **容器(Container)**镜像的运行实例,可启动 / 停止 / 删除,自带可写层。
- **仓库(Registry)**集中存储镜像,公共:Docker Hub;私有:Harbor。
补充知识点:
- 镜像分层复用:不同镜像可共享底层层,下载更快、占空间更小。
- 容器 = 镜像 + 可读层,删除容器不删除镜像。
- 虚悬镜像 :无标签、无引用的镜像,用
docker images -f dangling=true查看。
三、CentOS 7/8 安装 Docker(全代码 + 详细步骤)
1. 关闭防火墙与 SELinux
bash
运行
# 停止并禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2. 配置阿里云 Docker YUM 源
bash
运行
# 下载repo文件
curl -o /etc/y.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 替换系统版本与架构(适配CentOS 7/8)
sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo
sed -i 's/$basearch/x86_64/g' /etc/yum.repos.d/docker-ce.repo
3. 安装 Docker 引擎
bash
运行
# 清空缓存并生成新缓存
dnf clean all
dnf makecache
# 安装Docker社区版
dnf -y install docker-ce
4. 配置国内镜像加速(关键)
bash
运行
# 创建docker配置目录
mkdir -p /etc/docker
# 写入daemon.json(镜像加速+cgroup驱动)
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com"
]
}
EOF
5. 启动并设置开机自启
bash
运行
# 重载配置
systemctl daemon-reload
# 启动Docker
systemctl restart docker
# 开机自启
systemctl enable docker
# 验证安装
docker version
6. 内核参数优化(网络转发)
bash
运行
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
EOF
# 生效配置
sysctl -p
补充知识点:
native.cgroupdriver=systemd:保证 Docker 与系统资源管理一致,避免稳定性问题。net.ipv4.ip_forward=1:开启 IP 转发,让容器能访问外网和宿主机网络。
四、Docker 镜像操作(全命令 + 代码 + 知识点)
1. 拉取镜像
bash
运行
# 拉取指定版本
docker pull nginx:1.24.0
# 拉取最新版(默认latest)
docker pull nginx
补充知识点:
- 不指定 TAG 默认拉取
latest,生产环境建议固定版本。 - 镜像分层下载,重复层不会重复下载。
2. 查看本地镜像
bash
运行
# 查看所有顶层镜像
docker images
# 查看所有镜像(含中间层)
docker images -a
# 只显示镜像ID
docker images -q
3. 查看镜像详细信息
bash
运行
# 用ID或名称查看
docker inspect nginx:1.24.0
补充知识点:
docker inspect返回 JSON,可--format提取字段:
bash
运行
docker inspect --format '{{.Architecture}}' nginx:1.24.0
4. 给镜像打标签
bash
运行
docker tag nginx:1.24.0 nginx:v1
补充知识点:
tag不复制镜像,只是添加别名,多标签共享同一镜像 ID。
5. 删除镜像
bash
运行
# 按标签删除
docker rmi nginx:v1
# 按ID强制删除
docker rmi -f 镜像ID
注意:删除前必须停止并删除依赖该镜像的容器。
6. 镜像导出 / 导入(离线迁移)
bash
运行
# 导出为tar文件
docker save -o nginx.tar nginx:1.24.0
# 导入镜像
docker load < nginx.tar
补充知识点:
save/load保存完整分层与历史;export/import只保留当前文件系统,体积更小。
五、Docker 容器操作(全命令 + 代码 + 知识点)
1. 创建容器(不启动)
bash
运行
docker create -it --name mycentos centos:7
2. 查看容器
bash
运行
# 查看运行中容器
docker ps
# 查看所有容器(含停止)
docker ps -a
# 只看容器ID
docker ps -q
3. 启动容器
bash
运行
docker start 容器ID/名称
4. 创建并直接启动(最常用)
bash
运行
# 后台运行Nginx,端口映射8080→80
docker run -d --name mynginx -p 8080:80 nginx:1.24.0
# 交互式进入容器
docker run -it --name test centos:7 /bin/bash
常用参数:
-d:后台运行-p:端口映射 宿主机:容器-v:挂载目录 宿主机:容器--name:指定容器名--cpus/-m:限制 CPU / 内存
5. 进入运行中的容器
bash
运行
docker exec -it 容器ID /bin/bash
补充知识点:
exec:在运行中容器新开进程,退出不停止容器。attach:进入容器主进程,退出会停止容器,生产少用。
6. 停止 / 重启容器
bash
运行
# 优雅停止(等待10秒)
docker stop 容器ID
# 强制停止
docker kill 容器ID
# 重启
docker restart 容器ID
7. 容器日志与状态
bash
运行
# 查看日志
docker logs 容器ID
# 实时查看日志
docker logs -f 容器ID
# 查看资源占用
docker stats 容器ID
8. 容器导出 / 导入
bash
运行
# 导出容器文件系统
docker export 容器ID > centos7.tar
# 导入为新镜像
docker import centos7.tar centos7:test
9. 删除容器
bash
运行
# 删除已停止容器
docker rm 容器ID
# 强制删除运行中容器
docker rm -f 容器ID
# 批量删除所有已停止容器
docker rm -f $(docker ps -aq -f status=exited)
六、Docker 数据卷(补充知识点 + 常用命令)
核心作用
- 容器数据持久化
- 宿主机与容器、容器与容器共享数据
- 容器删除,数据卷不删除
常用命令
bash
运行
# 创建数据卷
docker volume create myvol
# 查看数据卷
docker volume ls
# 运行时挂载数据卷
docker run -d -v myvol:/data nginx
# 删除无用数据卷
docker volume prune
七、常用一键清理命令
bash
运行
# 停止所有容器
docker stop $(docker ps -aq)
# 删除所有容器
docker rm -f $(docker ps -aq)
# 删除所有镜像
docker rmi -f $(docker images -q)
# 清理无用资源(镜像/容器/网络)
docker system prune -a
八、本章必懂补充知识点
- 容器生命周期:创建→启动→运行→停止→删除
- 端口映射 :容器端口不直接暴露,必须
-p映射到宿主机。 - 数据持久化 :默认容器删除数据丢失,必须用
-v数据卷。 - 镜像分层:每层只读,共享复用,构建 / 分发更快。
- 生产最佳实践:固定镜像 TAG、使用数据卷、限制资源、配置日志、定期清理。