最近有个段子非常火,说有个程序员梦见自己被阎王召见,让他帮忙开发一个后台管理系统。在一笑而过之后,我觉得如果要是能把这个系统做出来,应该颇具娱乐性,也顺便了解一下高并发以及大数据的相关技术——每天要上生死簿的人估计不会少。于是,本着娱乐大众的目的,我抓来了一个mysql的DBA@BigCat_X还有一个前端@MC,开始构建这个系统。

我们初步决定的技术路线为:数据库使用mysql,web服务器使用nginx,web后端框架采用tornado,消息队列以及缓存采用redis,而前端使用H5。如果后期脑洞开的大的话,之前在博客里用过的ES搜索也可以往上加。

为了保证部署环境的统一,我们将部署环境做成docker。此docker中装有mysql5.7,nginx以及redis,并放在docker hub上,这样便可保证三人都使用相同的环境开发;而python和tornado的版本相对稳定,因此并没有把python和tornado放入docker。

因此,在这篇博客中,我会介绍docker的基本概念以及使用方式。

首先来讲docker是什么东西:docker是一套基于容器(Container)的环境引擎,开发者可以在docker上的容器中进行开发、部署、运行的操作。与虚拟机相比,docker容器更轻量化,占据资源更少,这使得每个docker容器都可以轻易的大规模部署,而无需担心消耗过多资源。此外,docker便于分发,这样可以使得同组开发人员使用相同的开发/部署环境。

Docker有两个核心的概念:镜像(Image)和容器(Container)。如果套用面向对象的概念的话,镜像相当于类,而容器相当于对象。在docker中,我们可以使用一个镜像来创建多个容器,每个容器都可以跑不同的服务,这样我们只要拉下来一个镜像,就可以运行我们项目所需的所有服务,而不是将每个服务各拉一个镜像(虽然官方推荐这么做。。。)。

如下,我们使用capliu/deadheaven:final镜像启动了nginx,mysql-server和redis:

下面让我们来看看如何使用docker和构建自己的镜像。在这里,我们先介绍使用Ubuntu系统来运行docker,稍后再介绍在Win10中如何使用docker。在Ubuntu下安装docker十分简单,输入以下命令即可安装:

wget -qO- https://get.docker.com/ | sh

在安装完成后,可以输入docker version来查看当前docker的版本:

同时系统还会提示你,如果不是root用户的话,每次运行docker命令都要加上sudo。

在安装好之后,我们可以跑一下docker官方提供的hello-world镜像来检验我们的docker是否安装正确。输入如下命令即可运行hello-world的docker:

docker run hello-world

由于我这里将docker用alias换成了sudo docker,因此没有加sudo。

在第一次运行时,docker会从docker hub网站上拉镜像到本地,因此需要等一会;在拉下来之后,如果看到了上面的画面,说明docker安装正确了。

在学习构建自己的镜像之前,我们先来看一下docker几个常用命令:

1. docker image ls:列出本地所有的镜像

2. docker run [参数列表] <镜像名> [命令]:run命令的意思是启动一个新的容器,并在容器中执行命令。常用的参数列表有-i,-t和-d,其中-i和-t通常连用,如docker run -it <镜像名称> bash:进入到容器内部进行查看与修改,用exit命令退出。镜像名称的格式为仓库:标签,这标志着可以用不同版本的镜像启动容器;而-d的含义表示容器中的命令将在后台运行,不会影响当前的终端。

注意,使用bash对容器的任何修改在退出后都不会保存。若想保存,需要在容器打开的时候用另一个终端使用docker commit命令进行保存,随后再退出。

3. docker commit -m=<COMMENT> -a=<作者> <容器ID> <镜像名>:将容器提交到本地仓库,并且赋予一个标签。容器名就是图1中的CONTAINERID;对于镜像名,可以在给一个新标签来标记本次的修改。

4. docker stop <容器ID>:顾名思义,停止一个容器。

5. docker pull <镜像名称>:从dockerhub上拉下来一个镜像。

在介绍了docker的常用命令后,让我们看看如何建立自己的镜像。docker镜像的构建基于Dockerfile,这是一种文本文件,用于告诉docker这个镜像要从什么地方获取,要如何设置docker的工作目录,以及要安装哪些软件和在容器运行时要运行哪些命令。

让我们来看一下我们的Dockerfile:

FROM redis:5.0
WORKDIR /app
COPY . /app
RUN apt-get update
RUN apt-get install mysql-server -y
RUN apt-get install nginx -y

这是一个比较简单的Dockerfile,其中涉及了4个关键字:FROM,WORKDIR,COPY和RUN。在Dockerfile中,所有的关键字必须以大写形式出现,其中FROM关键字是必须的,用于告诉docker这个镜像要用哪个镜像作为“基类”;WORKDIR关键字会指定容器的工作目录;COPY顾名思义会将当前目录里的内容copy到容器里面,这行似乎是可有可无的;RUN命令则是执行软件安装和更新命令。建议在apt-get install前执行update,不然可能会出现找不到软件包的情况。

在写好Dockfile后,我们可以使用docker build的命令根据当前的Dockerfile来构建镜像,命令如下:

docker build -t <镜像名称> .

最后那个点不能省,表示当前目录。

输完命令后就进入到等待阶段,当build完成后,就可以使用docker image ls命令来查看我们的镜像了,并且用run命令跑一跑我们装的各种软件。

这里给出用docker运行redis,mysql和nginx的命令:

docker run -p 8080:80 -d capliu/deadheaven:v5 nginx -g 'daemon off;'
docker run -p 6380:6379 -v /home/dsliu/redis/data:/app/data -d capliu/deadheaven:v5 redis-server --protected-mode no --appendonly yes
docker run -p 3306:3306 -v /home/dsliu/mysql/conf:/etc/mysql/conf.d -v /home/dsliu/mysql/logs:/logs -v /home/dsliu/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d capliu/deadheaven:final service mysql start

这里的-p表示将主机端口映射到容器端口,即将主机的8080端口映射到容器的80端口;而-v表示将主机的目录挂载到容器的目录下,这样我们就可以通过修改主机的配置文件来改变容器的配置文件了。

在测试完成后,我们就可以通过docker将我们的镜像推送到docker hub,以便小组其他成员使用。首先我们要注册一个docker hub账号,网址是https://hub.docker.com,在注册完成后,在终端输入以下命令登录docker hub:

docker login

登陆后,执行docker push <镜像名>就将我们的镜像发布到dockerhub上了。

最后给大家介绍如何在Win10下跑docker。对于Win10系统,我们首先需要打开Win10的Hyper-V功能,然后需要安装docker-toolbox,登录dockerhub后点击右边的Download docker desktop即可:

安装完之后在任务栏下会出现一个鲸鱼图标,表示docker正在运行:

随后我们就可以通过powershell运行docker的相关命令了:

在这篇博客中,为我们的生死簿管理系统使用docker搭建了开发环境。通过使用docker,小组的每位成员都可以使用相同的开发环境,大幅减少了各人配置环境的时间。在后续的博客中,将继续为大家介绍这个鬼系统的开发进程,也希望大家踊跃报名参与业务测试~

生死簿后台管理系统(一)——使用Docker构建开发环境相关推荐

  1. 生死簿后台管理系统(有趣、放松下大脑)

    第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员-- 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找"人"开发一套地府后台管理系统, ...

  2. 利用Docker构建开发环境

    最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境,感觉生活在PAAS时代的程序员真是幸福,本文会简要介绍下Docker是什么,如何利用Docker来搭建自己的开发环 ...

  3. 阎王爷让我给他做个生死簿后台管理系统

    前段时间,一个段子火了,996程序员做了一个梦,梦见自己见阎王爷了,阎王爷让他为生死簿做个后台管理系统. 究竟是怎么回事呢?脑补了事情的经过-- PART 01 为了应对地府管理危机,阎罗王打算找人开 ...

  4. Docker构建python环境

    Docker构建python环境 --潘登同学的Linux笔记 文章目录 Docker构建python环境 --潘登同学的Linux笔记 Docker网络管理 创建Python容器 创建数据库容器 部 ...

  5. 构建开发环境 构建demo_构建自己的wotsapp第6部分

    构建开发环境 构建demo I should start this article with a disclaimer: It is based on iOS 13, Swift 5, and Xco ...

  6. docker mysql开发环境_跟我一步一步用Docker搭建Beimi游戏服务端开发环境

    跟我一步一步用Docker搭建Beimi游戏服务端开发环境 Stone 摘要 本文为java 0基础的小伙伴介绍如何用Docker搭建开发环境.如果不关心过程直接可 跳到本文最后取代码. 关键步骤为: ...

  7. 游戏开发 应用Docker实现开发环境

    作者简介:陈霈霖,金山西山居资深Unity开发工程师,Unity开发框架KSFramework作者,关注Web开发全栈.DevOps最近,跟一个大学金融系的同学交流,发现他对科技发展的动态非常了解,然 ...

  8. 构建开发环境 构建demo_构建自己的wotsapp第1部分

    构建开发环境 构建demo I should start this article with a disclaimer: It is based on iOS 13, Swift 5, and Xco ...

  9. mac docker搭建开发环境

    前言 刚买了一个mac本, 决定搭建一个纯docker的开发环境, 说到做到, 开始踩坑. 搭建 在搭建环境的过程中, 经历了很多错误, 例如为了令两个docker环境可以互通(如: nginx和ph ...

最新文章

  1. 设计模式之简单工厂模式学习笔记
  2. 设计模式=相似模式区别
  3. Android中解析XML
  4. 中国SaaS人力资源管理系统市场发展模式分析与前景深度研究报告2022年版
  5. 定义任务打印gradle下载的jar包位置
  6. keepalived vrrp_script脚本不执行解决办法
  7. linux redis命令客户端,Redis客户端
  8. 数据库 习题答案 系统概念 第七章
  9. tcpdump进行IP抓包
  10. [个人资料整理]游戏类型总结
  11. Android 自定义相机 切换相机 参考线(辅助线) 闪光灯 缩放 自动聚焦 Demo
  12. 电脑休眠后无法唤醒的解决办法!
  13. 算法导论 直接寻址表
  14. 视频号是微信生态的中场核心?
  15. JavaWeb Ajax二级联动Bootstrap的基本使用
  16. 最强汉字得到首字母拼音java版
  17. Linux系统端口映射(路由转发)
  18. Android中添加思源字体/NotoSansCJK/SourceHanSans
  19. SAP 使用SAP HANA XS OData接口
  20. 生成证书模板---vue实现HTML转PDF

热门文章

  1. Typescript教程——中文文档
  2. ubuntu恢复模式概述
  3. 服装ERP案例:美特斯.邦威的ERP之路
  4. JNPF快速开发框架是如何快速搭建工作流引擎 以浙江的某大型批发商贸公司为例
  5. 我是程序员,想给工作室取名字,来10个给我参考一下,有趣深刻点
  6. 被不良商家欺骗怎么投诉,启中教育有办法
  7. 本地windows启动nacos报错 ErrCode:500, ErrMsg:jmenv.tbsite.net
  8. Python加速技巧
  9. 微店API获得微店商品详情,数据接口服务
  10. java 用户协同过滤算法_基于用户的协同过滤推荐算法java实现(UserCF)