离线服务器下docker的部署与应用

一分钟内形成docker的模糊概念

网上很多文章避免将docker与虚拟机混为一谈,但对于初学者来说,完全可以将docker当做一种虚拟机技术,只需要牢牢记住一点最重要的区别:docker依赖于物理机的内核,所以在linux下“生成的docker”,一般不能直接在windows下运行。(虚拟机是完完全全模拟了一台物理机,这是一个很大的区别)。
当你有了这样的一个模糊概念,接下来只需要快速了解docker的三个基础组成部分,仓库、镜像、容器,就可以快速的应用起来。类比虚拟机,镜像就相当于安装虚拟机时用的iso文件,仓库自然就是一个官方存放镜像的地方,方便用户直接“下载”,当你的虚拟机运行起来后,就相当于一个容器

我为什么使用docker,需求是什么

在很多项目中,我们需要对一些url进行定时拨测,获取这些url的各种指标,例如响应时间、渲染时间等等,网上有许多开源的工具供我们挑选使用,sitespeed就是其中之一。sitespeed可以对访问过程进行度量,形成各种指标。访问过程进行录相、截图。指标分为浏览(体验)类指标、评分指标、DNS指标等几个维度。关于sitespeed更为详细的介绍可自行搜索。
然后由于其使用图形界面的浏览器,不太适合做为服务端程序运行,同时其各种依赖库的安装配置较为麻烦,故以docker的方式运行是比较合适的。https://www.sitespeed.io/在sitespeed.io的官方介绍上也指出所提供的docker镜像部署了所有的运行环境,对于用户只需直接使用即可。

离线安装docker:部署yum源或者rpm/deb包安装

对于某些特定环境,服务器是不允许访问互联网的,因此不能直接从软件源下载docker进行安装,这就造成了很多依赖包安装的麻烦。在此可以有几种不同的离线安装方式可供选择:

  • 对于ubuntu系统,你只需一台联网的同环境的虚拟机就可以得到deb安装包和所有的依赖包
    apt-get install --download-only docker这条命令的具体用法可以自行搜索,解决令人头疼的依赖问题简直舒服。
  • 对于centos系统,同样可以搜索所有的依赖包,通过rpm包的方法安装。但更加推荐部署本地yum源的方式,简单高效一劳永逸,部署步骤可自行搜索。

镜像文件的导入导出

不能访问互联网,意味着docker提供的官方仓库也不可访问,因此需要我们在本地虚拟机docker pull sitespeed.io相应的镜像,可以简单测试是否可用。

[~]$ docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world                latest              e38bc07ac18e        7 weeks ago         1.85 kB
docker.io/sitespeedio/sitespeed.io   latest              38463a656de8        8 weeks ago         1.77 GB
[~]$ docker run hello-world
Hello from Docker!

通过docker images看到本地存放了两个镜像,docker run *命令可以简单的在某个镜像文件基础上启动一个容器。
接下来要做的就是将镜像文件使用save命令导出为tar文件:
docker save 38463a656de8> /root/sitespeed.tar
通过物理设备传输至离线服务器上,通过load命令导入镜像:
docker load < /root/sitespeed.tar
导入完成后,用docker images命令查看,惊奇的发现REPOSITORY和TAG列均为<none>,所以save命令保存的并不是所有的信息,具体的区别自行搜索即可。不过不影响使用,我们只要修改一下就可以正常使用了。
docker tag 38463a656de8 docker.io/sitespeedio/sitespeed.io:latest

docker镜像是如何制作的

基于docker提供的服务,我们想要制作自己特定功能的docker镜像,只需要按照格式编写一个Dockerfile文件即可。一个简单的Dockerfile如下:

FROM ubuntu14.04
COPY start.sh /start.sh
RUN apt-get install -y gcc
CMD
ENTRYPOINT ["/start.sh"]

FROM命令用于指定一个基础镜像(当然可以指定一个空镜像scratch),COPY和RUN都是字面意思,CMD和ENTRYPOINT 指定docker启动时的运行命令,关于二者的区别,在此不细说,推荐使用ENTRYPOINT。
编写完成后,运行命令:docker build -t my_name:my_tag
通过docker images命令就可以看到本地已经有了刚刚创建的镜像,通过
docker run my_name:my_tag就可以启动并运行。
不得不提的是,Dockerfile中的每一条命令都会创建一个临时层,(类似于套娃的感觉)所以要注意命令的书写方式,比如多条RUN命令合为一条书写。同时,减少不必要的操作。例如,新建一个文件,在后面步骤又删除了,这样两次操作都会存储在最终的docker镜像中,生成镜像的体积也会增大,这就是网上一些不成熟的镜像体积很大的原因。
关于docker启动时的很多参数都可以自己按需查找,个人觉得-v和--entrypoint参数结合使用,会对大家测试一些小东西很有帮助。

-v 指定一个本地目录挂载到容器中指定位置
--entrypoint 指定docker运行入口,覆盖Dockerfile中的CMD和ENTRYPOINT

例如:

docker run --entrypoint /app/start.sh -v /root/app:/app docker_img.io

首先通过-v将本地的/root/app目录挂载到镜像中的/app目录,之后再通过--entryponit指定运行入口为/app/start.sh。
有了这样的用法,我们可以通过Dockerfile建立一个包含各种运行环境的基础镜像,通过这样的方式,测试我们自己的小程序(虽然应用场景有限)。当然还是要牢记文章开头所说的,docker是需要基于物理机的内核。

补充:关于docker的垃圾回收问题

在某次意外操作后,发现依赖docker的应用无法正常运行,排查原因发现竟然是磁盘空间不足,docker无法启动。发现在/var/lib/docker/目录下存在大量文件,原来docker每次运行时会在/var/lib/docker/containers以及/var/lib/docker/overlay下生成一些相关文件,具体作用可自行查阅。但问题在于docker运行结束并不会自动回收产生的这些记录文件,随着时间的积累,导致历史文件会越来越多。如何解决,docker官方提供了相关的垃圾回收功能,需手动运行,当然也可以自己编写垃圾回收守护进程,或者在github上有许多好的开源程序可供使用。

本文主要叙述了一些简单的docker使用场景,若果个别地方有错误,请不吝指出。

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

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,506评论 15 147
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,468评论 0 120
  • 遇见痛苦,不愁烦 遇见快乐,不图贪 因陀罗之网有无数个面 旧旧暖暖,一寸容下一个心愿 时间之光划过到从前 回到细细...
    abed8da56879阅读 211评论 0 1
  • 心想生自在人生【自在大学】自在经9期27:疗愈清理 2017-11-24 心想生自在人生合伙人 1、和大家分享过上...
    米妙和阅读 945评论 0 1
  • 她与他的相遇是命运的偶然,是两条相交线的汇合,是汇合之后的分离。 她柔情似水,他道貌岸然,两个人算...
    超人阿淇阅读 289评论 0 0