您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

利用Docker容器化开发环境

时间:2019-12-06 11:50:50  来源:  作者:

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

利用Docker容器化开发环境

 

开发环境架构

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

利用Docker容器化开发环境

 

架构组成

构成部分由:

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这样的神器来帮助我们使用多窗口,甚至工作界面的共享等,但是随着要管理不断增长,管理会相当繁琐耗时。

利用Docker容器化开发环境

 

不一致的依赖环境

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

基于Docker的开发环境

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

Docker容器

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

利用Docker容器化开发环境

 

容器管理Docker Compose

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

Docker Compose由一下部分构成

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

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

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

利用Docker容器化开发环境

 

实战配置

docker-compose.yml配置

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

利用Docker容器化开发环境

 


利用Docker容器化开发环境

 

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

利用Docker容器化开发环境

 

服务运行

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

docker-compose up

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

利用Docker容器化开发环境

 

在浏览器通过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架构,以后我们会深入探索。



Tags:Docker   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、前因闲来没事,想着升级下树莓派中的应用,没曾想,全是最新的,害我以为被黑客眷顾,帮我升级了。多方查证,才知道,是上次搭建的photoprism搞的鬼,不过也不全是它的锅,只是它的yml文...【详细内容】
2021-12-28  Tags: Docker  点击:(2)  评论:(0)  加入收藏
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  Tags: Docker  点击:(12)  评论:(0)  加入收藏
在网页中渲染公式一直是泛学术工具绕不开的一个功能,最近更新产品功能,正巧遇到了这个需求,于是使用容器方式简单实现了一个相对靠谱的公式渲染服务。分享出来,希望能够帮到有类...【详细内容】
2021-12-01  Tags: Docker  点击:(11)  评论:(0)  加入收藏
1.1 docker命令直接部署1.1.1 拉取镜像docker pull wurstmeister/zookeeperdocker pull wurstmeister/kafka1.1.2 启动zookeeper容器docker run -d --name myzookeeper -p 2...【详细内容】
2021-11-15  Tags: Docker  点击:(48)  评论:(0)  加入收藏
01 前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以...【详细内容】
2021-10-29  Tags: Docker  点击:(42)  评论:(0)  加入收藏
因为你懂得的原因,下载docker镜像速度非常喜感,故收集几个国内常用的docker镜像。Docker中国区官方镜像地址:https://registry.docker-cn.com网易163的镜像http://hub-mirror.c...【详细内容】
2021-10-28  Tags: Docker  点击:(48)  评论:(0)  加入收藏
我们在很多场景下都需要做笔记,来对抗遗忘,一份好的笔记不仅能在需要的时候供我们查阅,也能帮助我们归纳整理知识提高做事效率。 目前市面上有很多云笔记软件,体验上各有不同,但...【详细内容】
2021-10-11  Tags: Docker  点击:(62)  评论:(0)  加入收藏
1. Nacos官网Nacos Docker 快速开始2. Clone 项目git clone https://github.com/nacos-group/nacos-docker.git3. cd 到nacos-docker 路径下 直接启动即可cd nacos-dockerdo...【详细内容】
2021-09-16  Tags: Docker  点击:(109)  评论:(0)  加入收藏
今天不做保姆级教程,分享奶爸常用、好用的Docker应用。有了这些Docker,Nas的可玩性会大幅提高,有时候奶爸也在想,刨去官方套件不考虑的话,Nas真的是差不多。如果小伙伴们有需要,后...【详细内容】
2021-09-03  Tags: Docker  点击:(169)  评论:(0)  加入收藏
环境要求 ubuntu系统:20.04 docker版本:20.10.7 redis版本:6.0.6步骤由于我这里已经有相应的redis镜像,这里就不记录了,关于docker一些基础知识可以看我以前的笔记开启3台re...【详细内容】
2021-07-26  Tags: Docker  点击:(117)  评论:(0)  加入收藏
▌简易百科推荐
一、前因闲来没事,想着升级下树莓派中的应用,没曾想,全是最新的,害我以为被黑客眷顾,帮我升级了。多方查证,才知道,是上次搭建的photoprism搞的鬼,不过也不全是它的锅,只是它的yml文...【详细内容】
2021-12-28  闲余悟道    Tags:Docker   点击:(2)  评论:(0)  加入收藏
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  实战Java    Tags:Docker   点击:(12)  评论:(0)  加入收藏
在网页中渲染公式一直是泛学术工具绕不开的一个功能,最近更新产品功能,正巧遇到了这个需求,于是使用容器方式简单实现了一个相对靠谱的公式渲染服务。分享出来,希望能够帮到有类...【详细内容】
2021-12-01  编程菌zfn    Tags:Docker   点击:(11)  评论:(0)  加入收藏
1.1 docker命令直接部署1.1.1 拉取镜像docker pull wurstmeister/zookeeperdocker pull wurstmeister/kafka1.1.2 启动zookeeper容器docker run -d --name myzookeeper -p 2...【详细内容】
2021-11-15  无    Tags:docker   点击:(48)  评论:(0)  加入收藏
01 前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以...【详细内容】
2021-10-29  小码哥聊软件测试    Tags:Docker   点击:(42)  评论:(0)  加入收藏
因为你懂得的原因,下载docker镜像速度非常喜感,故收集几个国内常用的docker镜像。Docker中国区官方镜像地址:https://registry.docker-cn.com网易163的镜像http://hub-mirror.c...【详细内容】
2021-10-28  抓蛙程序猿    Tags:docker   点击:(48)  评论:(0)  加入收藏
环境:Spring5.3.10通常,应用程序开发人员不需要对ApplicationContext实现类进行子类化。相反,SpringIOC容器可以通过插入特殊集成接口的实现来扩展。使用BeanPostProcessor自定...【详细内容】
2021-10-26  Java网络研发架构师    Tags:Spring   点击:(34)  评论:(0)  加入收藏
我们在很多场景下都需要做笔记,来对抗遗忘,一份好的笔记不仅能在需要的时候供我们查阅,也能帮助我们归纳整理知识提高做事效率。 目前市面上有很多云笔记软件,体验上各有不同,但...【详细内容】
2021-10-11  运维贼船    Tags:docker   点击:(62)  评论:(0)  加入收藏
1. Nacos官网Nacos Docker 快速开始2. Clone 项目git clone https://github.com/nacos-group/nacos-docker.git3. cd 到nacos-docker 路径下 直接启动即可cd nacos-dockerdo...【详细内容】
2021-09-16  程序狗爱化妆    Tags:Nacos   点击:(109)  评论:(0)  加入收藏
今天不做保姆级教程,分享奶爸常用、好用的Docker应用。有了这些Docker,Nas的可玩性会大幅提高,有时候奶爸也在想,刨去官方套件不考虑的话,Nas真的是差不多。如果小伙伴们有需要,后...【详细内容】
2021-09-03  晋升奶爸的垃圾佬    Tags:Docker   点击:(169)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条