Docker 初探

Andy,vagrant_docker

Docker 与 Vagrant

Docker 和 Vagrant 是近期两个应用场景最像的计算机虚拟化技术了吧。Stackoverflow 上有一个问题 (opens in a new tab)是问在什么场景下应该用 Vagrant,什么场景 下应该使用 Docker,而 Vagrant 和 Docker 的作者也都出来争论了,有兴趣的可以去看看大牛是怎么撕逼的。

Docker 将 Git 版本管理的概念与 Linux 上 Container 的概念融合在一起,而 Vagrant 则是将 Git 版本管理的概念与虚拟机的概念融合在一起。

Docker 架构

Vagrant 架构

下面是我自己画的 Vagrant 架构,其实也是在虚拟机上抽象出一层类似于 Git 的管理工具。

Vagrant

OS X 下的 Docker

由于 Container 是 Linux 特有的概念,所以想要在 OS X 下玩 Docker,还是需要依赖虚拟机。官网上推荐的配套 Docker 虚拟机叫 boot2docker。可以到官网 (opens in a new tab)上按照教程安装。你也可以使用 Vagrant,然后在 Vagrant 中的 Linux 虚拟机中配置安装 Docker,在虚拟机中玩 Docker。

用户在命令行或者 GUI 下与 Docker 交互主要通过与 Docker daemon 对话,Docker daemon 再管理每个 Container。所以在 OS X 上会出现这样的架构:
Image

OS X 下的 Docker 的使用

下面是一些在 Docker 在 OS X 中使用的命令行。

$ boot2docker init

$ boot2docker start

$ boot2docker shellinit
$ docker run hello-world  //开启一个Container,输出hello-world,然后结束Container
-
$ docker run -d -P —name web nginx   //-d参数一直运行,-P参数将Container的端口映射到虚拟机的端口上
$ boot2docker status  //查看虚拟机状态

$ docker ps  //查看虚拟机中所有的Container

$ docker port web/xxx  //查看正在运行的Container的端口号

$ boot2docker ip  //查看虚拟机在本机网络中的IP地址
$ docker pull ubuntu  //从官方仓库中拉ubantu的镜像

$ docker run -t -i ubuntu /bin/bash  //运行ubuntu虚拟机并使用bash,-t表示开启终端,-i表示交互显示

$ docker images  //查看本地所有镜像
$ 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

另外想要进阶的话,推荐这本电子书 (opens in a new tab),和陈皓的博客 (opens in a new tab)。里面包含了Docker的方方面面。

参考资料

  1. http://dockerpool.com/static/books/docker_practice/introduction/README.html (opens in a new tab)
  2. https://www.docker.com/ (opens in a new tab)
© FTAndy.RSS