容器技术入门与 Docker 环境部署

一、容器与 Docker 核心认知

1. 什么是容器

容器是操作系统层面的轻量级虚拟化,把应用、依赖、配置打包成独立运行单元,共享宿主机内核,实现环境一致性与资源隔离。

2. 为什么用 Docker

  • 启动秒级,性能接近原生
  • 环境一次打包,到处运行
  • 资源占用低,单机可跑上千容器
  • 适配微服务、CI/CD、云原生

3. Docker vs 虚拟机(补充知识点)

表格

维度 Docker 容器 传统虚拟机
虚拟化层级 操作系统层 硬件层
内核 共享宿主机内核 独立 Guest OS
启动速度 秒级 分钟级
资源开销 极低 高(约损耗 50%)
隔离性 进程 / 资源隔离 强系统级隔离
存储大小 MB 级 GB 级

补充知识点

  • cgroup:限制容器 CPU、内存、磁盘 IO 等资源,防止资源抢占。
  • namespace:实现 PID、网络、挂载、用户等隔离,让容器 "看起来像独立机器"。
  • UnionFS(联合文件系统):Docker 镜像分层存储的基础,支持复用、增量更新、节省空间。

二、Docker 三大核心概念

  1. **镜像(Image)**只读模板,分层存储,是容器的 "安装包"。
  2. **容器(Container)**镜像的运行实例,可启动 / 停止 / 删除,自带可写层。
  3. **仓库(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

八、本章必懂补充知识点

  1. 容器生命周期:创建→启动→运行→停止→删除
  2. 端口映射 :容器端口不直接暴露,必须-p映射到宿主机。
  3. 数据持久化 :默认容器删除数据丢失,必须用-v数据卷。
  4. 镜像分层:每层只读,共享复用,构建 / 分发更快。
  5. 生产最佳实践:固定镜像 TAG、使用数据卷、限制资源、配置日志、定期清理。
相关推荐
宁静@星空5 小时前
007-Docker构建 jar 包成镜像
docker·容器·jar
xmlhcxr7 小时前
从 0 到 1 落地企业级 DevOps CI/CD 流水线:基于 GitLab+Jenkins+Harbor 的完整实践
运维·docker·gitlab·jenkins·harbor·devops
踏着七彩祥云的小丑10 小时前
AI——Docker部署Dify
docker·ai
深邃-10 小时前
【Web安全】-云服务器与Docker(2):Docker镜像操作,Docker容器操作,Docker搭建漏洞靶场
linux·服务器·web安全·网络安全·docker
研究点啥好呢10 小时前
面馆开业!客官,你的面(经)好了!
python·阿里云·docker·面试·reactjs·求职招聘·react
高旭的旭20 小时前
GitLab Omnibus Docker 内存优化实战:从 4.7 GiB 降到 3.2 GiB
docker·容器·gitlab
我是Superman丶1 天前
Docker 命令自用
运维·docker·容器
ai产品老杨1 天前
深度解析:基于 Docker 与 GB28181 的企业级 AI 视频管理平台——实现 X86/ARM 异构计算与全场景边缘计算架构
人工智能·docker·音视频
Slow菜鸟1 天前
Docker 学习篇(七)| 实战 — 用 Docker 构建 SpringBoot + Vue 全栈项目
spring boot·学习·docker