Docker使用过程中可能遇到的问题

原创
云计算
自2013年3月开源到现在docker已经经历了3年的发展,在这期间Docker无疑是云计算领域最火的一个方向,几乎所有的云计算厂商都在拥抱Docker这个生态圈。

Docker并不是一个新的技术,容器化也不是,早在2006年就陆续出现了LXC, OpenVZ,Jail等容器虚拟化技术,但是为什么Docker却能异军突起呢?Docker的核心是基于 Linux的CGroup、Namespace和LayeredFS技术,通过资源的控制、隔离和对镜像的分层处理,是Docker容器能够将应用程序和运行环境打包到一起,这样就可以Build, Ship And Run anywhere。与其说是Docker火,不如说是其天生的轻量级属性,正好迎合了云计算大行其道的今天。因此,笔者认为Docker改变整个云计算和互联网的格局是迟早的事,但是Docker在使用中,特别是在国内,又有什么需要注意的问题呢?

[[164389]]

1. 编译

Docker虽然说是一个开源的项目,但是如果你要在国内成功编译它是一件非常困难的事情。Docker是用Go来开发的,Go被誉为互联网时代的C语言,由google主导开发,它的开发者包括了 Chrome V8引擎和Unix的开发者,因此它天生就是易用且简介的。它具有良好的包管理、简介的语法和非常好的灵活性。但是,在国内很多package,你是不一定能够取下来的,这样就导致编译过程很难进行。

2. 安装

如果你在国外,没有GFW的限制,拥有非常好的网速,你使用Docker就像是在开一辆跑车。但如果你在国内,就好比是开了一辆没油的跑车。我曾经很多次遇到了安装失败的问题,而且安装速度非常缓慢。同时,如果你要在全封闭的内网安装Docker就更麻烦,你需要将所有的安装包完整迁移到内网,这个工作量是非常大的。下面就是一个官方安装失败的例子:

  1. root@ghostcloud:~# curl -fsSL https://get.docker.com/ | sh 
  2.  
  3. apparmor is enabled in the kernel and apparmor utils were already installed 
  4.  
  5. + sh -c apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 
  6.  
  7. Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.cr8hxY45Ve --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 
  8.  
  9. gpg: requesting key 2C52609D from hkp server p80.pool.sks-keyservers.net 
  10.  
  11. ?: p80.pool.sks-keyservers.net: Host not found 
  12.  
  13. gpgkeys: HTTP fetch error 7: couldn't connect: Success 
  14.  
  15. gpg: no valid OpenPGP data found. 
  16.  
  17. gpg: Total number processed: 0 

3. 镜像pull非常慢

Docker为什么火,有一个重要的原因就是它开创性的分层镜像机制,你的环境和应用程序都会被打包到镜像中。但是,一个比较大的问题是,Docker所有的镜像都依赖于基础镜像,而这些基础镜像都在国外的docker hub上,当你兴致勃勃准备用docker大干一场时,pull的漫长等待一定会让你很抓狂,而最后的超时失败,更会让你有说脏话的冲动。

4. 镜像存储

Dockerhub在国外这个问题还好,但是默认的dockerhub所有镜像都是公开的,就是说你的镜像别人都能够下载。这个策略跟github是一样的,如果你要用免费的,那么你就得开源。否则,给钱买私有仓库吧。Docker的私有仓库价格是非常贵的,而且速度还很慢。你不可能需要共享镜像时,都push到国外,再pull回来吧。当然有的人可能要说,我可以搭建私有仓库。不过私有仓库仅时候企业内部私有网络使用,而且没有基础镜像,如果你有跨区域的使用,是非常难处理的。

5. 云端的部署问题

至少在我写这篇文章的时候,不是每一家公有云厂商的基础镜像都能顺利的安装docker,docker是轻量级的虚拟化技术不假,但它仍然不能在短期内替代VM。如果你要在VM上使用docker,需要对网络、存储等做一些特殊的处理。

6. 容器和主机的管理

Docker是轻量级的不假,但是随着轻量以后,势必会出现大量的容器和主机。本身使用docker的出发点是降低运维成本,提升效率,但是管理上的成本相反却会上升。主机的监控、容器的监控、容器和容器之间的联系等等,都需要专业的公司来处理。很多人可能会想,我可以使用kubernetes,mesos等开源框架,不过我想给你敲一个警钟,如果你没有10人以上的运维团队,最好不要去碰这类框架。这类框架设计之初就是管理成千上万台的主机,如果你没有这么大的量,一定会让你日后的维护非常的酸爽。

7. 容器的性能

容器有性能损失吗?如果你要将系统搬迁到docker上,你是否会有担忧?CPU、内存、磁盘IO的性能到底如何?如何进行优化?这些都是需要大量测试和优化的。

8. 容器的安全

容器到底安全吗?容器是操作系统级的虚拟化技术,多个容器实际是共享了操作系统内核。容器的安全一直在不断的向前发展,但是你必须要了解容器可能受攻击的面有多大,如何来进行避免。

9. 网络问题

容器本身支持多达5种网络模式,默认的方式只是非常基础的简单应用,对于您的实际环境,则需要专门的特殊处理,才能是网络性能达到最优化。

10. 容器型运维人员短缺

目前国内对linux比较熟悉的运维都是供不应求,而容器是建立在linux之上的,诚然容器可以提升开发、测试和运维的效率,但是这是建立在你有懂docker的运维的人员。据我所知,目前国内对docker很熟悉的运维人员非常少,docker的一手资料基本都是英文的,对英文非常熟悉的运维人员并不多。

对于上面的问题,其中的每一条都可能延伸出来很长的篇幅,这些都是笔者在实际开发和应用中遇到过的问题, Docker的发展速度飞航快,到现在已经3年了,现在它已经从一个测试-发布的工具,逐步转变成为基础架构的组成部分,正式迈向产品化环境,但实际使用中依然有很多需要注意的地方。

作者介绍:晏东,精灵云(ghostcloud)联合创始人,20年编程经验,全栈工程师,曾任索贝数码及赛门铁克架构师架构师,一直从事SAN、NAS及对象存储等分布式系统研发工作。2013年开始研究LXC和Docker相关技术,目前主要从事容器云平台镜像及仓库方面研发工作。

责任编辑:xinxiaoliang 来源: 51CTO
相关推荐

2011-03-04 13:49:38

FileZilla

2020-07-29 08:03:26

Celery异步项目

2010-06-07 16:51:06

rsync 使用

2011-04-13 13:54:03

HttpClient

2022-02-07 00:10:28

Docker容器开发

2009-12-29 14:14:22

2009-11-02 08:56:17

2010-05-11 18:05:50

MySQL 5安装

2015-07-09 10:36:40

iOS

2009-12-10 14:19:41

配置静态路由

2010-01-04 18:25:24

Ubuntu Auda

2021-11-15 15:43:28

Windows 11升级微软

2023-02-28 16:26:46

推荐系统模块

2011-04-11 13:28:31

Oracle安装

2011-04-11 13:25:59

Sybase安装

2021-12-24 10:17:54

Java数据时间戳

2012-07-26 10:10:27

虚拟化安全网络安全

2012-07-27 10:01:13

虚拟化

2010-03-15 09:11:25

Python编程版面

2021-08-05 08:32:27

React开发项目
点赞
收藏

51CTO技术栈公众号