教你徒手用Docker部署MongoDB数据库

1、Docker是什么

这个有着萌萌海豚logo的开发工具就是我们今天的C位大佬——Docker,我们先来看一下网上关于Docker的定义:

“ Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

看不懂吧?看不懂就对了!哈哈哈哈哈哈哈,感受一下来自程序员的嘲讽!

看不懂的原因主要是因为这里引入了一个新的概念:容器。刚开始很多人会把容器和传统虚拟机的概念弄混,很多人应该都使用过虚拟机,每台虚拟机都有自己完整的用户操作系统,虚拟机一旦开启,预分配给它的资源会被全部占用,而容器是我们和宿主机共享硬件资源及操作系统,可以实现资源的动态分配。

简单来说,容器技术是实现操作系统虚拟化的一种途径,可以让我们在资源受到隔离的进程中运行应用程序极其依赖关系。

而Docker就可以帮助我们将开发的应用程序,以及该程序的依赖包都打包在一个文件里。运行这个文件,就会生成一个虚拟容器。当我们将这个程序在虚拟容器里运行时,就跟在真实的物理机器上运行效果是一样的。

总体来说,Docker可以让用户方便的创建和使用容器,把自己的应用程序放在容器里运行,可以实现环境一致性、提升运营效率以及开发人员的生产力。它还可以帮助我们进行版本管理、复制、分享、修改,就像管理普通的代码一样。

我们可以从下面这张表格很清楚地看到容器相比于传统虚拟机的特性的优势所在:

2、为什么要使用docker?

简单介绍了容器和虚拟机的概念后,我们就可以大概的总结出Docker的以下几点优势:

(1)可以帮助我们灵活方便的安装应用,搭建环境,部署应用。

(2)相比于传统的虚拟化方式,它节省系统资源开销,几乎没有性能损耗,而且启动快速,所占内存极小,更轻量,可以让你腾出更多的硬盘空间存放小电影儿。在相同的硬件环境下,Docker运行的镜像数目远多于虚拟机数量,对系统的利用率极高。

(3)灵活的迁移你开发的应用程序,它可以保证应用程序快速、可靠、一致性的部署,而且不受部署环境的影响,我们就不用再担心环境的问题。

(4)最后也是大家最关心的一点,直接跟我们的钱包挂钩。学会docker可以让自己在求职应聘中更有竞争力,目前Docker在国内互联网行业的发展形势一片大好,特别是在一线公司,Docker的使用已经十分普遍,甚至成了企业面试的加分项。在很多开发工程师招聘需求中,都会要求熟悉Docker的使用。

目前网络上有很多Docker的优秀教程,但是有很多都是原理性的东西,我自己也是看的云里雾里,对于初学者而言还是很难理解的,下面我就从初级前端开发工程师的角度,简单总结一下使用Docker部署mongodb数据库并且开启远程连接,希望通过这个小案例,能启发你学习docker的兴趣,带你初步认识一下这个强大的开发工具。

Docker 的三个基本概念

Image(镜像)

Container(容器)

Repository(仓库)

Image(镜像)

不理解什么是镜像?没关系,不理解就不理解吧,继续往下看。

(别问我为什么不解释,让我们保留一些真诚和羞射)

Docker Container

Docker 容器就是 Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。

Docker 提供了一套简单实用的命令来创建和更新镜像,我们可以通过网络直接下载一个已经创建好了的应用镜像,并通过 Docker RUN 命令就可以直接使用。

当镜像通过 RUN 命令运行成功后,这个运行的镜像就是一个 Docker 容器啦。

容器可以理解为一个轻量级的沙箱,Docker 利用容器来运行和隔离应用,容器是可以被启动、停止、删除的,这并不会影响 Docker 镜像。

Repository(仓库)

Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行。

但是, 如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry(仓库注册服务器)就是这样的服务。

有时候会把仓库(Repository)和仓库注册服务器(Registry)混为一谈,并不严格区分。

Docker 仓库的概念跟我们之前学习过的Git 类似,仓库注册服务器(Registry)可以理解为 GitHub 这样的托管服务。

实际上,一个 Docker Registry 中可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应着一个镜像。

所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方,类似于我们之前常用的代码仓库。

我们在本地运行 docker push、docker pull、docker search这些命令 时,实际上是通过 Docker Daemon 与 Docker Registry 通信。

镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。

3、安装Docker

吹了半天终于开始进入正题,首先让我们登录它的官网

https://www.docker.com/ 

这里忍不住想给Docker的设计团队疯狂打电话,它的官网是我目前见到的所有开发工具网站中视觉效果最棒,交互最流畅的一个。整体给人一种非常清新快速的感觉,很契合这个工具的功能和理念,第一眼就爱上了,像极了爱情。

点击【Learn more】查看它的详细介绍

点击【Start a free trail】创建一个免费账户 

创建好账户登录,点击右侧【Download Desktop and Take a Tutorial】

进入https://hub.docker.com/,点击【Get start with Docker Desktop】进入下载页。

按照自己的操作系统,选择相应的版本下载安装到本地。它这上面还很温馨的给你提供了一些小的教程,按照左侧五个步骤一步一步来就会get Docker的基本操作。

下载安装好后在电脑的右上角就会出现萌萌的小海豚标志。

打开终端执行docker -v命令查看当前安装的docker版本,当打印输出:Docker version 18.09.2, build 6247962(版本号),就表示已经安装成功并且可以使用了。

我们在Docker官网中的这个页面上查看Docker支持的所有镜像,可以看到我们常用的nodejs、mySQL、mongoDB、PHP都有提供。

https://hub.docker.com/search?image_filter=official&type=image 

点击进入相应页面查看现有的镜像版本

接下来就要引入另一位大佬mongoDB数据库,在没有遇到Docker之前,安装mongoDB的过程都可以写一本辛酸史了,自己折腾了一顿不但没有安装好还把环境变量改乱了(这里给各位个贴心小tip:修改重要参数之前一定要备份!一定要备份!一定要备份!),此处要特别感谢我的大学好友,是她告诉我了Docker这个神器,保住了我日渐后移的发际线,有了Docker之后整个过程如丝般顺滑,省去了配置.bash_profile等等一系列繁琐的环节。

由于Docker的服务器在国外,为了保证我们接下来的下载体验更酸爽,在开始之前先获取一个国内的镜像,这里再吹一波马云爸爸,阿里云真香!

点开

https://cr.console.aliyun.com/?spm=5176.100239.blogcont29941.12.eyc9rO#/accelerator

注册账号,登录 

在左上角汉堡包导航中找到产品与服务——弹性计算——容器镜像服务。

再选择最下面的菜单栏,镜像加速器,在左侧页面选择你对应操作系统,默认是Ubuntu,刚开始我看了半天没看懂,不禁开始怀疑人生。谁能想到这个设计的不像选项卡的选项卡还是可以点击的呢。Mac和Windows系统的自己手动切换一下。 

我们刚才已经安装好了Docker,所以直接按照网站上写的下列步骤操作就可以啦。(我这里写的是Mac系统的操作步骤,可以看到阿里云官网也是默认推荐使用Docker的!!!)

针对安装了Docker for Mac的用户,您可以参考以下配置步骤:

右键点击桌面顶栏的 docker 图标,选择 Preferences ,在 Daemon 标签(Docker 17.03 之前版本为 Advanced 标签)下的 Registry mirrors 列表中将

https://8p0vcewm.mirror.aliyuncs.com加到"registry-mirrors"的数组里,点击 Apply & Restart按钮,等待Docker重启并应用配置的镜像加速器。

在docker中配置好镜像文件后我们再回到终端中执行docker pull mongo命令,将mongoDB数据库的镜像加载到我们本地。默认会给你下载最新的版本,如果需要特定的版本号,在该命令后加冒号,后面写版本号,例如:docker pull mongo:3.6,下载3.6版本的mongoDB数据库。

mySQL数据库最新版本会有一些功能不稳定的情况,建议不要安装最新版本,而mongoDB不会,所以直接执行docker pull mongo下载就可以了。

运行docker images查看我们拉取到本地的所有镜像, TAG显示当前版本信息。

如果想移除镜像只需要运行docker rmi mongo:版本号就可以了

下载好mongoDB镜像后我们再运行一下docker run --name some-mongo -p 27017:27017 -d mongo

这条命令会用 mongodb 镜像启动一个容器,命名为 some-mongo ,并且映射了 27017端口。

如果你不暴露27017的端口号在node.js中连接的时候会报这个错误,提示你找不到这个端口号。

启动容器后运行docker ps -a查看所有启动的容器,确保容器的STATUS不是处于Exited阻塞状态,如果处于阻塞状态需要运行docker restart容器ID或容器名来重新启动。停止一个容器的命令是docker stop容器ID或容器名。

查看自己的容器启动好之后就可以运行docker exec -it some-mongo bash命令,然后输入mongo就可以优雅地连接mongoDB数据库了。

Docker 常用命令

我们可以通过 docker -h 去查看命令的详细的帮助文档。在这里我整理一些日常我们可能会用的比较多的一些命令。

docker pull image_name :拉取一个 Docker 镜像

docker images :查看主机下存在的镜像

docker ps -a :查看当前容器的运行状态(-a 是查看当前所有的容器,包括未运行的)

docker restart 容器名或ID:重启容器

docker stop 容器名或ID:停止容器

docker rmi image_name :删除镜像(先停止容器)

好了,以上就是初步接触Docker的一点心得体会,简单整理分享,祝各位食用愉快!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 《Docker从入门到实践》阅读笔记 原书地址: https://yeasy.gitbooks.io/docker...
    GuoYuebo阅读 11,359评论 1 39
  • 一 、什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国...
    Blazzer阅读 3,130评论 0 13
  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,728评论 1 21
  • 胸 卧推 1杠铃杆手握肩的1.5倍,手腕绷直,到中胸,此时小臂与地面垂直,大臂略低于肩 2平躺哑铃,手肘保持微曲,...
    周deidei阅读 299评论 0 0
  • 何为民俗? 百度曰:民俗又称民间文化,是指一个民族或一个社会群体在长期的生产实践和社会生活中逐渐形成并世代相传、较...
    五月荷阅读 455评论 0 1