Docker使用中可能遇到的问题

简介: Docker并不是一个新的技术,容器化也不是,早在2006年就陆续出现了LXC, OpenVZ,Jail等容器虚拟化技术,但是为什么Docker却能异军突起呢?Docker的核心是基于 Linux的CGroup、Namespace和LayeredFS技术,通过资源的控制、隔离和对镜像的分层处理,是D

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

2uABvqU.jpg!web

1. 编译

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

2. 安装

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

root@ghostcloud:~# curl -fsSL https://get.docker.com/ | sh 
 
apparmor is enabled in the kernel and apparmor utils were already installed 
 
+ sh -c apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 
 
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 
 
gpg: requesting key 2C52609D from hkp server p80.pool.sks-keyservers.net 
 
?: p80.pool.sks-keyservers.net: Host not found 
 
gpgkeys: HTTP fetch error 7: couldn't connect: Success 
 
gpg: no valid OpenPGP data found. 
 
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年了,现在它已经从一个测试-发布的工具,逐步转变成为基础架构的组成部分,正式迈向产品化环境,但实际使用中依然有很多需要注意的地方。2016年3月31日,精灵云(www.ghostcloud.cn) Docker混合云PaaS/CaaS正式上线,欢迎注册使用。

目录
相关文章
|
Shell Docker 容器
docker使用记录一
docker使用记录一
112 0
docker使用记录一
|
存储 Kubernetes Ubuntu
一文熟练掌握Docker使用
做开发的应该很多人都知道Docker,就算是没有用过,应该也有所耳闻。这款开源于2013年的工具一经问世,便迅速火爆起来,在微服务 、项目迁移、云等方面备受欢迎。如今它的github项目已经达到54k个star。Docker到底是什么?它有什么优点使得它如此受欢迎?到底该怎么使用?本文就从以上几点进行阐述,希望通过这篇文章能够让大家对Docker有一个清晰的认识。
一文熟练掌握Docker使用
|
NoSQL Shell Redis
docker的使用
docker的使用
109 0
|
Docker 容器
docker使用阿里云加速
安装完docker引擎后,默认使用的docker仓库,拉取镜像速度比较慢,需要修改daemon.json来进行加速。
808 0
docker使用阿里云加速
|
应用服务中间件 Linux Shell
|
Linux Docker 容器
docker使用
docker run -t -i --mount type=bind,source=/c/workspace/gopath,target=/go -p 8080:8080 golang:1.11-stretch docker start -i CONTAINER ID docker exec -i -t CONTAINER ID /bin/bash volumes写dockerfile的时候无法挂载本地目录,使用 --volumes-from=容器id 来做基于volume互联 基于link互联,跨主机用connectable,实际应用不多。
1450 0
|
关系型数据库 PHP 数据库
docker学习系列16 使用过程的一些经验总结
COPY 和 ADD 命令具有相同的特点:只复制目录中的内容而不包含目录自身。 比如 backend 目录的结构如下: --- backend -- model -- controller 如果执行 WORKDIR /app COPY backend . 容器内app底下会是model和controller目录,并不是backend目录。
1230 0
|
Linux Shell 数据安全/隐私保护
|
应用服务中间件 Linux nginx