生死簿后台管理系统(一)——使用Docker构建开发环境
最近有个段子非常火,说有个程序员梦见自己被阎王召见,让他帮忙开发一个后台管理系统。在一笑而过之后,我觉得如果要是能把这个系统做出来,应该颇具娱乐性,也顺便了解一下高并发以及大数据的相关技术——每天要上生死簿的人估计不会少。于是,本着娱乐大众的目的,我抓来了一个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构建开发环境相关推荐
- 生死簿后台管理系统(有趣、放松下大脑)
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员-- 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找"人"开发一套地府后台管理系统, ...
- 利用Docker构建开发环境
最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境,感觉生活在PAAS时代的程序员真是幸福,本文会简要介绍下Docker是什么,如何利用Docker来搭建自己的开发环 ...
- 阎王爷让我给他做个生死簿后台管理系统
前段时间,一个段子火了,996程序员做了一个梦,梦见自己见阎王爷了,阎王爷让他为生死簿做个后台管理系统. 究竟是怎么回事呢?脑补了事情的经过-- PART 01 为了应对地府管理危机,阎罗王打算找人开 ...
- Docker构建python环境
Docker构建python环境 --潘登同学的Linux笔记 文章目录 Docker构建python环境 --潘登同学的Linux笔记 Docker网络管理 创建Python容器 创建数据库容器 部 ...
- 构建开发环境 构建demo_构建自己的wotsapp第6部分
构建开发环境 构建demo I should start this article with a disclaimer: It is based on iOS 13, Swift 5, and Xco ...
- docker mysql开发环境_跟我一步一步用Docker搭建Beimi游戏服务端开发环境
跟我一步一步用Docker搭建Beimi游戏服务端开发环境 Stone 摘要 本文为java 0基础的小伙伴介绍如何用Docker搭建开发环境.如果不关心过程直接可 跳到本文最后取代码. 关键步骤为: ...
- 游戏开发 应用Docker实现开发环境
作者简介:陈霈霖,金山西山居资深Unity开发工程师,Unity开发框架KSFramework作者,关注Web开发全栈.DevOps最近,跟一个大学金融系的同学交流,发现他对科技发展的动态非常了解,然 ...
- 构建开发环境 构建demo_构建自己的wotsapp第1部分
构建开发环境 构建demo I should start this article with a disclaimer: It is based on iOS 13, Swift 5, and Xco ...
- mac docker搭建开发环境
前言 刚买了一个mac本, 决定搭建一个纯docker的开发环境, 说到做到, 开始踩坑. 搭建 在搭建环境的过程中, 经历了很多错误, 例如为了令两个docker环境可以互通(如: nginx和ph ...
最新文章
- 设计模式之简单工厂模式学习笔记
- 设计模式=相似模式区别
- Android中解析XML
- 中国SaaS人力资源管理系统市场发展模式分析与前景深度研究报告2022年版
- 定义任务打印gradle下载的jar包位置
- keepalived vrrp_script脚本不执行解决办法
- linux redis命令客户端,Redis客户端
- 数据库 习题答案 系统概念 第七章
- tcpdump进行IP抓包
- [个人资料整理]游戏类型总结
- Android 自定义相机 切换相机 参考线(辅助线) 闪光灯 缩放 自动聚焦 Demo
- 电脑休眠后无法唤醒的解决办法!
- 算法导论 直接寻址表
- 视频号是微信生态的中场核心?
- JavaWeb Ajax二级联动Bootstrap的基本使用
- 最强汉字得到首字母拼音java版
- Linux系统端口映射(路由转发)
- Android中添加思源字体/NotoSansCJK/SourceHanSans
- SAP 使用SAP HANA XS OData接口
- 生成证书模板---vue实现HTML转PDF
热门文章
- Typescript教程——中文文档
- ubuntu恢复模式概述
- 服装ERP案例:美特斯.邦威的ERP之路
- JNPF快速开发框架是如何快速搭建工作流引擎 以浙江的某大型批发商贸公司为例
- 我是程序员,想给工作室取名字,来10个给我参考一下,有趣深刻点
- 被不良商家欺骗怎么投诉,启中教育有办法
- 本地windows启动nacos报错 ErrCode:500, ErrMsg:jmenv.tbsite.net
- Python加速技巧
- 微店API获得微店商品详情,数据接口服务
- java 用户协同过滤算法_基于用户的协同过滤推荐算法java实现(UserCF)