虚拟化砂盒Docker

传统意义上的虚拟化,大多都是提供一个虚拟化的主机。从用户层面上来说,访问这个虚拟化主机跟访问一个真实的物理主机没有太大的区别——也就是Paas(Platform As A Service)平台即服务,针对于SaaS(Software as a service)而言,用户的迁移成本比较低。但从以往的开发经验来说,开发->测试->部署3个环境总会有差异存在,这也就对应用的一致性提出了挑战。

Docker就是一个旨在解决这种一致性问题的开源项目。对于应用本身更加接近于一个从操作系统直到代码的封装砂盒。无论运行在什么环境下,砂盒都不需要任何的外部依赖。

Docker官方提供了一个比较赞的线上演练环境,首先先上去玩几遍,熟悉下命令。

开始部署环境。对于我的实验环境,这次是Ubuntu1404,算是比较新了吧。老一套的命令,没什么难度。

root@docker-test:~# apt-get update
root@docker-test:~# apt-get install docker.io
root@docker-test:~# ln -sf /usr/bin/docker.io /usr/local/bin/docker
root@docker-test:~# sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

这里有个坑:这里说的docker项目是docker.io。而apt-get install docker是另一个不相干的项目。

Docker官方还提供了一个简单粗暴的方法之前傻瓜安装最新版本的docker,不过看的我真是心惊肉跳啊!至少别这么直接下载执行啊。

curl -sSL https://get.docker.io/ubuntu/ | sudo sh

OK,妥妥的!我之前也许是中了Openstack的毒,觉得虚拟化环境就应该有几千行的配置文件需要改,结果才发现,其实真正跟docker有关的配置文件只有/etc/default/docker.io 一个,里面的配置只是跟什么DNS啦,proxy之类的配置。既然docker的逻辑就是减少差异,怎么可以允许你随便制造差异呢?

说说Docker的机制:

  • Docker与其说是一个砂盒,个人觉得更像是乐高。砂盒和砂盒之间是可以有依赖关系的,例如你基于Ubuntu砂盒制作了apache砂盒,那你发布这个砂盒的时候,发布的仅仅只是差异部分。
  • 利用了Git的发布方式管理砂盒。于github对应的,Docker Hub是一个公共的砂盒发布平台。
  • 砂盒之间是相互隔离的,跨砂盒之间的资源共享都是透过网络接口——docker在安装好以后,系统会创建一个docker0的网络设备用于通信。
  • 默认情况下,砂盒网络无法直接访问。

由于简单的docker命令都可以直接通过模拟环境完成,这次直接上个复杂点的——安装wordpress。难度在于WP需要另一个mysql的支持,而且需要直接开放80端口。

首先,需要安装一个mysql,利用现有的mysql docker,命名为mysql-wp,root密码为1234

root@docker-test:~# docker run --name mysql-wp -e MYSQL_ROOT_PASSWORD=1234 -d mysql
8204f170bf55b3f21277264638a456925c9792476d353528ef7e82fb49f4a2f6
root@docker-test:~# docker ps //列出当前所有运行中的docker
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8204f170bf55 mysql:latest "/entrypoint.sh mysq 11 seconds ago Up 11 seconds 3306/tcp mysql-wp

接下来装一个wp的docker,命名wordpress,并link到mysql-wp上。

root@docker-test:~# docker run --name wordpress --link mysql-wp:mysql -d wordpress
f494a8d79242e5bd9e4faf5d6ae4b8d4f75348da635c8ccac51cbaf7054f7c58
root@docker-test:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f494a8d79242 wordpress:latest "/entrypoint.sh apac 9 seconds ago Up 8 seconds 80/tcp wordpress
8204f170bf55 mysql:latest "/entrypoint.sh mysq 3 minutes ago Up 3 minutes 3306/tcp mysql-wp,wordpress/mysql

wp的环境已经安装就绪了,可如何通过外网访问呢?

root@docker-test:~# docker port f494a8d79242 80
f494a8d79242
推荐阅读:
如果你的眼尖的话,你会发现现在
一直关注我博客的人兴许会注意到
这一段时间,凡是提及容器技术的
话说在数据中心虚拟化的大潮中,

“虚拟化砂盒Docker”的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据