zoukankan      html  css  js  c++  java
  • 利用Docker重建容器化的开发环境

    利用Docker重建容器化的开发环境

    虚拟化云和容器机器的发展,给我们带来了极大的方便,尤其是开发环境,开发、测试、验证环境的维护和一致化一直困扰着开发和测试人员,为了配置一个环境往往需要花费大量的精力,而且还无法解决环境一致性问题,由于环境差异导致的Bug问题也让开发人员和测试耗费大量的精力。如何解决这种问题?那就是利用神器Docker容器了。本文虫虫将实例演示如何使用将Docker来轻松地建立一个高效的本地开发环境。

    打开百度APP,查看更多高清图片

    开发环境架构

    我们假设开发组使用了下面一个典型的多余系统架构,其中涉及了NodeJS、Python、Golang、数据还有Web前端JS等应用,架构图如下:

    架构组成

    构成部分由:

    NJS1:NodeJS服务,监听端口7000,连接数据库Db1(Psql数据库,监听端口5433)。

    Py1: Python服务,监听端口9000,连接数据库Db1。

    Go1: Golang服务,监听端口5000,连接数据库Db1。

    NJS2: NodeJS服务,监听端口8000,连接数据库Db2(Psql数据库,监听端口5432)。

    Web服务: webpack的开发前端服务器,监听端口8080。

    以上环境可以通过监听的端口互相通讯和数据交流。

    问题分析

    管理繁琐

    要管理这些服务,需要打开大量终端窗口,然后单独运行,虽然可以使用screen和tmux这样的神器来帮助我们使用多窗口,甚至工作界面的共享等,但是随着要管理不断增长,管理会相当繁琐耗时。

    不一致的依赖环境

    假设服务依赖于不同开发语言的版本(比如Python 2和Python 3 )。我们就需要在运行服务之前手动切换环境中语言版本,当然可以用多语言版本管理器比如pyenv我们服务业有可能需要多个数据库服务器,那么在运行服务之前,我们需要确保数据库服务器运行无误,并且数据库连接配置都无误。还有更多的是开发应用的基础类库版本的依赖问题。

    基于Docker的开发环境

    Docker容器是一种完美的工具,可以轻松地一键创建,部署和运行应用程序。通过容器可以将所有需要的环境打包到一个镜像中,然后通过镜像一键生成开发容器允。

    Docker容器

    理想的docker容器是一个超轻量级的linux的虚拟机,在它上面运行的应用程序服务。容器中有应用代码及其所有依赖环境(系统库,工具等)。我们上面提到的架构,容器化后如下图所示:

    容器管理Docker Compose

    Docker Compose是一个用于管理和编排容器定义和运行的多应用程序的工具(类似的流行工具还有谷歌的K8s)。通过Compose,可以使用YAML文件来配置应用程序的服务。然后可以一键创建和运行所有的服务。Docker Compose也提供Web UI管理界面和容器监控系统等。。

    Docker Compose由一下部分构成

    服务:服务是可以用Compose工具运行的各个docker容器列表。通过服务我们来定义各个容器名称、端口以及其他配置。

    网络:网络组件提供了服务之间互相连接的通道。各个容器可以将自身附加到网络,相同网络内的所有容器可以彼此通信。

    卷:默认情况下,Docker容器不包含任何类型的持久性存储。如果一个docker容器被关掉,那么其内存中的所有数据都会丢掉。为了持久性保存一些数据,我们需要数据卷来挂载到数据机硬盘上。

    实战配置

    docker-compose.yml配置

    我们上述典型环境的docker-compose.yml如下:

    其中一个服务(njs1)的部分代码如下:

    服务运行

    配置好docker-compose.yml后,可以通过下面命令启动

    docker-compose up

    如果配置无误,比如njs1成功启动后,将显示:

    在浏览器通过localhost:7000分文该服务。

    常见docker-compose命令

    build dockerfile的路径。注意:可以指定包含Dockerfile的文件夹,也可以指定Dockerfile本身的完整路径。

    command 启动docker容器时运行的命令。

    environment 需要设置的所有环境变量。

    ports 指定容器内端口与主机端口的映射关系。

    working_dir 这是希望运行上面指定的命令的容器内部的路径。

    启动所有服务

    docker-compose start

    该命令会启动docker-compose文件中的所有服务并以demon方式启动,在后台运行。

    停止所有服务

    docker-compose start

    停止所有服务

    重启服务

    docker-compose restart njs1

    启动特定服务

    docker-compose up njs1

    在docker-compose.yml服务列表中只启动njs1

    查看特定服务的日志

    docker-compose logs -f njs1

    该命令将会在终端打印njs1的日志。

    ssh连接到特定容器

    docker-compose exec njs1 bash

    总结

    本文我们利用docker容器的方式来简化开发环境的架构,解决典型开发环境中管理繁琐,环境一致性等问题,为了简洁我们只以Docker Compose为例进行了架构重建。其实基于Docker编排管理系统K8S,结合Gitlab CI/CD功能,可以实现版本管理、测试、安全扫描、验证、发布等一键自动化DevOps架构,以后我们会深入探索。

     
     
  • 相关阅读:
    WPF,Silverlight与XAML读书笔记第二十四 控件之六 – Items控件之菜单&其它
    WPF,Silverlight与XAML读书笔记第二十八 控件之十 – 媒体控件
    WPF,Silverlight与XAML读书笔记第三十一 可视化效果之布局概览 & 尺寸
    WPF,Silverlight与XAML读书笔记第三十 绘图系统概览
    rabbitmq的发布确认和事务
    Windows Server 2008答疑
    C#获取当前所有进程名
    无法在Web服务器上启动调试。调试失败,因为没有启用集成Windows身份认证
    8088 汇编速查手册
    Access保存图片
  • 原文地址:https://www.cnblogs.com/xinxihua/p/12914038.html
Copyright © 2011-2022 走看看