0

0

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

看不見的法師

看不見的法師

发布时间:2025-09-13 21:10:01

|

283人浏览过

|

来源于php中文网

原创

答案:在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自动处理权限:

迷你天猫商城
迷你天猫商城

迷你天猫商城是一个基于Spring Boot的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。 作为迷你天猫商城的核心组成部分之一,天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。所有页面均兼容IE10及以上现代浏览器。部署方式1、项目

下载
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
      ,然后重启服务。

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

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

230

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

499

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

498

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

227

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

333

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3510

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

18

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

21

2026.01.13

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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