在OS X上运行Docker

在当今虚拟化的世界里,Docker是这个领域中的新生儿。在使用Linux系统时,配置和使用Docker几乎是轻而易举的。但是,如果你像许多极客一样使用OS X作为你的主要开发系统呢?这里讨论两种可能的解决方案,使用boot2docker或通过Linux虚拟机来运行Docker。

让我们来准备一个简单的基于Go的HTTP服务器,并在一个容器中运行它。我已经在bitbucket.org/ariya/docker-hellogo准备了一个演示,你可以跟着操作。请从下面开始:

git clone https://bitbucket.org/ariya/docker-hellogo.git 
cd docker-hellogo

这个仓库中的Dockerfile内容如下(已简化):

FROM centos:centos6 
ADD . /src 
RUN yum -y install golang 
EXPOSE 8200 
CMD ["go", "run", "/src/serve.go"]

它将CentOS 6设为基础映像,接着安装Golang,最后映射端口8200(HTTP服务器将监听的端口)。最后CMD一行指定在容器启动时要执行的操作,即运行该HTTP服务器。

假设已经安装了Docker(可以参考教程在Ubuntu上安装Docker),我们可以直接构建容器:

sudo docker build -t hellogo .

命令最后的点符号代表的是当前目录(即运行git checkout的目录),而构建的镜像将被称作hellogo。请注意,如果本地Docker仓库不存在CentOS 6的基础镜像,这条命令将会下载该镜像。

构建过程完成后,运行映像的命令如下所示:

sudo docker run -p 8200:8200 -t hellogo

参数-p 8200:8200指定端口转发。打开你的浏览器并访问http://localhost:8200,你应该会看到著名的Hello world! 消息。

对于那些使用OS X的人来说,幸运的是至少有两种可能的方式来实现上述步骤,而不需要手动创建Linux VM(虚拟机)后在其中运行上面的命令。

第一个选择是使用boot2docker,一个超轻量级的Linux发行版来运行Docker。一旦boot2docker已经安装完成,你需要这样配置(注意,我们需要第二行命令以确保能够正确的进行端口转发):

boot2docker init
vboxmanage modifyvm boot2docker-vm --natpf1 "http,tcp,127.0.0.1,8200,,8200"
boot2docker up
export DOCKER_HOST=tcp://localhost:4243

就这样!现在你可以像上面说的一样运行docker build以及docker run命令了(请去掉sudo)。挺简单的,不是吗?

第二个选择是让虚拟机运行Linux然后在其中使用Docker。这确实增加了一些额外的步骤和性能开销,但在很多情况下,这个方法仍然工作得很好。很显然,手动创建虚拟机不是你通常会做的事情。我们可以利用VagrantVirtualBox

为了说明这一点,在Git仓库中有这样一个Vagrantfile文件,内容如下:

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network "forwarded_port", guest: 8200, host: 8200
  config.vm.provision "shell",
    inline: "apt-get -y update && apt-get -y install docker.io"
end

它基于当前最新(原文发布时)的Ubuntu 14.04Trusty)。配置脚本非常简单,它的任务就是安装Docker。需要注意也要转发8200端口。运行如下命令初始化此虚拟机:

vagrant up

等待一两分钟后虚拟机就应该准备好了。您可以通过运行VirtualBox Manager来验证这一点。如果没有任何问题,我们可以连接到该虚拟机:

vagrant ssh

在此SSH会话中,你可以像上面说的一样运行docker builddocker run。由于端口8200被正确转发,您还可以使用在OS X(主机系统)上运行的Safari访问http://localhost:8200。

从这个配置过程中,您可以见证虚拟化的力量。您的OS X机器在基于VirtualBox的虚拟机中运行Ubuntu 14.04系统。现在,在这个Ubuntu系统中,还有一个CentOS 6.5系统在容器中运行。而简单的基于Go的HTTP服务器正在该容器中执行。这很有意思,不是吗?

最后但同样重要的一点,新版的Vagrant 1.6版本作为一个提供者正式支持了Docker。我还没有尝试过,但是如果你发现这个官方的Docker提供者进一步简化了操作流程,请通知我们。

将万物都放进容器!

本文的版权归 Senra 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python中文社区

scrapy爬取免费代理IP存储到数据库构建自有IP池

有一部分网站是通过检测同一IP短时间内多次访问同一页面来进行反爬虫,为了应对这种反爬虫机制,使用IP代理就可以解决。可以利用scrapy写一个爬虫,爬取网上免费...

2555
来自专栏云计算教程系列

如何在Ubuntu上使用Webhooks和Slack部署React

Webhook,也就是人们常说的钩子,是一个很有用的工具。你可以通过定制 Webhook 来监测你在 Github.com 上的各种事件,最常见的莫过于 pus...

1252
来自专栏原创

个推推送Android问题检测

1、获取不到CID问题: 1.      查看配置文件是否有问题,appkey、appsecret、appid是否有空格存在。 2.      相关权限是否全部...

4697
来自专栏coder修行路

python爬虫从入门到放弃(一)之初识爬虫

整理这个文档的初衷是自己开始学习的时候没有找到好的教程和文本资料,自己整理一份这样的资料希望能对小伙伴有帮助 什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器...

18610
来自专栏IT开发技术与工作效率

Eclipse Alt+/插入自定义代码段教程

1012
来自专栏向治洪

github搭建个人网站

1. 注册账号: 地址: https://github.com/ 输入账号、邮箱、密码,然后点击注册按钮.  ? 2. 初始设置 注册完成后,选...

2388
来自专栏Java后端技术

征服诱人的Vagrant!

​  最近要开始深入学习分布式相关的东西了,那第一步就是在自己的电脑上安装虚拟机,以前在Windows平台,我选择用VMware Workstation作为虚拟...

843
来自专栏finleyMa

说下browserslist

browserslist 是一个开源项目 见到有些package.json里会有如下的配置参数

1561
来自专栏Python爬虫与算法进阶

GitHub上超9Kstars的Python爬虫项目——pyspider(国人编写)

A Powerful Spider(Web Crawler) System in Python 简介 PySpider:一个国人编写的强大的网络爬虫系统并带有强...

3457
来自专栏Python爱好者

Mac下安装Python虚拟环境Virtualenv

1275

扫码关注云+社区