容器技术入门与 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 小时前
Docker基础操作
运维·docker·容器
山人在山上5 小时前
docker zlmediakit 部署
docker·zlmediakit
hopsky6 小时前
phoenix docker 启动
运维·docker·容器
Nontee10 小时前
Docker基础
docker·容器·eureka
烟雨江南aabb11 小时前
Docker第一弹 Docker是什么?
运维·docker·容器
ai产品老杨11 小时前
解耦异构算力与多协议接入:基于 Docker 与 GB28181 的企业级 AI 视频管理平台架构演进与源码交付实践
人工智能·docker·音视频
2301_8035389511 小时前
Pod启动失败?K8s中Pod创建常见问题与排查指南
docker·容器·kubernetes
YDS82911 小时前
浅谈近期关于Docker部署产生的一些问题
运维·docker·容器
日取其半万世不竭11 小时前
给 Docker 容器设置 CPU 和内存限制,避免单个服务拖垮整机
java·docker·容器
AI服务老曹13 小时前
解耦异构算力与多路协议:基于 Docker 部署与源码交付的企业级 GB28181/RTSP 边缘计算 AI 视频管理平台架构深度解析
人工智能·docker·边缘计算