再谈《Docker的大坑小洼》
今天闲暇看了一下宏亮同学写的一篇《Docker的大坑小洼》,非常受启发。因为Docker的文章真的很多了,但大家如果只是玩一玩,有很多坑是不会碰到的。通读完宏亮同学的列出来的坑之后,我发现可能是角度不同,我有一些不同的理解,借此机会分享给大家:
1.Docker中同种类型不同tag的镜像并非可互相替代
这个问题描述的挺绕的,看了好几遍才理解笔者的问题。意思就是不同版本的Mysql镜像不能混用。用户的环境如果想依赖不同版本Mysql镜像,一定要在测试一遍,因为镜像变了,内容也变了。所以我更认为这是使用方法的问题,不是Docker的坑。
2.不同时间段使用tag为latest的镜像,效果不尽相同
这个是Docker设计成这样,在分布式计算中,自动升级镜像后是无法知道下次启动的job会启动那个镜像。所以增加了这个设计。我认为还是使用方法的问题,不是Docker的坑。或者说,掌握最佳实践,如宏亮说的,不要用latest tag。
3.使用fig部署依赖性强的容器时出错
我在实际使用fig做开发是也遇到这个问题,我觉得fig就是一个不可用的工具。如果你大量使用fig会知道我想吐槽。目前还不如直接Build。
4.Swarm管理多个Docker Node时,Docker Node注册失败
我没有用过,没法发表意见。
5.Docker容器的DNS问题
这个坑有点冤枉Docker,设计成这样了。但到了中国,确实变成了坑。实际使用中,不要用Docker镜像去访问外网的内容,最好做到本地访问。
2015-03-02
大部分见解一致,关于docker-compose(fig),我觉得没那么糟糕,当你有几十个系统,依赖关系错综复杂时,docker-compose(fig)是挺好的选择。
对于docker-compose(fig)服务依赖的问题,我自己是这么解决的:
在容器启动时,执行下面的脚本来检测links是否都已经启动了,都启动后自己才启动。
没有找到相关结果
已邀请:
与内容相关的链接
3 个回复
2015-03-03
赞同来自: wangzi19870227
大部分见解一致,关于docker-compose(fig),我觉得没那么糟糕,当你有几十个系统,依赖关系错综复杂时,docker-compose(fig)是挺好的选择。
对于docker-compose(fig)服务依赖的问题,我自己是这么解决的:
在容器启动时,执行下面的脚本来检测links是否都已经启动了,都启动后自己才启动。
set -e env | grep TCP=tcp:// | cut -d"/" -f3 | sed 's/:/ /g' | sort | uniq | grep -v 2888 | grep -v 3888 > /tmp/docker_links.tmp try_connect_server_delay=5 if [ ${TRY_CONNECT_SERVER_DELAY} ] then try_connect_server_delay=${TRY_CONNECT_SERVER_DELAY}; fi cat /tmp/docker_links.tmp | while read line do echo "try to connection $line on TCP..." while true; do host=`echo $line | cut -d" " -f1` port=`echo $line | cut -d" " -f2` python -c "import socket;s = socket.socket(socket.AF_INET, socket.SOCK_STREAM);s.connect(('$host', $port))" >/dev/null 2>/dev/null && break || echo "$line has not startup yet, waiting $try_connect_server_delay seconds and try again.... `env | grep TCP=tcp:// | grep $host | grep $port | sort | uniq | head -1`" sleep $try_connect_server_delay done echo "$line startup done" done wait_links_init_time=90 if [ ${WAIT_LINKS_INIT_TIME} ] then wait_links_init_time=${WAIT_LINKS_INIT_TIME}; fi echo "wait links init themself in $wait_links_init_time seconds, like mysql import sql" sleep $wait_links_init_time echo "all links startup done..."
最后等待这部分可以视情况是否需要:wait links init themself, like mysql import sql。
2015-03-03
为什么被折叠?
发起人
- xds2000
RedHat技术专家
相关问题
- 请教下代码放在Docker里面还是外面呢
- Docker pull下来的镜像文件、创建出来的容器文件都存在本地的什么地方了?
- 说说你都在哪些业务场景使用Docker了?
- 如何获取到宿主机上某一个Docker容器的磁盘IO?
- 如何学习Docker
- Docker Hub的镜像安全吗?会不会有人留个后门啊,如何辨别呢?
- Docker迁移,使用一个容器管理多个应用服务进程?还是每个服务进程创建一个容器?
- 针对Docker的特性,对于开发人员来说需要注意哪些方面能让产品能在container中很好的运行?
- Docker可以实现网络IO隔离吗,怎么实现?
- 请问怎样从docker1.4.1升级到docker 1.5.0
- 编译Docker源码问题
问题状态
- 最新活动: 2015-03-04 17:33
- 浏览: 1200
- 关注: 8 人
DockerOne,最专业的Docker交流平台
关注Docker相关的产品以及开源项目