Docker搭建DevOps自动化运维详细流程及注意事项
一、概述
DevOps自动化运维环境通常包含以下核心组件:
- 代码仓库:GitLab/GitHub
- CI/CD工具:Jenkins/GitLab CI
- 代码质量分析:SonarQube
- 制品仓库:Nexus/Harbor
- 监控系统:Prometheus + Grafana
- 日志管理:ELK Stack (Elasticsearch, Logstash, Kibana)
- 容器编排:Kubernetes/Docker Swarm
下面将详细介绍如何使用Docker搭建这些组件并集成成完整的DevOps环境。
二、前提条件
- 安装Docker (20.10+)和Docker Compose (2.0+)
- Linux服务器(推荐Ubuntu 20.04/CentOS 8)
- 至少8GB内存,50GB存储空间
- 基本网络知识
三、环境准备
1. 创建网络
docker network create devops-network
2. 创建数据目录
mkdir -p /opt/devops/{gitlab,jenkins,sonarqube,nexus,prometheus,grafana,elasticsearch,logstash,kibana}
四、搭建代码仓库 (GitLab)
1. 创建docker-compose.yml
cd /opt/devops/gitlab
nano docker-compose.yml
version: '3'
services:gitlab:image: 'gitlab/gitlab-ce:latest'container_name: gitlabrestart: alwayshostname: 'gitlab.example.com'environment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://gitlab.example.com:8929'gitlab_rails['gitlab_shell_ssh_port'] = 2224ports:- '8929:8929'- '2224:22'volumes:- './config:/etc/gitlab'- './logs:/var/log/gitlab'- './data:/var/opt/gitlab'networks:- devops-networknetworks:devops-network:external: true
2. 启动GitLab
docker-compose up -d
3. 注意事项
- 首次启动需要5-10分钟
- 默认管理员用户名为
root
,密码在首次访问时设置 - 确保分配足够的内存(至少4GB)
五、搭建CI/CD工具 (Jenkins)
1. 创建docker-compose.yml
cd /opt/devops/jenkins
nano docker-compose.yml
version: '3'
services:jenkins:image: 'jenkins/jenkins:lts-jdk11'container_name: jenkinsrestart: alwaysuser: rootports:- '8080:8080'- '50000:50000'volumes:- './data:/var/jenkins_home'- '/var/run/docker.sock:/var/run/docker.sock'networks:- devops-networknetworks:devops-network:external: true
2. 启动Jenkins
docker-compose up -d
3. 获取初始密码
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
4. 安装插件
访问http://YOUR_SERVER_IP:8080
,使用初始密码登录,安装推荐插件,并创建管理员账户。
5. 注意事项
-
安装以下关键插件:
-
Docker Pipeline
-
GitLab Plugin
-
SonarQube Scanner
-
Nexus Artifact Uploader
-
Kubernetes CLI
六、代码质量分析 (SonarQube)
1. 创建docker-compose.yml
cd /opt/devops/sonarqube
nano docker-compose.yml
version: '3'
services:sonarqube-db:image: postgres:13container_name: sonarqube-dbrestart: alwaysenvironment: