Docker完全指南:从安装到高级应用(CentOS 9环境)

云信安装大师
90
AI 质量分
10 5 月, 2025
2 分钟阅读
0 阅读

Docker完全指南:从安装到高级应用(CentOS 9环境)

引言

Docker作为当前最流行的容器化技术,已经成为开发和运维人员的必备技能。本文将带你从零开始,在CentOS 9系统上完成Docker的安装、配置,并逐步深入到高级应用场景。无论你是初学者还是有一定经验的开发者,都能从本指南中获得实用知识。

准备工作

在开始之前,请确保:
1. 已安装CentOS 9操作系统
2. 拥有sudo权限的用户账户
3. 稳定的网络连接

第一部分:Docker安装与配置

1.1 卸载旧版本(如有)

代码片段
sudo dnf remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

注意:如果这是全新系统,可以跳过此步骤。

1.2 设置Docker仓库

代码片段
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

原理说明:我们添加了Docker官方的yum仓库,这样可以通过dnf命令直接安装最新稳定版的Docker。

1.3 安装Docker引擎

代码片段
sudo dnf install docker-ce docker-ce-cli containerd.io

安装完成后验证版本:

代码片段
docker --version
# 预期输出类似:Docker version 20.10.12, build e91ed57

1.4 启动并设置开机自启

代码片段
sudo systemctl start docker
sudo systemctl enable docker

验证Docker是否正常运行:

代码片段
sudo docker run hello-world

如果看到”Hello from Docker!”的消息,说明安装成功。

1.5 (可选)配置非root用户使用Docker

代码片段
sudo usermod -aG docker $USER
newgrp docker   # 刷新用户组权限

注意事项
– 执行后需要重新登录才能生效
– 生产环境中应谨慎分配docker权限

第二部分:基础容器操作

2.1 拉取镜像

代码片段
docker pull centos:9-stream   # CentOS官方镜像的最新流版本

查看本地镜像:

代码片段
docker images

2.2 运行容器

启动一个交互式容器:

代码片段
docker run -it --name my_centos centos:9-stream /bin/bash

参数解释:
-i: 保持STDIN打开(交互模式)
-t: 分配一个伪终端(tty)
--name: 为容器指定名称(否则会随机生成)
/bin/bash: 容器启动后执行的命令

2.3 管理容器生命周期

查看运行中的容器:

代码片段
docker ps   # -a参数显示所有容器(包括已停止的)

停止和启动容器:

代码片段
docker stop my_centos   # Graceful停止(发送SIGTERM信号)
docker start my_centos   # -i参数可恢复交互模式:start -i my_centos 

删除容器:

代码片段
docker rm my_centos   # -f强制删除运行中的容器(慎用)

第三部分:高级应用实践

3.1 Dockerfile构建自定义镜像

创建项目目录和Dockerfile:

代码片段
mkdir myapp && cd myapp 
echo "FROM centos:9-stream" > Dockerfile 
echo "RUN dnf install -y python3 && dnf clean all" >> Dockerfile 
echo 'CMD ["python3", "--version"]' >> Dockerfile 

构建镜像:

代码片段
docker build -t mypython .

运行测试:

代码片段
docker run --rm mypython 
# Python版本信息将输出到终端 

经验分享

  • RUN指令会创建新的镜像层,尽量减少层数(使用&&连接命令)
  • dnf clean all可以减小镜像体积

进阶优化示例:

优化后的多阶段构建示例(适用于生产环境):

代码片段
# Build阶段(使用完整环境编译) 
FROM centos:9-stream AS builder 
RUN dnf install -y gcc make && \ 
    git clone https://example.com/app.git && \ 
    cd app && \ 
    make 

# Runtime阶段(仅包含运行时必要组件) 
FROM centos:9-stream  
COPY --from=builder /app/bin/myapp /usr/local/bin/ 
CMD ["myapp"]  

关键优势

  1. 安全性增强:最终镜像不包含编译工具链
  2. 体积缩小:通常可减少50%以上的空间占用

第四部分:网络与存储配置

4.1 网络模式实践

查看网络配置:

代码片段
docker network ls  

创建自定义网络:

代码片段
docker network create --driver bridge my-net  

运行连接到自定义网络的容器:

代码片段
docker run -d --name web --network my-net nginx  

验证连通性:

代码片段
docker run -it --rm --network my-net busybox ping web  

典型场景对比表

模式 特点 适用场景
bridge (默认) NAT隔离 单主机多容器
host 共享主机网络 高性能需求
none 无网络 特殊安全需求

第五部分:生产环境建议

5.1 资源限制

内存限制示例:

代码片段
docker run -d --memory="512m" --memory-swap="1g" redis  

CPU限制示例:

代码片段
docker run -d --cpus="0.5" python-app  

监控资源使用:

代码片段
docker stats [container_name]  

常见问题解决

Q1: DNS解析失败?

A: 尝试指定DNS服务器:

代码片段
--dns=8.8.8.8  

Q2: 存储驱动警告?

A: CentOS推荐使用overlay2:
编辑/etc/docker/daemon.json:

代码片段
{ "storage-driver": "overlay2" }  

然后重启服务:

代码片段
systemctl restart docker  
原创 高质量