DevOps入门详解1---DevOps介绍

DevOps入门详解1---DevOps介绍

DevOps入门详解2---可持续集成jenkins

DevOps入门详解3---容器管理平台Rancher

1 DevOps介绍

  1.1 什么是DevOps

      DevOpsDevelopmentOperations两个词的缩写,引用百度百科的定义:

       DevOps是一种方法或理念,它涵盖开发、测试、运维的整个过程。DevOps是提高软件开发、测试、运维、运营等各部门的沟通与协作质量的方法和过程,DevOps强调软件开发人员与软件测试、软件运维、质量保障(QA)部门之间有效的沟通与协作,强调通过自动化的方法去管理软件变更、软件集成,使软件从构建到测试、发布更加快捷、可靠,最终按时交付软件。

       

 1.2 DevOps工具链

        DevOps兴起于2009年,近年来由于云计算、互联网的发展,促进了DevOps的基础设施及工具链的发展,涌现了 一大批优秀的工具,这些工具包括开发、测试、运维的各个领域,例如:GitHubGit/SVNDockerJenkins、 Hudson、Ant/Maven/GradleSeleniumQUnitJMeter等。下图是DevOps相关的工具集:

     

2 Docker

  2.1 虚拟化技术

     2.1.1 问题描述

        互联网的发展使软件业发生了巨大的变化,其中一个显著的变化是软件的规模越来越大,基于微服务架构的软件在生产部署时遇到了这样的挑战:

1、微服务的开发语言、操作系统、依赖库等环境配置不同,如何快速安装、迁移、配置软件?

2、一个软件由若干微服务组成,如何快速批量部署微服务?

3、如何有效的利于计算机资源?

    针对前两个问题的思考:

        传统的软件部署流程是:安装操作系统-->安装依赖软件/-->安装软件(微服务)-->配置软件-->最终软件上线运行,面对大量的微服务及微服务集群,使用此方案不仅效率低下,而且还可能会出现环境兼容问题,显然此方案不适合用在微服务部署。

    设想:如果有一项技术可以快速的将软件及所需要的各种环境配置打包、批量复制将会解决以上问题。

    针对第三个问题的思考:

        在一台计算机只安装一个微服务对计算机资源极大的浪费,如果安装多个微服务就可以有效的利于计算机资源,但是对于批量软件的安装部署还是会面临12问题。

    设想:在一台计算机安装多个微服务,使用一种技术将微服务打包、复制部署,并且微服务之间隔离互不影响。

    2.1.2 虚拟化技术

     引用百度百科(https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E5%8C%96/547949

     

        总结:虚拟化技术是对软件基础设施、操作系统、软件等IT资源进行有效的管理,使用户不再受物理资源的限制, 提高计算机资源的利用率。虚拟化技术是云计算的基础,例如阿里云的云主机、腾讯云等都应用了虚拟化技术。

        虚拟化技术整体上包括两个方面:硬件虚拟化和软件虚拟化,具体分为:网络虚拟化、存储虚拟化、桌面虚拟化、 服务器虚拟化等,我们平常说的最多的是服务器虚拟化。

        服务器虚拟化就是在同一个物理服务器上运行多个虚拟机,让服务器的cpu、内存、磁盘、I/O等硬件设施为每个虚拟机服务,在每个虚拟机中运行不同的软件,虚拟机之间是隔离状态。

        服务器虚拟化主要有两种技术:

1Hypervisor也叫VMMvirtual machine monitor)即虚拟机监视器 Hypervisor是一种将操作系统与硬件抽象分离的方法,实现在宿主机(host machine)上能同时运行多个客户机 (guest machine),每个客户机就是一个虚拟机,这些虚拟机高效地分享宿主机的硬件资源。 如下图:

       在服务器(宿主机)上安装操作系统,并安装hypervisor虚拟机管理软件,如VMwareVirtualBox等,由 hypervisor管理多个虚拟机,每个虚拟机上需要安装客户操作系统、依赖库、应用软件。

    2Containers容器化技术

    

       容器技术中docker引擎取代了hypervisordocker引擎是运行在住宿操作系统上的一个进程,该进程管理了多个 docker容器,每个docker容器集成了应用软件、依赖库,容器之间相互隔离。

  3、技术对比:

      资源占用:

      虚拟机由于是独立的操作系统,占用资源比docker多。

      启动速度:

      虚拟机包括操作系统,启动虚拟机相当于启动一个操作系统,容器则不一样,容器中只包括操作系统的内核,启动 一个容器实例相当于启动一个进程,容器的启动速度比虚拟机快。

      体积:

      容器包括操作系统内核、软件及依赖库,虚拟机不仅包括软件和依赖库还将完整的操作系统打包进去,虚拟机的体 积比容器大的多。

    2.1.3 Docker介绍

详见本人另外一篇文章:docker入门与安装

 2.2 部署微服务到Docker

   2.2.1 什么是Dockerfile

    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

    1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;

    2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;

    3、对于运维人员:在部署时,可以实现应用的无缝移植。

   2.2.2 Dockerfile常用命令

  以下以springboot工程为例,在工程目录下编写DockFile

FROM openjdk:8-jre-alpine
MAINTAINER wolter <[email protected]>
VOLUME /tmp
COPY target/live-service-2.0.0.jar /usr/local
EXPOSE 8099
ENTRYPOINT ["java", "-jar", "-Ddubbo.application.logger=slf4j","/usr/local/live-service-2.0.0.jar"]

  pom.xml增加了docker-maven-plugin插件,其作用是构建docker镜像并将镜像推送到 Docker私有仓库(这里忽略搭建docker的私有库);

<build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <!--docker镜像相关的 配置 信息-->
                <configuration>
                    <!--Dockerfile文件所在目录-->
                    <dockerDirectory>${project.basedir}</dockerDirectory>
                    <dockerHost>http://ip:2375</dockerHost>
                    <!--TAG,这里用工程版本号-->
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                    </imageTags>
                    <!--镜像名,这里用工程名-->
                    <imageName>ip:5000/${project.artifactId}:${project.version}</imageName>
                    <!--构建镜像的配置信息-->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.artifactId}-${project.version}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

  idea安装docker插件 

配置Docker engine地址

 Terminal进入工程目录下,运行编译命令

  build完成后,服务器上可以看见docker镜像

  至此已上传启动镜像成功。

发布了41 篇原创文章 · 获赞 47 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/u014526891/article/details/94603950