设为首页 收藏本站
查看: 1187|回复: 0

[经验分享] [译] 第二十一天: Docker

[复制链接]

尚未签到

发表于 2015-4-17 09:29:02 | 显示全部楼层 |阅读模式
前言
  几个月前,红帽宣布了和dotCloud关于Docker技术的合作关系。当时没有时间去了解Docker, 趁现在30天挑战,我决定来看看Docker究竟是什么。本文不讨论以后OpenShift怎样用Docker, 你可以参考Mike McGrath的关于OpenShift和Docker的技术思考,或者从stackoverflow问题理解怎样将Docker比作OpenShift.
DSC0000.png

Docker是什么?
  Docker为应用程序提供了一层壳(或者容器),由dotCloud作为非主流项目启动,年初就开源了。它受到了广泛关注,以致有消息称dotCloud改名为Docker Inc. 最开始由Go语言编写,作为LXC(LinuX Containers)的管道,使开发者能采用高级概念。
  Docker扩展Linux Containers, 或者LXC, 在高级API提供独立运行的轻量虚拟解决方案。它利用LXC, cgroups,和Linux kernel自身,和传统虚拟机不同,Docker容器没有一个独立的操作系统,替代的是依赖底层架构提供的操作系统功能。Stackoverflow对LXC上Docker提供的所有功能的给出了详细解释。
  Docker作为便捷式容器引擎,将所有依赖打包到虚拟容器中,可以在任何Linux服务器上运行。这使得程序不管在哪运行,不论什么准备,公共云,私有云,裸机等等环境下,都能灵活便捷的使用。
  Docker的组成:


  • Docker服务器进程,负责管理所有容器。
  • Docker命令行终端,控制服务器进程。
  • Docker镜像仓库,存放docker镜像,地址 https://index.docker.io/

我为什么关注Docker?
  Docker很有用因为从一个机器向另一个转移代码常常很困难,它尝试将软件转移过程更稳定和自动。Docker容器对所有运行Docker的操作系统都很便捷。更多了解Fedora 项目是怎样使用Docker的。

我已经使用VMs了
  目前稳定转移程序唯一正确的选择是虚拟机(VMs), 虚拟机现在很普遍,当时他们很低端,同时也要提供完整的操作系统。虚拟机的问题是过分转移,他们打包了大量不是必须的信息如硬件驱动,虚拟处理器,网络接口。而且也要花很长时间来Boot, 占用大量内存和CPU.
  相反,Docker很轻量级,几乎相当于启动一个常规流程,不仅仅是运行容器很快,构建镜像和文件系统快照也很快,可以在像EC2或者RackSpace VMs的虚拟环境中工作。实际上,在Mac和Windows上更好的使用Docker的方式是用Vagrant. Docker的目的是像VM一样工作,不过更快的启动,占用更少的资源。

类似Vagrant吗?
  我的另一个疑惑是,我下一个项目要创建sandboxed环境该用Vagrant还是Docker呢。答案是一样的。
  Docker在系统开销方面比Vagrant更优,Vagrant提供的环境任然是虚拟机,依赖Virtual Box. 详情请参考stackoverflow给出的解释。

Oh No! 另一个程序打包系统
  我第一次看到Docker打包程序是困惑了,我们为什么需要另一个打包系统?我已经把我的Java程序打包成JAR或者WAR了。更多了解后我知道了Docker程序打包的意义。Docker处于虚拟机和你的程序包如WAR或者JAR之间,虚拟机一方面是很重量级的,它不仅仅是打包,另一方面,程序代码是很轻量的,没有转移足够的信息去稳定运行程序。Docker满足了两方面。
  在Docker里,程序打包意味着包含程序代码和必需的部署环境。例如,Java我们一般打包web程序为WAR文件,WAR包是最低要求的包只有程序代码,但是程序需要依赖部署环境来有效运行,可能出现不同的部署环境,开发时用的Java 7但是部署环境是OpenJDK Java 6或者在Mac上开发的但是部署在RHEL,也可能发生在有些系统库的不同导致开发和部署不同的结果。Docker帮助减少了这些问题,不仅打包程序还有依赖。

开始Docker
  参照这篇博客的指导在Fedora机器上安装Docker.


DSC0001.gif DSC0002.gif


$ vagrant up
$ vagrant ssh
View Code   然后安装Docker fedora镜像





$ sudo docker pull mattdm/fedora
View Code   以上命令会从 https://index.docker.io/ 下载Docker fedora镜像。
安装之后,可以用以下命令列出所有镜像。





$ sudo docker images

REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
shekhargulati/node_image_007   latest              e12b3054d981        50 minutes ago      470.3 MB (virtual 601.8 MB)


mattdm/fedora                         12.04               8dbd9e392a96        7 months ago        131.5 MB (virtual 131.5 MB)
View Code   列出的第一个是我已经创建好的,打包了NodeJS和Express Framework, 第二个是docker fedora备份。
  现在在docker容器里运行shell.





$ sudo docker run -t -i -p 3000 mattdm/fedora /bin/bash
View Code   运行后,我们就在Docker容器里,可以用 ls命令列出所有文件。
  现在创建以下目录结构 /home/shekhar/dev





$ mkdir -p home/shekhar/dev
$ cd home/shekhar/dev
View Code   安装NodeJS, 运行以下名在Fedora Docker镜像上安装Node.





$ sudo yum install npm
View Code   以上命令会在Fedora Docker镜像上安装Nodejs.
  接下来安装Express Framework.





$ npm install express -g
View Code   安装之后新建一个程序运行。





$ express myapp
$ cd myapp
$ npm install
$ node app.js
View Code   以上命令会启动NodeJS Express程序,端口3000.
  另外打开一个命令窗口,列出所有Docker进程。





$ sudo docker ps
CONTAINER ID        IMAGE                                 COMMAND             CREATED             STATUS              PORTS                     NAMES
4a5715a915e5        mattdm/fedora   /bin/bash           5 minutes ago       Up 5 minutes        0.0.0.0:49157->3000/tcp   red_duck
View Code   你会注意到端口3000绑定到主机端口49157, 可以通过curl测试。





$ curl 0.0.0.0:49157
ExpressExpressWelcome to Express
View Code   现在执行镜像推送到Docker镜像注册表,在这之前,你需要先在Docker registry注册。https://index.docker.io/account/signup/





$ sudo docker commit 4a5715a915e5 shekhargulati/node_image_007
$ sudo docker push shekhargulati/node_image_007
View Code   用你自己的用户名和镜像名。
  就这样,我的第一个镜像完成,上传到Docker registry  https://index.docker.io/u/shekhargulati/node_image_007/.
  可以用pull命令从registry获取镜像。





$ docker pull shekhargulati/node_image_007
View Code   这就是今天的内容,继续给反馈吧。
原文:https://www.openshift.com/blogs/day-21-docker-the-missing-tutorial

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-57990-1-1.html 上篇帖子: Docker个人学习总结 下篇帖子: 为docker配置固定ip
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表