一个 Web 开发者眼中的 Docker
去哪里了解Docker?
Docker 的官方文档写得相当不错。还有清晰易懂、能严重帮助理解的交互式练习。
什么人适合用Docker?
对运维来说肯定是救星。对小型应用开发者……还不大拿得准。求建议。
安装麻烦不?
相当的不麻烦。
Docker 已经入驻各个平台的包管理器。比如 CentOS 执行`yum install docker`即可安装。
安装 Docker 镜像/容器,和 Composer 、 Bower 这些包管理工具没什么差异。更新和保存镜像的方式,也和 Git 很像。
如何分装“集装箱(container)”?
按照 Docker 的官方哲学,是一个 docker 容器负责一个功能,比如搭建一个 LAMP 服务,需要分别制作 Apache 、 MySQL 和 PHP 的镜像。
但实际上,Docker 对大家的真正吸引力却在于“到处部署一模一样的环境”。这样操作会略有些繁琐。
容器之间的对话,会不会带来大量的配置工作?最佳实践是什么呢?求解答……
p.s. 以下链接是 Docker 官方哲学的一种实现。
Docker里的服务,如何与外界对话?
容器里的服务会使用一个Private Port,你可以设置从Private Port到Public Port的映射。
Docker是应该只负责跑服务,还是该包含代码/数据?
尚未搞明白。求解答……
======我是华丽的分割线,下面是第二阶段研究成果======
基本概念:
·Docfile 及当前目录作为源代码
·build 得到镜像(在 docker 平台)
·run 得到容器
·容器互相 link,对外可暴露端口,提供服务。
标准配置文件的拷贝:
1. 直接在 Docfile 目录下建立 conf 文件夹
2. Docfile 里用 Add 把它们添加到应该在的位置(docker 有“层叠式文件系统”,很神奇)
这样 build 出来的镜像就有你的配置文件了。
经常修改的配置文件怎么办?
妹的……只能放在宿主了,但这又没实现“到处运行”。所以很纠结。
跑一个应用,但代码文件在宿主机里(修改也在宿主环境下修改):
run ..... -v $PWD/宿主代码目录:/var/www/html/website:rw
这样就把代码目录挂载到镜像的 VOLUME 目录下了
**但容器(卷)里的修改不会写回到宿主中!!**
容器之间的链接可以这样:
run 一个 redis 镜像,产生一个 redis 容器
run laravel ...... --link redis:db ,让 laravel 可以用 db 这个域名(host)访问redis!
容器不是持久化的,那数据库怎么办?
妹的……好像还是放在宿主比较好?
**运行时的卷在最后一个容器被删除时会自动删除**,坑!可以在删除容器时打包备份,但这叫啥办法…
日志文件怎么办?
妹的……又是个头疼问题。写在镜像中,不能持久相当于没日志。写在宿主里,不算“到处运行”。
真正靠谱的办法貌似只能是跑个 log 服务了,参考:http://dockerone.com/question/54
评论(2)