一、容器与 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/config2. 配置阿里云 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.repo3. 安装 Docker 引擎
bash
运行
# 清空缓存并生成新缓存 dnf clean all dnf makecache # 安装Docker社区版 dnf -y install docker-ce4. 配置国内镜像加速(关键)
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" ] } EOF5. 启动并设置开机自启
bash
运行
# 重载配置 systemctl daemon-reload # 启动Docker systemctl restart docker # 开机自启 systemctl enable docker # 验证安装 docker version6. 内核参数优化(网络转发)
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 -q3. 查看镜像详细信息
bash
运行
# 用ID或名称查看 docker inspect nginx:1.24.0补充知识点:
docker inspect返回 JSON,可--format提取字段:
bash
运行
docker inspect --format '{{.Architecture}}' nginx:1.24.04. 给镜像打标签
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:72. 查看容器
bash
运行
# 查看运行中容器 docker ps # 查看所有容器(含停止) docker ps -a # 只看容器ID docker ps -q3. 启动容器
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 容器ID7. 容器日志与状态
bash
运行
# 查看日志 docker logs 容器ID # 实时查看日志 docker logs -f 容器ID # 查看资源占用 docker stats 容器ID8. 容器导出 / 导入
bash
运行
# 导出容器文件系统 docker export 容器ID > centos7.tar # 导入为新镜像 docker import centos7.tar centos7:test9. 删除容器
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、使用数据卷、限制资源、配置日志、定期清理。