博客
关于我
第十课 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/

你可能感兴趣的文章
Netty源码—5.Pipeline和Handler一
查看>>
Netty源码—6.ByteBuf原理二
查看>>
Netty源码—7.ByteBuf原理三
查看>>
Netty源码—7.ByteBuf原理四
查看>>
Netty源码—8.编解码原理二
查看>>
Netty源码解读
查看>>
Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
查看>>
Netty相关
查看>>
Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
查看>>
Network Sniffer and Connection Analyzer
查看>>
NetworkX系列教程(11)-graph和其他数据格式转换
查看>>
Networkx读取军械调查-ITN综合传输网络?/读取GML文件
查看>>
Net与Flex入门
查看>>
net包之IPConn
查看>>
NFinal学习笔记 02—NFinalBuild
查看>>
NFS共享文件系统搭建
查看>>
nfs复习
查看>>
NFS网络文件系统
查看>>
ng 指令的自定义、使用
查看>>
nginx + etcd 动态负载均衡实践(二)—— 组件安装
查看>>