博客
关于我
第十课 Docker践行DevOps理念-Devops实战
阅读量:163 次
发布时间:2019-02-27

本文共 3751 字,大约阅读时间需要 12 分钟。

Docker 实践指南:DevOps 实战

第一节 DevOps 实践基础

1.1 DevOps 基础流程

在本节中,我们将通过 GitLab CI 实现持续集成 (CI) 和持续交付 (CD) 的目标。GitLab CI 是一款功能强大的开源 CI/CD 工具,支持与 GitLab 集成,适合小型到大型项目使用。

GitLab CI 优势

  • 安装部署简单,支持分布式执行
  • 与 GitLab 集成紧密,操作流畅

1.2 GitLab 服务器搭建

环境要求

  • 服务器机器配置:至少 4GB 内存
  • 操作系统:CentOS 7 或类似

安装步骤

# 安装依赖sudo yum install -y git vim gcc glibc-static telnetsudo yum install -y curl policycoreutils-python openssh-serversudo systemctl enable sshdsudo systemctl start sshdsudo yum install postfixsudo systemctl enable postfixsudo systemctl start postfix# 设置 GitLab 源sudo mkdir -p /etc/yum.repos.d/sudo tee /etc/yum.repos.d/gitlab-ce.repo <<-'EOF'/gitlab-ce name=GitLab CE Repositorybaseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/gpgcheck=0enabled=1EOF# 安装 GitLabsudo EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ce# 配置 GitLabsudo gitlab-ctl reconfigure

项目创建

  • 创建 demo
  • 在组中创建项目 Helloworld
  • 添加 README.md 文件

1.3 GitLab CI 服务器搭建

GitLab CI Runner 配置

  • 安装 Docker
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{    "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]}EOFsudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repossudo yum install -y docker-ce# 安装 GitLab CI Runnercurl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bashsudo yum install gitlab-ci-multi-runner -y# 配置 Docker 权限sudo usermod -aG docker gitlab-runnerssudo service docker restartsudo gitlab-ci-multi-runner restart

Runner 注册

  • 注册 GitLab CI Runner 到 GitLab 服务器
# 添加 GitLab 服务器 hostsudo vi /etc/hosts# 注册 Runnersudo gitlab-ci-multi-runner register

1.4 Pipeline 实现示例

pipeline YAML 示例

stages:  - build  - test  - deployjob1:  stage: test  tags: [demo]  script:    - echo "I am job1"    - echo "I am in test stage"job2:  stage: build  tags: [demo]  script:    - echo "I am job2"    - echo "I am in build stage"job3:  stage: deploy  tags: [demo]  script:    - echo "I am job3"    - echo "I am in deploy stage"

第二节 Python 项目 CI 集成

2.1 项目导入

  • 将 GitHub 项目导入 GitLab
  • 克隆项目到本地
    git clone http://gitlab.example.com/root/docker_hub_flask_demo.git

2.2 Docker 镜像构建

  • 检查镜像
    docker build -t flask-demo
  • 运行容器
    docker run -d -p 5000:5000 flask-demo

2.3 DNS 解决方案

  • 搭建 DNS 服务
    docker pull andyshinn/dnsmasqdocker run -d -p 53:53/tcp -p 53:53/udp --cap-add=NET_ADMIN andyshinn/dnsmasq
  • 配置 DNS
    docker exec -it dns-server /bin/shvi /etc/resolv.dnsmasqvi /etc/dnsmasqhostsdocker restart dns-server

2.4 Python 版本 Runner

  • 注册 Python Runner
    sudo gitlab-ci-multi-runner register
  • 输入描述和标签
  • 镜像拉取
    docker pull python:2.7docker pull python:3.4

第三节 Java 项目 CI

3.1 Maven Runner 配置

  • 注册 Maven Runner
    sudo gitlab-ci-multi-runner register
  • 输入描述和标签
  • 镜像拉取
    docker pull maven:latest

第四节 Python 项目发布

4.1 CD 部署

  • 修改 YAML 文件
    stages: [deploy]script:  - docker build -t flask-demo  - docker rm -f web || true  - docker run -d -p 5000:5000 --name=web flask-demotags: [demo]only: master

4.2 自动化发布

  • 搭建私有仓库
    docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 registry:2
  • 配置 DNS
    docker exec -it dns-server /bin/shvi /etc/dnsmasqhostsdocker restart dns-server
  • 推送镜像
    docker tag busybox registry.example.com:5000/busyboxdocker push registry.example.com:5000/busybox

4.3 CI/CD 流水线

docker-deploy:  stage: deploy  script:    - docker build -t registry.example.com:5000/flask-demo .    - docker push registry.example.com:5000/flask-demo    - docker rm -f web || true    - docker run -d -p 5000:5000 --name=web flask-demo  tags: [demo]  only: masterdocker-image-release:  stage: release  script:    - docker build -t registry.example.com:5000/flask-demo:$CI_COMMIT_TAG .    - docker push registry.example.com:5000/flask-demo:$CI_COMMIT_TAG  tags: [demo]  only: tags

通过以上步骤,我们可以实现从需求分析到代码开发、测试、构建、部署的完整 CI/CD 流水线,提升开发效率和代码质量。

转载地址:http://zund.baihongyu.com/

你可能感兴趣的文章
postgresql 函数&存储过程 ; 递归查询
查看>>
PostgreSQL 分组聚合查询中 filter 子句替换 case when
查看>>
PostgreSQL 同步流复制锁瓶颈分析
查看>>
PostgreSQL 备份与还原命令 pg_dump
查看>>
Postgresql 外部表插件postgres_fdw的安装和使用
查看>>
PostgreSQL 如何从崩溃状态恢复(上)
查看>>
PostgreSQL 存储过程基本语法
查看>>
PostgreSQL 实现批量更新、删除、插入
查看>>
PostgreSQL 导入 .gz 备份文件
查看>>
PostgreSQL 批量插入&更新数据时报错(ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time)
查看>>
PostgreSQL 新增数据返回自增ID
查看>>
postgresql 更新多列数据
查看>>
PostgreSQL 服务启动后停止
查看>>
PostgreSQL 辟谣存在任意代码执行漏洞:消息不实
查看>>
PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
查看>>
Qt开发——简易调色板QPalette
查看>>
PostgreSQL-解决连接时遇到的乱码问题
查看>>
PostgreSQL15.2最新版本安装_远程连接_Navicat操作_pgAdmin操作_Windows10上安装---PostgreSQL工作笔记001
查看>>
PostgreSQL9.1 双机部署配置(主备数据同步)
查看>>
Qt开发——简易网络浏览器(一)
查看>>