容器技术概述、容器管理命令、镜像管理命令、定制简单镜像、为容器配置Yum仓库、容器内安装部署服务
·
一、容器技术概述:为什么需要容器?
📦 容器 vs 虚拟机(VM)
| 特性 | 虚拟机(VM) | 容器(Container) |
|---|---|---|
| 架构 | Hypervisor + Guest OS | 共享 Host OS 内核 |
| 启动速度 | 秒级 ~ 分钟级 | 毫秒级 |
| 资源开销 | 高(每个 VM 占用完整 OS 内存/CPU) | 极低(仅应用进程) |
| 隔离性 | 强(硬件级) | 中(Namespace + Cgroups) |
| 典型工具 | VMware, KVM | Docker, containerd |
✅ 核心价值:环境一致性 + 快速交付 + 资源高效利用
🔑 容器核心技术
- Namespaces:实现进程、网络、用户等资源的隔离
- Cgroups:限制 CPU、内存、IO 等资源使用
- UnionFS(如 overlay2):实现镜像分层与写时复制(Copy-on-Write)
二、容器管理命令(Docker CLI)
前提:已安装 Docker(
sudo yum install -y docker-ce并启动)
1. 启动/停止容器
# 后台运行一个 CentOS 容器
docker run -d --name myweb centos:7 /bin/bash
# 进入容器交互式终端
docker exec -it myweb /bin/bash
# 停止 & 启动
docker stop myweb
docker start myweb
# 查看运行中的容器
docker ps
# 查看所有容器(含已停止)
docker ps -a
2. 删除容器
# 删除已停止的容器
docker rm myweb
# 强制删除运行中的容器
docker rm -f myweb
# 清理所有已停止容器
docker container prune
3. 查看日志与资源
# 实时查看容器日志
docker logs -f myweb
# 查看容器资源使用
docker stats myweb
三、镜像管理命令
镜像是容器的“模板”,只读且分层存储。
1. 获取镜像
# 从 Docker Hub 拉取
docker pull nginx:alpine
docker pull mysql:8.0
# 搜索镜像
docker search redis
2. 查看与删除镜像
# 列出本地镜像
docker images
# 删除镜像(需先删除依赖容器)
docker rmi nginx:alpine
# 清理无用镜像(悬空镜像)
docker image prune
3. 导出/导入镜像(离线迁移)
# 导出为 tar 文件
docker save nginx:alpine > nginx-alpine.tar
# 从 tar 导入
docker load < nginx-alpine.tar
四、定制简单镜像:Dockerfile 入门
通过 Dockerfile 定义镜像构建步骤,实现可重复、版本化的镜像构建。
示例:构建一个带 vim 和 net-tools 的 CentOS 镜像
# Dockerfile
FROM centos:7
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 安装基础工具
RUN yum install -y vim net-tools wget curl && \
yum clean all
# 设置默认命令(避免容器启动后立即退出)
CMD ["/bin/bash"]
构建并运行
# 构建镜像(注意末尾的 .)
docker build -t my-centos:1.0 .
# 运行容器
docker run -it my-centos:1.0
💡 最佳实践:
- 合并 RUN 命令减少镜像层数
- 使用
.dockerignore排除无关文件- 镜像标签语义化(如 v1.2.0)
五、为容器配置 Yum 仓库(解决网络问题)
在企业内网或离线环境中,容器可能无法访问公网 Yum 源。此时需挂载自建 Yum 仓库。
方法:通过 Volume 挂载宿主机 repo 文件
步骤 1:宿主机准备 Yum 源(假设已搭建 HTTP 仓库)
# 宿主机创建 repo 文件
cat > /etc/yum.repos.d/internal.repo <<EOF
[internal]
name=Internal Repo
baseurl=http://192.168.88.151/centos7
gpgcheck=0
enabled=1
EOF
步骤 2:运行容器时挂载 repo 目录
docker run -it \
-v /etc/yum.repos.d:/etc/yum.repos.d:ro \
centos:7 \
/bin/bash
✅ 容器内即可使用内网 Yum 源安装软件:
yum install -y httpd
六、容器内安装部署服务:以 Apache 为例
目标:在容器中部署 Web 服务,并对外提供访问。
方案 A:临时容器(适合测试)
# 启动容器并安装 Apache
docker run -it centos:7 /bin/bash
# 容器内执行:
yum install -y httpd
echo "<h1>Hello from Container!</h1>" > /var/www/html/index.html
httpd -D FOREGROUND # 前台运行(否则容器退出)
❌ 缺点:容器删除后配置丢失。
方案 B:构建专用镜像(推荐生产)
1. 编写 Dockerfile
# Dockerfile-apache
FROM centos:7
RUN yum install -y httpd && yum clean all
COPY index.html /var/www/html/
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
2. 准备首页文件
echo "<h1>Welcome to My Apache in Docker!</h1>" > index.html
3. 构建并运行
# 构建
docker build -t my-apache:1.0 -f Dockerfile-apache .
# 运行并映射端口
docker run -d --name web -p 8080:80 my-apache:1.0
4. 验证
curl http://localhost:8080
# 输出:<h1>Welcome to My Apache in Docker!</h1>
✅ 优势:
- 镜像可版本管理
- 一键部署多实例
- 与 CI/CD 流水线集成
七、进阶思考:容器不是虚拟机!
许多初学者会犯的错误:
- 在容器中运行多个服务(如 SSH + Nginx + PHP)
- 把容器当长期运行的服务器使用
✅ 正确姿势:
- 一个容器 = 一个进程(单一职责)
- 无状态设计:数据持久化用 Volume
- 不可变基础设施:配置变更应重建镜像,而非修改运行中容器
更多推荐

所有评论(0)