docker 实践总结

这两天终于把《docker 从入门到实践》看完了,原本打算写写总结,但是感觉书中的内容太过死板,还不如从自己使用docker的过程中总结出一些好玩的docker应用方法分享给大家,欢迎有更多的人分享自己使用docker时一些好玩的项目,私信我给友情链接。

制作和使用Vim插件的镜像

如果你用关键词Vim搜索我的博客会发现有篇博客专门介绍如何使用Vim的插件来配置类似于VS的集成开发环境。现在我使用docker制作Vim插件的镜像来实现在多机上快速建立这样的VS集成开发环境。

利用Dockerfile制作镜像

将需要打包的插件放在某个目录下:
logo
当前目录下编辑Dockerfile,将插件打包到基于ubuntu镜像创建的镜像中:

1
2
3
4
FROM ubuntu:14.04
MAINTAINER Kang Yan <wowyk@qq.com>

ADD . /tool

制作镜像,命令如下(happymain是我在daocloud上注册的用户名,主要的原因是国内有时候无法访问docker hub,所以就使用daocloud):

1
docker build -t daocloud.io/happymain/tool .

push镜像到daocloud

1
docker push daocloud.io/happymain/tool

在部署机上pull镜像

1
docker pull daocloud.io/happymain/tool

在一个会话中运行容器:

1
docker run -t -i daocloud.io/happymain/tool

在另一个会话中导出到test.tar:

1
2
docker ps(得到containerID)
docker export containerID > test.tar

这个test.tar就是整个文件系统的所有文件,找个目录将其解压,其中的tool目录就是Vim的插件。

在部署机上简单操作完成安装

1) ctags需要单独编译安装

1
2
3
4
tar xvf ctags-5.8.tar
cd ctags-5.8
./configure
make & make install

2) 需要将插件移到~/.vim目录下,将hello中的配置拷贝到~/.vimrc

1
2
3
mv * ~/.vim
cd ~/.vim
cp hello ~/.vimrc

这样就实现了VS集成开发环境的移植,其实Github也可以做类似的工作;)

开发与运维的隔离

比如说我在主机上编写代码,容器中同步更新并且可以直接运行:

1
docker run -t -i -v $(pwd):/test ubuntu:14.04

结果如下:
logo
我们可以看出主机的docker目录下的文件被映射到容器中的test目录下,你可以尝试编辑主机上的test.c文件,然后观察容器中的test.c完全同步更新。所以我们甚至可以想象如果只映射test可执行文件就相当于只在容器中运维,这样的话就可以实现开发和运维的隔离。再往大的讲,我可以映射上述那样的目录后,开启多个容器共享该目录,从而实现多个用户同时编辑,运维。如下所示:

1
2
3
docker run -d -v $(pwd):/test --name test training/postgres echo hello!		 
docker run -d --volumes-from test --name test1 training/postgres
docker run -d --volumes-from test --name test2 training/postgres

在主机中编辑test.c文件并且编译以后,test1,test2容器都会同步更新并且直接可以运行,也就是说如果我只暴露test可执行文件给test1,test2,那么就可以实现开发与测试运维的隔离。

mysql容器与wordpress容器的连接

拉取mysql和wordpress镜像(使用daocloud加速器来拉取):

1
2
dao pull mysql
dao pull wordpress

运行mysql容器:

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

连接mysql容器,运行wordpress容器:

docker run -d --name wordpress --link mysql:mysql -p 8888:80 wordpress

这样以后在浏览器中输入0.0.0.0:8888就可以使用wordpress,剩下的你就可以自己玩博客了。当然还有很多好玩的东西没有列举出来,欢迎大家继续分享!

reference

docker 从入门到实践