简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

站内搜索

搜索

活动公告

11-02 12:46
10-23 09:32
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,将及时处理!
10-23 09:31
10-23 09:28
通知:签到时间调整为每日4:00(东八区)
10-23 09:26

探索Rocky Linux与Docker的完美结合 构建高效稳定的容器化应用环境 从安装配置到最佳实践的全面指南

3万

主题

318

科技点

3万

积分

大区版主

木柜子打湿

积分
31894

财Doro三倍冰淇淋无人之境【一阶】立华奏小樱(小丑装)⑨的冰沙以外的星空【二阶】

发表于 2025-10-3 00:40:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

Rocky Linux作为CentOS的替代品,正在成为企业级Linux发行版的热门选择。而Docker作为容器化技术的领导者,为应用的打包、分发和运行提供了标准化的解决方案。将Rocky Linux与Docker结合,可以构建一个高效、稳定且安全的容器化应用环境。本文将全面介绍如何在Rocky Linux上安装、配置和使用Docker,以及构建容器化应用环境的最佳实践。

Rocky Linux简介

Rocky Linux是一个社区拥有的企业级操作系统,旨在与Red Hat Enterprise Linux (RHEL) 100%二进制兼容。作为CentOS的替代品,Rocky Linux由原CentOS创始人Gregory Kurtzer发起,旨在提供一个稳定、可靠且免费的操作系统选择。

Rocky Linux的主要特点:

• 稳定性:提供长达10年的支持周期
• 安全性:及时的安全更新和补丁
• 兼容性:与RHEL完全二进制兼容
• 社区驱动:由活跃的社区维护和支持

Docker简介

Docker是一个开源的容器化平台,可以将应用程序及其依赖项打包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器使用沙箱机制,相互之间不会有任何接口。

Docker的主要组件:

• Docker Engine:Docker的核心,用于创建和运行容器
• Docker Hub:公共的镜像仓库
• Docker Compose:用于定义和运行多容器Docker应用程序的工具
• Docker Swarm:Docker的原生集群工具

Docker的优势:

• 轻量级:容器共享主机系统的内核,无需完整的操作系统
• 快速:容器启动速度快,资源占用少
• 可移植:一次构建,处处运行
• 隔离性:每个容器都有自己独立的文件系统、网络和进程空间
• 微服务架构:支持将应用拆分为多个独立的微服务

在Rocky Linux上安装Docker

系统要求

在安装Docker之前,确保你的Rocky Linux系统满足以下要求:

• 64位架构
• 内核版本3.10或更高
• 系统已更新到最新版本
• 具有sudo权限的用户账户

更新系统

首先,更新系统到最新状态:
  1. sudo dnf update -y
复制代码

安装必要的依赖

安装Docker所需的依赖包:
  1. sudo dnf install -y dnf-utils device-mapper-persistent-data lvm2
复制代码

添加Docker仓库

添加Docker的官方仓库:
  1. sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
复制代码

安装Docker

安装Docker Engine、CLI和Containerd:
  1. sudo dnf install -y docker-ce docker-ce-cli containerd.io
复制代码

启动Docker服务

安装完成后,启动Docker服务并设置开机自启:
  1. sudo systemctl start docker
  2. sudo systemctl enable docker
复制代码

验证安装

验证Docker是否正确安装:
  1. sudo docker run hello-world
复制代码

如果看到”Hello from Docker!“的输出,表示Docker已成功安装。

将用户添加到docker组

为了避免每次使用Docker命令都需要sudo,可以将当前用户添加到docker组:
  1. sudo usermod -aG docker $USER
复制代码

注意:添加用户到docker组后,需要重新登录才能生效。

Docker基本配置

配置镜像加速器

在中国大陆地区,使用Docker Hub可能会比较慢,可以配置镜像加速器来提高下载速度。以阿里云镜像加速器为例:

创建或编辑Docker配置文件:
  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4.   "registry-mirrors": ["https://<你的阿里云加速器地址>.mirror.aliyuncs.com"]
  5. }
  6. EOF
复制代码

请将<你的阿里云加速器地址>替换为你在阿里云容器镜像服务申请的加速器地址。

然后重启Docker服务:
  1. sudo systemctl daemon-reload
  2. sudo systemctl restart docker
复制代码

配置日志驱动

Docker默认使用json-file日志驱动,可能会产生大量日志文件。可以通过配置日志驱动来限制日志大小:

编辑/etc/docker/daemon.json文件:
  1. {
  2.   "log-driver": "json-file",
  3.   "log-opts": {
  4.     "max-size": "10m",
  5.     "max-file": "3"
  6.   }
  7. }
复制代码

然后重启Docker服务:
  1. sudo systemctl restart docker
复制代码

配置存储驱动

Docker支持多种存储驱动,如overlay2、devicemapper等。在Rocky Linux上,推荐使用overlay2存储驱动。可以通过以下命令确认当前使用的存储驱动:
  1. docker info | grep 'Storage Driver'
复制代码

如果需要更改存储驱动,可以编辑/etc/docker/daemon.json文件:
  1. {
  2.   "storage-driver": "overlay2"
  3. }
复制代码

然后重启Docker服务:
  1. sudo systemctl restart docker
复制代码

配置网络

Docker默认创建一个名为bridge的网桥,用于容器间的通信。可以通过以下命令查看默认网络:
  1. docker network ls
复制代码

可以创建自定义网络来满足特定需求:
  1. docker network create --driver bridge my-network
复制代码

在Rocky Linux上使用Docker的最佳实践

使用Dockerfile构建镜像

Dockerfile是用于构建Docker镜像的文本文件,包含了一系列指令。以下是一个简单的Dockerfile示例:
  1. # 使用官方的Python运行时作为父镜像
  2. FROM python:3.8-slim
  3. # 设置工作目录
  4. WORKDIR /app
  5. # 将当前目录内容复制到容器的/app目录下
  6. COPY . /app
  7. # 安装依赖
  8. RUN pip install --no-cache-dir -r requirements.txt
  9. # 对外暴露端口
  10. EXPOSE 8000
  11. # 定义环境变量
  12. ENV NAME World
  13. # 运行应用
  14. CMD ["python", "app.py"]
复制代码

构建镜像:
  1. docker build -t my-python-app .
复制代码

使用.dockerignore文件

在构建镜像时,可以使用.dockerignore文件来排除不必要的文件和目录,减少构建上下文的大小。以下是一个.dockerignore文件的示例:
  1. # Git文件
  2. .git
  3. .gitignore
  4. # Python缓存
  5. __pycache__/
  6. *.py[cod]
  7. *$py.class
  8. # 虚拟环境
  9. venv/
  10. env/
  11. # 日志文件
  12. *.log
  13. # 临时文件
  14. .tmp/
复制代码

使用多阶段构建

多阶段构建可以帮助我们创建更小、更安全的镜像。以下是一个使用多阶段构建的Dockerfile示例:
  1. # 第一阶段:构建应用
  2. FROM golang:1.16 AS builder
  3. WORKDIR /app
  4. COPY . .
  5. RUN go build -o myapp
  6. # 第二阶段:运行应用
  7. FROM alpine:latest
  8. WORKDIR /root/
  9. COPY --from=builder /app/myapp .
  10. CMD ["./myapp"]
复制代码

使用健康检查

健康检查可以帮助我们监控容器的状态。以下是一个包含健康检查的Dockerfile示例:
  1. FROM nginx:latest
  2. # 复制自定义配置
  3. COPY nginx.conf /etc/nginx/nginx.conf
  4. # 健康检查
  5. HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  6.   CMD curl -f http://localhost/ || exit 1
复制代码

使用非root用户运行容器

出于安全考虑,应该避免使用root用户运行容器。以下是一个使用非root用户的Dockerfile示例:
  1. FROM python:3.8-slim
  2. # 创建非root用户
  3. RUN groupadd -r appuser && useradd -r -g appuser appuser
  4. # 设置工作目录
  5. WORKDIR /app
  6. # 复制应用代码
  7. COPY . /app
  8. # 安装依赖
  9. RUN pip install --no-cache-dir -r requirements.txt
  10. # 切换到非root用户
  11. USER appuser
  12. # 运行应用
  13. CMD ["python", "app.py"]
复制代码

构建高效稳定的容器化应用环境

使用Docker Compose管理多容器应用

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过YAML文件配置应用服务,然后使用一个命令创建和启动所有服务。

以下是一个docker-compose.yml文件的示例:
  1. version: '3.8'
  2. services:
  3.   web:
  4.     build: .
  5.     ports:
  6.       - "8000:8000"
  7.     depends_on:
  8.       - db
  9.     environment:
  10.       - DATABASE_URL=postgresql://user:password@db:5432/mydb
  11.     volumes:
  12.       - .:/app
  13.       - /app/node_modules
  14.     networks:
  15.       - app-network
  16.   db:
  17.     image: postgres:13
  18.     environment:
  19.       - POSTGRES_USER=user
  20.       - POSTGRES_PASSWORD=password
  21.       - POSTGRES_DB=mydb
  22.     volumes:
  23.       - postgres-data:/var/lib/postgresql/data
  24.     networks:
  25.       - app-network
  26. volumes:
  27.   postgres-data:
  28. networks:
  29.   app-network:
  30.     driver: bridge
复制代码

使用Docker Compose启动应用:
  1. docker-compose up -d
复制代码

使用数据卷持久化数据

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:

• 数据卷可以在容器之间共享和重用
• 对数据卷的修改会立马生效
• 对数据卷的更新不会影响镜像
• 数据卷默认会一直存在,即使容器被删除

创建数据卷:
  1. docker volume create my-volume
复制代码

使用数据卷:
  1. docker run -d -v my-volume:/app/data my-image
复制代码

使用资源限制

为了避免容器占用过多系统资源,可以对容器设置资源限制:
  1. # 限制容器使用的内存
  2. docker run -d --memory="512m" my-image
  3. # 限制容器使用的CPU
  4. docker run -d --cpus="1.5" my-image
  5. # 限制容器可以使用的CPU核心
  6. docker run -d --cpuset-cpus="0,1" my-image
复制代码

使用Docker Swarm进行容器编排

Docker Swarm是Docker的原生集群工具,可以将多个Docker主机组成一个虚拟的Docker主机。

初始化Swarm集群:
  1. docker swarm init --advertise-addr <MANAGER-IP>
复制代码

将工作节点加入集群:
  1. docker swarm join --token <TOKEN> <MANAGER-IP>:2377
复制代码

使用Docker Stack部署应用:
  1. # docker-stack.yml
  2. version: '3.8'
  3. services:
  4.   web:
  5.     image: my-web-app:latest
  6.     ports:
  7.       - "80:80"
  8.     deploy:
  9.       replicas: 3
  10.       update_config:
  11.         parallelism: 1
  12.         delay: 10s
  13.       restart_policy:
  14.         condition: on-failure
  15.     networks:
  16.       - webnet
  17.   visualizer:
  18.     image: dockersamples/visualizer:stable
  19.     ports:
  20.       - "8080:8080"
  21.     volumes:
  22.       - "/var/run/docker.sock:/var/run/docker.sock"
  23.     deploy:
  24.       placement:
  25.         constraints: [node.role == manager]
  26.     networks:
  27.       - webnet
  28. networks:
  29.   webnet:
复制代码

部署应用:
  1. docker stack deploy -c docker-stack.yml myapp
复制代码

安全考虑

使用内容信任

Docker内容信任(DCT)允许您验证镜像的完整性和发布者。启用DCT:
  1. export DOCKER_CONTENT_TRUST=1
复制代码

使用安全扫描

Docker提供了安全扫描功能,可以检查镜像中的已知漏洞:
  1. docker scan my-image
复制代码

使用安全配置

可以通过以下方式增强Docker的安全性:

1. 使用非root用户运行容器
2. 限制容器的能力
3. 使用只读根文件系统
4. 限制容器间的通信

以下是一个增强安全性的docker-compose.yml示例:
  1. version: '3.8'
  2. services:
  3.   web:
  4.     image: my-web-app:latest
  5.     read_only: true
  6.     tmpfs:
  7.       - /tmp
  8.       - /run
  9.       - /var/lock
  10.     cap_drop:
  11.       - ALL
  12.     cap_add:
  13.       - CHOWN
  14.       - NET_BIND_SERVICE
  15.     security_opt:
  16.       - no-new-privileges:true
  17.     user: "1000:1000"
  18.     networks:
  19.       - webnet
复制代码

使用AppArmor或SELinux

Rocky Linux默认使用SELinux,可以利用它来增强容器安全性:
  1. # 安装SELinux策略
  2. sudo dnf install container-selinux
  3. # 确保SELinux处于强制模式
  4. sudo setenforce 1
复制代码

性能优化

优化镜像大小

优化镜像大小可以提高下载速度和存储效率:

1. 使用更小的基础镜像,如alpine
2. 使用多阶段构建
3. 合并RUN指令
4. 清理不必要的包和缓存

以下是一个优化后的Dockerfile示例:
  1. # 使用更小的基础镜像
  2. FROM alpine:3.13
  3. # 安装必要的包并清理缓存
  4. RUN apk add --no-cache python3 py3-pip && \
  5.     pip3 install --no-cache-dir flask
  6. # 设置工作目录
  7. WORKDIR /app
  8. # 复制应用代码
  9. COPY . .
  10. # 切换到非root用户
  11. RUN addgroup -g 1001 -S appuser && \
  12.     adduser -u 1001 -S appuser -G appuser
  13. USER appuser
  14. # 运行应用
  15. CMD ["python3", "app.py"]
复制代码

使用缓存层优化构建

Docker会缓存构建过程中的每一层,合理利用缓存可以加快构建速度:

1. 将不常变化的指令放在前面
2. 将经常变化的指令放在后面
3. 复制文件时,只复制必要的文件

以下是一个优化构建缓存的Dockerfile示例:
  1. # 使用官方的Python运行时作为父镜像
  2. FROM python:3.8-slim
  3. # 设置工作目录
  4. WORKDIR /app
  5. # 先复制依赖文件,利用缓存
  6. COPY requirements.txt .
  7. RUN pip install --no-cache-dir -r requirements.txt
  8. # 再复制应用代码
  9. COPY . .
  10. # 运行应用
  11. CMD ["python", "app.py"]
复制代码

使用资源限制优化性能

通过合理设置资源限制,可以优化容器性能:
  1. # 设置内存限制和交换内存限制
  2. docker run -d --memory="512m" --memory-swap="1g" my-image
  3. # 设置CPU份额和限制
  4. docker run -d --cpu-shares=512 --cpus="1.5" my-image
  5. # 设置IO权重和限制
  6. docker run -d --blkio-weight=300 my-image
复制代码

监控与日志管理

使用Docker自带监控命令

Docker提供了一些基本的监控命令:
  1. # 查看容器资源使用情况
  2. docker stats
  3. # 查看容器日志
  4. docker logs <container-id>
  5. # 查看容器详细信息
  6. docker inspect <container-id>
复制代码

使用cAdvisor进行监控

cAdvisor是Google开源的容器监控工具,可以收集、聚合、处理和导出关于正在运行的容器的信息:
  1. # 运行cAdvisor
  2. docker run -d \
  3.   --name=cadvisor \
  4.   --volume=/:/rootfs:ro \
  5.   --volume=/var/run:/var/run:ro \
  6.   --volume=/sys:/sys:ro \
  7.   --volume=/var/lib/docker/:/var/lib/docker:ro \
  8.   --publish=8080:8080 \
  9.   --detach=true \
  10.   --restart=always \
  11.   google/cadvisor:latest
复制代码

使用Prometheus和Grafana进行监控

Prometheus是一个开源的监控和告警系统,Grafana是一个开源的度量分析和可视化套件:
  1. # docker-compose.yml
  2. version: '3.8'
  3. services:
  4.   prometheus:
  5.     image: prom/prometheus
  6.     ports:
  7.       - "9090:9090"
  8.     volumes:
  9.       - ./prometheus.yml:/etc/prometheus/prometheus.yml
  10.     command:
  11.       - '--config.file=/etc/prometheus/prometheus.yml'
  12.   grafana:
  13.     image: grafana/grafana
  14.     ports:
  15.       - "3000:3000"
  16.     environment:
  17.       - GF_SECURITY_ADMIN_PASSWORD=admin
  18.     volumes:
  19.       - grafana-storage:/var/lib/grafana
  20. volumes:
  21.   grafana-storage:
复制代码

使用ELK Stack进行日志管理

ELK Stack(Elasticsearch、Logstash、Kibana)是一个流行的日志管理解决方案:
  1. # docker-compose.yml
  2. version: '3.8'
  3. services:
  4.   elasticsearch:
  5.     image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
  6.     environment:
  7.       - discovery.type=single-node
  8.     ports:
  9.       - "9200:9200"
  10.     volumes:
  11.       - elasticsearch-data:/usr/share/elasticsearch/data
  12.   logstash:
  13.     image: docker.elastic.co/logstash/logstash:7.10.1
  14.     ports:
  15.       - "5000:5000"
  16.     volumes:
  17.       - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
  18.     depends_on:
  19.       - elasticsearch
  20.   kibana:
  21.     image: docker.elastic.co/kibana/kibana:7.10.1
  22.     ports:
  23.       - "5601:5601"
  24.     depends_on:
  25.       - elasticsearch
  26. volumes:
  27.   elasticsearch-data:
复制代码

常见问题与解决方案

容器无法启动

问题:容器无法启动,没有明显的错误信息。

解决方案:

1. 检查容器日志:docker logs <container-id>
2. 以交互模式运行容器:docker run -it --entrypoint /bin/bash <image>
3. 检查Docker守护进程状态:sudo systemctl status docker

容器网络连接问题

问题:容器无法访问外部网络或其他容器。

解决方案:

1. 检查容器网络配置:docker inspect <container-id> | grep -A 20 Networks
2. 检查防火墙设置:sudo firewall-cmd --list-all
3. 尝试重启Docker网络:sudo systemctl restart docker

镜像构建失败

问题:Docker镜像构建过程中出现错误。

解决方案:

1. 检查Dockerfile语法
2. 确保构建上下文中包含所有必要的文件
3. 使用--no-cache选项重新构建:docker build --no-cache -t my-image .

存储空间不足

问题:Docker占用了大量磁盘空间。

解决方案:

1. 清理未使用的镜像、容器和卷:docker system prune -a
2. 查看Docker磁盘使用情况:docker system df
3. 配置Docker使用更大的存储空间

容器性能问题

问题:容器运行缓慢或资源使用过高。

解决方案:

1. 检查容器资源使用情况:docker stats <container-id>
2. 调整容器资源限制:docker run --memory="512m" --cpus="1.5" my-image
3. 优化应用配置和代码

总结

Rocky Linux与Docker的结合为构建高效稳定的容器化应用环境提供了强大的基础。通过本文的介绍,我们了解了如何在Rocky Linux上安装和配置Docker,以及使用Docker构建和管理容器化应用的最佳实践。

从安装配置到性能优化,从安全考虑到监控日志管理,我们全面探讨了Rocky Linux与Docker结合的各个方面。通过遵循这些最佳实践,您可以构建一个高效、稳定且安全的容器化应用环境,为您的业务提供强大的支持。

随着容器技术的不断发展,Rocky Linux和Docker的结合将继续为企业提供可靠的基础设施解决方案。希望本文能为您在Rocky Linux上使用Docker提供有价值的指导和参考。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

频道订阅

频道订阅

加入社群

加入社群

联系我们|TG频道|RSS

Powered by Pixtech

© 2025 Pixtech Team.