首页 > 运维 > CentOS > 正文

CentOS容器部署怎么操作_CentOS部署Docker容器教程

看不見的法師
发布: 2025-09-13 21:10:01
原创
222人浏览过
答案:在CentOS上部署Docker容器需先更新系统并安装Docker CE,配置防火墙与SELinux解决网络问题,通过镜像拉取、容器运行及数据卷挂载实现应用部署,利用资源限制、安全策略和日志管理优化性能与安全,结合Docker Compose进行多容器编排,并通过定期清理、监控和备份完成日常维护。

centos容器部署怎么操作_centos部署docker容器教程

在CentOS上部署Docker容器,核心在于安装Docker引擎、拉取所需的镜像,然后基于这些镜像创建并运行你的应用程序实例。这听起来可能有点像搭积木,但每一块积木的放置都需要一些考量。简而言之,就是环境准备、Docker安装、镜像操作、容器运行与管理。

解决方案

说实话,在CentOS上部署Docker容器,我个人觉得它提供了一种相当稳健且灵活的部署方式。我们先从最基础的Docker引擎安装开始,这几乎是所有操作的前提。

首先,确保你的CentOS系统是最新的,这能避免很多不必要的兼容性问题。一个简单的

sudo yum update -y
登录后复制
就能搞定。接着,安装必要的工具包,比如
yum-utils
登录后复制
,它会提供
yum-config-manager
登录后复制
这个工具,方便我们添加Docker的官方仓库。

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
登录后复制

然后,添加Docker的稳定版仓库。我通常会选择稳定版,因为它经过了充分的测试,虽然新特性可能不会第一时间拥有,但对于生产环境来说,稳定性是压倒一切的。

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
登录后复制

仓库添加完毕后,就可以安装Docker CE(Community Edition)了。有时候,系统可能会提示你确认GPG密钥,直接同意就行。

sudo yum install docker-ce docker-ce-cli containerd.io -y
登录后复制

安装完成后,别忘了启动Docker服务并设置开机自启。不然每次重启服务器后,你都得手动去启动它,那可真是太麻烦了。

sudo systemctl start docker
sudo systemctl enable docker
登录后复制

为了验证Docker是否安装成功,可以运行一个简单的

hello-world
登录后复制
容器。这就像是编程里的“Hello World”,一个经典的入门测试。

sudo docker run hello-world
登录后复制

如果一切顺利,你会看到一条消息,大致意思是Docker已经成功安装并运行了。

接下来,就是我们实际的应用部署了。比如,我需要部署一个Nginx服务。

sudo docker pull nginx:latest # 拉取最新版Nginx镜像
sudo docker run --name my-nginx -p 80:80 -d nginx # 运行Nginx容器,映射80端口,后台运行
登录后复制

这里的

-p 80:80
登录后复制
是将主机的80端口映射到容器的80端口,
-d
登录后复制
表示在后台运行。
--name my-nginx
登录后复制
给容器起个名字,方便管理。

当然,如果你的应用需要持久化数据,比如数据库,那就得用到数据卷(Volumes)。这块内容挺重要的,因为容器本身是无状态的,一旦删除,容器内的数据也就没了。

sudo docker volume create my-data # 创建一个数据卷
sudo docker run --name my-app-with-data -v my-data:/app/data -d my-app-image # 运行容器并挂载数据卷
登录后复制

这样,

my-app-image
登录后复制
容器内部
/app/data
登录后复制
路径下的数据就会被持久化到名为
my-data
登录后复制
的数据卷中,即使容器被删除,数据卷中的数据也还在。

CentOS部署Docker容器时,为何我的容器无法访问外部网络或宿主机?

这确实是初学者在CentOS上部署Docker容器时常遇到的一个“坑”。容器的网络问题,说起来复杂,但很多时候症结在于CentOS特有的防火墙(firewalld)和SELinux策略。我记得有一次,我折腾了半天容器间的通信,结果发现是firewalld把端口给堵死了。

首先,最常见的原因是

firewalld
登录后复制
。Docker在安装时,通常会修改
iptables
登录后复制
规则来处理容器的网络,但
firewalld
登录后复制
可能会干扰这些规则。一个快速但不太推荐的测试方法是暂时禁用
firewalld
登录后复制

sudo systemctl stop firewalld
sudo systemctl disable firewalld
登录后复制

如果禁用后网络正常,那么问题就在

firewalld
登录后复制
。更优雅的解决方案是配置
firewalld
登录后复制
,允许Docker的网络接口(通常是
docker0
登录后复制
)通过,或者开放容器需要暴露的端口。例如,如果你容器的80端口需要被外部访问,你需要:

sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
sudo firewall-cmd --reload
登录后复制

另外,Docker在CentOS上默认使用的是

bridge
登录后复制
网络模式,它会创建一个
docker0
登录后复制
网桥,容器通过这个网桥与宿主机通信,并通过宿主机的NAT进行外部访问。如果你的宿主机有多个网络接口,或者网络配置比较复杂,也可能会出现问题。检查
ip a
登录后复制
输出,确保
docker0
登录后复制
网桥正常存在且有IP地址。

SELinux也是一个潜在的麻烦制造者。CentOS的SELinux策略默认比较严格,有时会阻止容器访问宿主机的特定文件或网络资源。如果你在容器日志中看到

Permission denied
登录后复制
相关的SELinux错误,可以尝试临时将其设置为宽容模式(
setenforce 0
登录后复制
)进行测试。但请注意,在生产环境中直接禁用SELinux是不安全的。正确的做法是为Docker容器配置合适的SELinux策略标签,或者在挂载数据卷时使用
z
登录后复制
z
登录后复制
选项,让SELinux自动处理权限:

Calliper 文档对比神器
Calliper 文档对比神器

文档内容对比神器

Calliper 文档对比神器28
查看详情 Calliper 文档对比神器
sudo docker run -v /host/path:/container/path:z my-image
登录后复制

这里的

:z
登录后复制
会告诉SELinux,这个数据卷可以被所有容器共享。

如何优化CentOS上Docker容器的性能与安全性?

优化Docker容器的性能和安全性,这绝对是个值得深思的话题。在我看来,这不仅仅是技术细节,更是一种权衡和策略的选择。

性能方面:

  1. 存储驱动(Storage Driver)的选择: CentOS默认可能使用
    overlay2
    登录后复制
    ,这是目前推荐的驱动,性能和稳定性都比较好。但如果你在使用较老的CentOS版本或者Docker版本,可能还在用
    devicemapper
    登录后复制
    。确保你使用的是
    overlay2
    登录后复制
    ,可以在
    /etc/docker/daemon.json
    登录后复制
    中配置:
    {
      "storage-driver": "overlay2"
    }
    登录后复制

    然后重启Docker服务。

  2. 资源限制: 别让某个容器耗尽宿主机的资源。使用
    --cpus
    登录后复制
    --memory
    登录后复制
    等参数限制容器的CPU和内存使用。例如:
    sudo docker run --name my-app --cpus="0.5" --memory="512m" -d my-image
    登录后复制

    这会限制容器最多使用半个CPU核心和512MB内存。

  3. 日志管理: 容器日志如果直接输出到默认的
    json-file
    登录后复制
    驱动,长时间下来可能会占用大量磁盘空间,甚至影响性能。可以考虑使用
    log-driver
    登录后复制
    ,将日志发送到外部日志收集系统(如ELK Stack、Splunk),或者限制日志文件大小和数量:
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
    登录后复制

    这样每个容器的日志文件最大10MB,最多保留3个。

  4. 网络优化: 对于高并发应用,可以考虑使用
    macvlan
    登录后复制
    ipvlan
    登录后复制
    网络模式,让容器直接拥有独立的MAC地址和IP地址,减少NAT带来的性能损耗,但这会增加网络配置的复杂性。

安全性方面:

  1. 最小化镜像: 使用轻量级的、精简的基础镜像,比如
    alpine
    登录后复制
    版本,而不是完整的Ubuntu或CentOS镜像。镜像越小,攻击面就越小。
  2. 非root用户运行: 这是非常重要的一点。在
    Dockerfile
    登录后复制
    中创建并切换到非root用户来运行应用程序,即使容器被攻破,攻击者也无法获得宿主机的root权限。
    # Dockerfile 示例
    FROM alpine:latest
    RUN adduser -D myuser
    USER myuser
    CMD ["my-app"]
    登录后复制
  3. 限制特权: 避免使用
    --privileged
    登录后复制
    标志运行容器,除非你非常清楚你在做什么。它会赋予容器几乎与宿主机相同的权限。如果需要特定的权限,使用
    --cap-add
    登录后复制
    --cap-drop
    登录后复制
    来精细控制。
  4. 定期更新: 宿主机操作系统、Docker引擎和所有容器镜像都应定期更新到最新版本,以修补已知的安全漏洞。
  5. 安全扫描: 使用Docker Scout、Clair等工具对容器镜像进行安全扫描,识别潜在的漏洞。
  6. SELinux/AppArmor: 确保SELinux(CentOS)或AppArmor(Ubuntu/Debian)处于启用状态,并配置适当的策略,为容器提供额外的隔离层。这虽然有时会带来配置上的挑战,但长远来看是值得的。

CentOS部署Docker容器后,如何高效地进行日常管理与维护?

容器部署后,日常的管理和维护才是真正考验运维功力的地方。我个人觉得,这就像是养宠物,你得定期喂食、清理、检查健康状况,才能让它活蹦乱跳。

  1. 容器生命周期管理:

    • 启动/停止/重启: 最基本的命令是
      docker start/stop/restart [container_name_or_id]
      登录后复制
    • 删除:
      docker rm [container_name_or_id]
      登录后复制
      。注意,删除前要先停止容器。如果想强制删除,可以用
      docker rm -f
      登录后复制
    • 清理无用资源: 随着时间推移,可能会积累大量的停止容器、无用镜像、数据卷和网络。
      docker system prune
      登录后复制
      是一个非常实用的命令,可以清理掉大部分不再使用的Docker资源,但使用时要小心,确认没有误删重要数据。
      sudo docker system prune -a # 清理所有停止的容器、未使用的网络、悬挂镜像和构建缓存
      登录后复制
  2. 多容器编排(Docker Compose): 当你的应用由多个服务(如Web服务器、数据库、缓存)组成时,手动管理这些容器会变得非常繁琐。

    Docker Compose
    登录后复制
    就是为此而生的。它允许你用一个
    YAML
    登录后复制
    文件定义整个应用的服务、网络和数据卷,然后通过一个命令启动、停止或重建整个应用栈。

    # docker-compose.yml 示例
    version: '3.8'
    services:
      web:
        image: nginx:latest
        ports:
          - "80:80"
        volumes:
          - ./nginx.conf:/etc/nginx/nginx.conf
      db:
        image: postgres:13
        environment:
          POSTGRES_DB: mydb
          POSTGRES_USER: user
          POSTGRES_PASSWORD: password
        volumes:
          - db_data:/var/lib/postgresql/data
    volumes:
      db_data:
    登录后复制

    然后只需

    sudo docker-compose up -d
    登录后复制
    就能启动整个应用。这简直是多容器管理的福音。

  3. 日志与监控:

    • 查看日志:
      docker logs [container_name_or_id]
      登录后复制
      。加上
      -f
      登录后复制
      可以实时跟踪日志,
      -t
      登录后复制
      显示时间戳。
    • 资源监控:
      docker stats
      登录后复制
      可以实时查看运行中容器的CPU、内存、网络I/O等使用情况。对于更专业的监控,可以集成Prometheus+Grafana,收集Docker Daemon和容器的各项指标。
  4. 备份与恢复:

    • 数据卷备份: 对于持久化数据,定期备份数据卷是必不可少的。可以通过创建一个临时容器挂载数据卷,然后将数据卷内容打包到宿主机:
      sudo docker run --rm --volumes-from [data_container_name] -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data
      登录后复制

      或者直接备份宿主机上数据卷的物理路径(通常在

      /var/lib/docker/volumes/
      登录后复制
      下)。

    • 镜像备份:
      docker save -o my_image.tar my-image:tag
      登录后复制
      可以将镜像保存为
      tar
      登录后复制
      文件,然后可以传输到其他机器或存储起来。恢复时使用
      docker load -i my_image.tar
      登录后复制
  5. 更新与升级:

    • 容器更新: 更新应用通常意味着拉取新的镜像,然后停止旧容器,启动新容器。使用
      docker-compose
      登录后复制
      会更方便,只需修改
      docker-compose.yml
      登录后复制
      中的镜像版本,然后
      docker-compose up -d --build
      登录后复制
      即可。
    • Docker引擎升级: 定期关注Docker官方的更新日志,按照官方推荐的步骤升级Docker引擎。这通常涉及
      yum update docker-ce
      登录后复制
      ,然后重启服务。

日常管理维护,说到底就是一套规范化的流程,加上一些趁手的工具。熟练运用这些,能让你在容器的世界里游刃有余。

以上就是CentOS容器部署怎么操作_CentOS部署Docker容器教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号