当前位置: 首页 > news >正文

CentOS7部署DockerCompose:从零搭建容器编排环境

1. 环境准备与Docker安装

在CentOS7上部署DockerCompose之前,我们需要先确保系统环境符合要求。我遇到过不少新手直接跳过环境检查导致后续安装失败的案例,所以这里特别强调准备工作的重要性。首先确认你的CentOS7系统是64位版本,内核版本不低于3.10。这个要求其实绝大多数CentOS7系统都能满足,但检查一下总没错:

uname -r

如果看到类似3.10.0-1160.el7.x86_64的输出就说明内核版本OK。接下来建议更新系统所有包到最新版本,这个步骤很多人会忽略,但能避免很多奇怪的依赖问题:

yum update -y

安装Docker的详细过程其实比想象中简单,但有几个关键点需要注意。首先是卸载旧版本(即使你确定没装过也建议执行一下):

yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

安装必要的依赖包时,我发现很多教程漏掉了device-mapper-persistent-datalvm2这两个包,它们对Docker的存储驱动很重要:

yum install -y yum-utils device-mapper-persistent-data lvm2

配置国内镜像源是必须的操作,否则下载速度会让你怀疑人生。阿里云的源我用下来最稳定:

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

安装Docker CE社区版时,建议明确指定版本号以避免兼容性问题。我习惯用这个命令查看可用版本:

yum list docker-ce --showduplicates | sort -r

然后选择稳定版安装,比如:

yum install -y docker-ce-20.10.12

2. Docker服务配置与优化

安装完Docker后,服务启动前的配置往往被新手忽视。首先是防火墙问题,开发环境可以直接关闭(生产环境需要单独配置规则):

systemctl stop firewalld systemctl disable firewalld

启动Docker服务并设置开机自启:

systemctl start docker systemctl enable docker

验证安装是否成功时,别光看版本号,我建议跑个测试容器:

docker run hello-world

配置镜像加速器是提升体验的关键。阿里云、腾讯云等都有免费加速服务,以阿里云为例,先登录容器镜像服务控制台获取专属加速地址,然后:

mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://your-aliyun-mirror.mirror.aliyuncs.com"] } EOF systemctl daemon-reload systemctl restart docker

存储驱动选择也很重要,特别是对生产环境。CentOS7默认使用devicemapper,但 overlay2 性能更好:

# 查看当前存储驱动 docker info | grep "Storage Driver" # 如需修改为overlay2 vim /etc/docker/daemon.json # 添加:"storage-driver": "overlay2"

日志管理是另一个需要关注的配置点,避免日志文件撑爆磁盘:

# 在daemon.json中添加 "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }

3. DockerCompose安装与配置

DockerCompose的安装方式有多种,我推荐直接下载二进制文件的方式,比pip安装更干净。首先确认系统已安装curl:

yum install -y curl

下载最新稳定版(截至2023年7月是v2.18.1):

DOCKER_COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4) curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

如果GitHub访问慢,可以使用国内镜像:

curl -L "https://get.daocloud.io/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

权限设置这一步很多人会忘记,导致无法执行:

chmod +x /usr/local/bin/docker-compose

验证安装是否成功:

docker-compose --version

命令补全功能虽然非必须,但能极大提升效率。bash补全安装方法:

curl -L https://raw.githubusercontent.com/docker/compose/${DOCKER_COMPOSE_VERSION}/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose source ~/.bashrc

如果遇到raw.githubusercontent.com无法访问的问题,可以修改hosts:

echo "185.199.108.133 raw.githubusercontent.com" >> /etc/hosts

4. 私有镜像仓库搭建

简化版私有仓库适合内部开发环境快速搭建,一条命令即可:

docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry:2

测试仓库是否正常工作:

docker pull nginx:alpine docker tag nginx:alpine localhost:5000/my-nginx docker push localhost:5000/my-nginx curl http://localhost:5000/v2/_catalog

带UI的私有仓库更直观,推荐使用docker-compose部署。先创建docker-compose.yml:

version: '3' services: registry: image: registry:2 volumes: - ./registry-data:/var/lib/registry networks: - registry-net ui: image: joxit/docker-registry-ui:latest ports: - 8080:80 environment: - REGISTRY_URL=http://registry:5000 depends_on: - registry networks: - registry-net networks: registry-net:

启动服务:

docker-compose up -d

配置非安全仓库时需要注意,如果使用HTTP而不是HTTPS,需要在daemon.json中添加:

{ "insecure-registries": ["your-registry-ip:5000"] }

生产环境建议配置HTTPS,需要准备域名和SSL证书。这里分享一个我常用的自签名证书生成方法:

mkdir -p certs openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt

然后修改docker-compose.yml中的registry服务配置:

registry: image: registry:2 ports: - 5000:5000 environment: REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt REGISTRY_HTTP_TLS_KEY: /certs/domain.key volumes: - ./registry-data:/var/lib/registry - ./certs:/certs

5. 实战DockerCompose应用部署

编写第一个compose文件时,建议从简单应用开始。比如部署WordPress博客系统:

version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data:

启动应用:

docker-compose up -d

常用管理命令需要熟练掌握:

  • docker-compose ps查看服务状态
  • docker-compose logs -f跟踪日志
  • docker-compose down停止并删除容器
  • docker-compose restart重启服务

多环境配置是实际项目中的常见需求。我通常这样组织文件结构:

project/ ├── docker-compose.yml ├── .env ├── docker-compose.override.yml └── docker-compose.prod.yml

通过环境变量文件(.env)管理敏感信息:

DB_PASSWORD=securepassword CACHE_REDIS_URL=redis://redis:6379

然后在不同环境的compose文件中引用:

services: db: environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}

性能调优方面,有几个实用技巧:

  1. 合理设置资源限制:
services: app: deploy: resources: limits: cpus: '0.5' memory: 512M
  1. 使用健康检查确保服务可用性:
healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 30s timeout: 10s retries: 3
  1. 优化构建缓存:
# 把变化频率低的层放在前面 FROM node:14 WORKDIR /app COPY package.json yarn.lock ./ RUN yarn install COPY . .

6. 常见问题排查与维护

网络问题排查是DockerCompose使用中的高频问题。当容器间无法通信时,我通常这样排查:

# 查看网络列表 docker network ls # 查看具体网络详情 docker network inspect projectname_default # 进入容器测试连通性 docker-compose run --rm app ping db

数据卷管理也很重要,特别是备份恢复场景。备份MySQL数据卷示例:

docker run --rm --volumes-from project_db_1 -v $(pwd):/backup alpine tar cvf /backup/backup.tar /var/lib/mysql

恢复则是反向操作:

docker run --rm --volumes-from project_db_1 -v $(pwd):/backup alpine sh -c "cd /var/lib/mysql && tar xvf /backup/backup.tar --strip 1"

日志收集方案我推荐ELK栈,简单配置如下:

version: '3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.12.0 environment: - discovery.type=single-node ports: - "9200:9200" logstash: image: docker.elastic.co/logstash/logstash:7.12.0 volumes: - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf depends_on: - elasticsearch kibana: image: docker.elastic.co/kibana/kibana:7.12.0 ports: - "5601:5601" depends_on: - elasticsearch

对应的logstash.conf配置:

input { syslog { port => 51415 } } output { elasticsearch { hosts => ["elasticsearch:9200"] } }

安全加固方面,有几个必须做的措施:

  1. 定期更新镜像:
docker-compose pull docker-compose up -d
  1. 使用非root用户运行容器:
services: app: user: "1000:1000"
  1. 限制容器能力:
cap_drop: - ALL cap_add: - NET_BIND_SERVICE
  1. 配置只读文件系统:
read_only: true tmpfs: - /tmp
http://www.jsqmd.com/news/669416/

相关文章:

  • 从PointNet到PointNeXt:为什么‘共享’MLP是点云模型设计的基石?
  • 避坑指南:Oracle 19c用户授权那些事儿——从CONNECT到SYSDBA,权限到底怎么给?
  • Halcon深度学习分类实战:从标注到C#客户端调用的完整流程(附避坑指南)
  • 人机协同中常常存在多次交互、分解与分配
  • Qt Creator 5.0.2实战:手把手教你用QMediaPlayer打造一个带播放列表的本地MP4播放器
  • BL0937驱动踩坑实录:HC32L130中断配置与功耗优化的那些事儿
  • Libre Barcode:3分钟掌握免费开源条码字体完整解决方案
  • vSphere 6.7U3g证书突然过期,凌晨三点救火记:手把手教你用fixsts.sh脚本修复STS证书
  • 别再手动调点了!用Matlab搞定NURBS曲线插值,从数据点到光滑曲线一步到位
  • GPL14951芯片注释实战:从平台识别到探针转换的完整指南
  • Avalonia实战:手把手教你打造无边框物联系统界面(附完整源码)
  • PaddleOCR-VL-WEB场景应用:金融票据手写信息提取,快速部署实战指南
  • 《SAP FICO系统配置从入门到精通共40篇》033、财务信息系统(FIS):创建自定义报表与 Drilldown
  • 告别SystemExit: 2:深入剖析parser.parse_args()的报错根源与实战修复
  • 从PyCharm安装说开去:一文搞懂Linux里那些‘绿色软件’(.tar.gz)该怎么伺候
  • 告别重启焦虑:手把手教你用UEFI Capsule Update实现Windows/Linux系统固件无感升级
  • 别再傻傻用pickle存大数组了!试试joblib的Memory缓存,速度提升不止一点点
  • 从GitHub高星C++内存池项目中提炼的三种设计哲学与选型指南
  • 从Excel高级筛选到Pandas:如何用Python一键搞定你的复杂报表条件?
  • 从太空到芯片:基于银河飞腾DSP与FPGA的星载实时图像识别系统全解析
  • AI进化论:从图灵测试到ChatGPT,那些改变游戏规则的技术里程碑
  • 从8051到ESP32:聊聊GPIO这些年背后的硬件设计变迁(附Arduino代码对比)
  • 告别时序烦恼:手把手教你用FPGA的SPI接口正确读写MCP2518FD寄存器(附ILA调试技巧)
  • Vue项目里用Lottie动画,除了播放暂停,这5个高级玩法你试过吗?
  • 【仅限首批200名开发者开放】AGI情感交互沙盒环境正式解封:含7类真实社交冲突场景数据集与动态共情评分API
  • 别再复制粘贴了!手把手教你用Vivado封装一个带AXI-Lite和AXI-Stream的IP核(附源码结构解析)
  • 用Wireshark抓包分析极域电子教室V6.0 2016豪华版,手把手教你实现局域网内学生机互控
  • 告别环境配置烦恼:用Docker一键部署RKNN-Toolkit2开发环境(支持RK3566/RK3588)
  • Xshell连不上虚拟机?除了IP和防火墙,这3个Windows服务状态别忘了看一眼
  • 03华夏之光永存:黄大年茶思屋榜文解法「难题揭榜第9期 第3题」超低功耗智能预测唤醒与状态同步技术工程化解法