Docker 与 Vagrant
Docker 和 Vagrant 是近期两个应用场景最像的计算机虚拟化技术了吧。Stackoverflow 上有一个问题是问在什么场景下应该用 Vagrant,什么场景
下应该使用 Docker,而 Vagrant 和 Docker 的作者也都出来争论了,有兴趣的可以去看看大牛是怎么撕逼的。
Docker 将 Git 版本管理的概念与 Linux 上 Container 的概念融合在一起,而 Vagrant 则是将 Git 版本管理的概念与虚拟机的概念融合在一起。
下面是我自己画的 Vagrant 架构,其实也是在虚拟机上抽象出一层类似于 Git 的管理工具。
OS X 下的 Docker
由于 Container 是 Linux 特有的概念,所以想要在 OS X 下玩 Docker,还是需要依赖虚拟机。官网上推荐的配套 Docker 虚拟机叫 boot2docker。可以到官网上按照教程安装。你也可以使用 Vagrant,然后在 Vagrant 中的 Linux 虚拟机中配置安装 Docker,在虚拟机中玩 Docker。
用户在命令行或者 GUI 下与 Docker 交互主要通过与 Docker daemon 对话,Docker daemon 再管理每个 Container。所以在 OS X 上会出现这样的架构:
OS X 下的 Docker 的使用
下面是一些在 Docker 在 OS X 中使用的命令行。
- 由于依赖于 boot2docker,所以一开始必须要先初始化 boot2docker。
```
$ boot2docker init
$ boot2docker start
$ boot2docker shellinit
- 现在 virtual box 中的 docker 也是安装和初始化好了,直接用即可。
$ docker run hello-world //开启一个Container,输出hello-world,然后结束Container
$ docker run -d -P —name web nginx //-d参数一直运行,-P参数将Container的端口映射到虚拟机的端口上
- boot2docker和Docker常用状态管理命令。
$ boot2docker status //查看虚拟机状态
$ docker ps //查看虚拟机中所有的Container
$ docker port web/xxx //查看正在运行的Container的端口号
$ boot2docker ip //查看虚拟机在本机网络中的IP地址
- Docker 可以开启一个 Container,里面再运行一个虚拟机。
$ docker pull ubuntu //从官方仓库中拉ubantu的镜像
$ docker run -t -i ubuntu /bin/bash //运行ubuntu虚拟机并使用bash,-t表示开启终端,-i表示交互显示
$ docker images //查看本地所有镜像
- 官方提供了一个类似于 Github 的平台叫 [Docker Hub](https://hub.docker.com),可以存储自己的镜像,或者与别人分享镜像。
$ docker run -t -i training/sinatra /bin/bash //进入从镜像库中拉下来的镜像
gem install json //修改镜像
$ docer commit -m “install json gem” container_id new_contailer_name //确认修改镜像
$ docker images //查看新的修改过的镜像
$ docker tag 91c95931e552 ftandy/hello_sss //为自己的镜像修改别名
$ docker push ftandy/hello_sss //push到自己的账号仓库上
- 分享的话也可以通过本地导出导出镜像文件分享。
$ docker save -o hello-world.tar hello-world
$ docker load < hello-world.tar
另外想要进阶的话,推荐[这本电子书](http://dockerpool.com/static/books/docker_practice/introduction/README.html),和陈皓的[博客](http://coolshell.cn/articles/17010.html)。里面包含了Docker的方方面面。
### 参考资料
1. http://dockerpool.com/static/books/docker_practice/introduction/README.html
2. https://www.docker.com/