在当今虚拟化的世界里,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。这确实增加了一些额外的步骤和性能开销,但在很多情况下,这个方法仍然工作得很好。很显然,手动创建虚拟机不是你通常会做的事情。我们可以利用Vagrant和VirtualBox。
为了说明这一点,在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.04(Trusty)。配置脚本非常简单,它的任务就是安装Docker。需要注意也要转发8200端口。运行如下命令初始化此虚拟机:
vagrant up
等待一两分钟后虚拟机就应该准备好了。您可以通过运行VirtualBox Manager来验证这一点。如果没有任何问题,我们可以连接到该虚拟机:
vagrant ssh
在此SSH会话中,你可以像上面说的一样运行docker build
和docker 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提供者进一步简化了操作流程,请通知我们。
将万物都放进容器!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有