浅谈docker

ByteAuroraPulse
• 阅读 2572

前言
云计算、大数据,移动技术的快速发展,加之企业业务需求的不断变化,导致企业架构要随时更改以适合业务需求,跟上技术更新的步伐。毫无疑问,这些重担都将压在企业开发人员身上;团队之间如何高效协调,快速交付产品,快速部署应用,以及满足企业业务需求,是开发人员亟需解决的问题。Docker技术恰好可以帮助开发人员解决这些问题。

什么是Docker
Docker的英文本意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。最重要的是,它不依赖于任何语言、框架或系统。可以说Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
Docker通常用于如下场景:1.web应用的自动化打包和发布;2、自动化测试和持续集成、发布;3、在服务型环境中部署和调整数据库或其他的后台应用;4、从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
为什么使用Docker
那么应用容器长什么样子呢,一个做好的应用容器长得就好像一个装好了一组特定应用的虚拟机一样。比如我现在想用MySQL那我就找个装好MySQL的容器,运行起来,那么我就可以使用 MySQL了。
那么我直接装个 MySQL不就好了,何必还需要这个容器这么诡异的概念?话是这么说,可是你要真装MySQL的话可能要再装一堆依赖库,根据你的操作系统平台和版本进行设置,有时候还要从源代码编译报出一堆莫名其妙的错误,可不是这么好装。而且万一你机器挂了,所有的东西都要重新来,可能还要把配置在重新弄一遍。但是有了容器,你就相当于有了一个可以运行起来的虚拟机,只要你能运行容器,MySQL的配置就全省了。而且一旦你想换台机器,直接把这个容器端起来,再放到另一个机器就好了。硬件,操作系统,运行环境什么的都不需要考虑了。
在公司中的一个很大的用途就是可以保证线下的开发环境、测试环境和线上的生产环境一致。当年在 Baidu 经常碰到这样的事情,开发把东西做好了给测试去测,一般会给一坨代码和一个介绍上线步骤的上线单。结果代码在测试机跑不起来,开发就跑来跑去看问题,一会儿啊这个配置文件忘了提交了,一会儿啊这个上线命令写错了。找到了一个 bug 提上去,开发一看,啊我怎么又忘了把这个命令写在上线单上了。类似的事情在上线的时候还会发生,变成啊你这个软件的版本和我机器上的不一样……在 Amazon 的时候,由于一个开发直接担任上述三个职位,而且有一套自动化部署的机制所以问题会少一点,但是上线的时候大家还是胆战心惊。
若果利用容器的话,那么开发直接在容器里开发,提测的时候把整个容器给测试,测好了把改动改在容器里再上线就好了。通过容器,整个开发、测试和生产环境可以保持高度的一致。
Docker在ubuntu下安装
Docker 支持多种平台下的安装运行,现在我们选取结合度最高的ubuntu来说明安装过程。
首先需要明确Docker支持的ubuntu版本:

 Ubuntu Trusty 14.04 (LTS) (64-bit)
 Ubuntu Precise 12.04 (LTS) (64-bit)
 Ubuntu Raring 13.04 and Saucy 13.10 (64 bit)

目前Docker仅支持以上三种ubuntu版本。请大家在安装时,确认ubuntu版本。
如果你准备启用UFW的话,请参考以下额外步骤:
Docker使用桥接技术来管理各容器的网络访问。但是Ubuntu默认是关闭对外网络访问的,所以在安装之前你需要启用防火墙的网络访问功能。

$ sudo nano /etc/default/ufw

# Change:
# DEFAULT_FORWARD_POLICY="DROP"
# to
DEFAULT_FORWARD_POLICY="ACCEPT"

修改完成后,我们需要重新加载UFW。

$ sudo ufw reload

UFW默认存在一套网络访问规则,如果你需要其他服务器可以访问到你的虚拟容器,那么就需要修改一下UFW的访问规则(Docker默认端口是2375,所以需要UFW允许2375的数据访问)。

$ sudo ufw allow 2375/tcp

(因为Ubuntu的安装过程类似,我们只以一个版本的安装为例)

Ubuntu Trusty 14.04 (LTS) (64-bit)

Ubuntu Trusty使用的是3.13.0的Linux内核,在安装Docker时需要安装docker.io,安装过程中所需要的各种依赖包都可以在Ubunut官方资料库中找到。
  Ubuntu (或者Debian)因为历史原因,内置了一个叫做docker的KDE3/GNOME2安装包,所以我们需要安装和执行的docker应用名称都改为docker.io
Installation
执行以下命令,就可以安装docker的最新版本(至少在译者翻译时为最新版本╮(╯▽╰)╭)

$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

    OK了,执行完以上命令后,Docker在Ubuntu上面就安装好了。当然过一段时间后,你安装的版本就不会是最新版本了。这种情况下你可以安装以下的方式进行Docker升级。
1、确认/usr/lib/apt/methods/https是否存在,如果不存在,那么先安装apt-transport-https( apt-get install apt-transport-https )。

2、将Docker官方资料库的访问Key添加到你本地系统。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

3、上面一步执行成功后,就开始安装Lxc-docker包。

$ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker

  4、如果你感觉以上三步很麻烦,那么就执行下面的这一句吧(前提是CURL已经安装好了)。

$ curl -sSL https://get.docker.io/ubuntu/ | sudo sh

讲过以上几步,你就安装最新版本的docker了。最后就是开始执行docker吧

$ sudo docker run -i -t ubuntu /bin/bash

Docker未来发展
任何一项新技术的出现,都需要一个发展过程,比如云计算为企业所接受用了将近五年左右时间,OpenStack技术也经历了两、三年才受到人们的认可。因此,虽然Docker技术发展很快,但技术还不够成熟,对存储的灵活的支持、网络的开销和兼容性方面还存在限制,这是Docker没有被企业大范围使用的一个主要原因。另外一个原因是企业文化是否与DevOps运动一致,只有企业支持DevOps,才能更大地发挥Docker的价值。最后一个原因就是安全性问题,Docker对于Linux这一层的安全的隔离还有待改进,才能进一步得到企业的认可。惠普刘艳凯认为,这也是Docker需要在下一步中改进的一方面。
相关资料
Docker,从这里做起
5分钟弄懂Docker!
Docker学习总结之docker安装 - vikings`s blog
docker中文网

点赞
收藏
评论区
推荐文章
飞速成功案例 | 低代码重构新零售系统,效率提高近8倍
20人开发2个月上线效率提升8倍01互联网时代下家电企业的新挑战数字化转型是企业迅猛发展的重要支撑。随着新零售业务的快速发展,用户基数规模不断扩大,已高达百万级用户量,需要更强大的新技术、新系统架构来支持这百亿级数据。如何将企业复杂且庞大的用户数据进行整合并管理,如何消除信息孤岛,提高日常办公、业务运营的效率,成为“互联网”时代下,家电企业
Wesley13 Wesley13
3年前
Java互联网应用和企业级应用的区别
企业级应用是为了满足企业日常运营所产生的IT应用,其目的是满足企业自己,对交付厂家而言,俗称2B业务;互联网应用则是面向个人用户,俗称2C业务。就个人经验,企业应用主要关注业务服务的能力,针对该企业的业务流程进行信息化、规范化、日志化,以提高企业业务及管理的效率。;互联网比较关注体验,用户粘性。技术上看,很多企业级应用的业务复杂性比互联网要大的多;而互
Stella981 Stella981
3年前
SpreadJS 纯前端表格控件应用案例:表格数据管理平台
由某科技公司研发的表格数据管理平台,是一款面向业务和企业管理系统定制开发的应用平台,包括类Excel设计器、PC应用端和移动应用端等应用模块。该平台具备强大的业务配置和集成开发能力,对于企业客户的信息系统在管理模式、业务流程、表单界面等个性化需求,均可快速实现个性化配置。下面,让我们一起来看看该公司是如何在“表格数据管理平台”中应用表格技术,实现“
Stella981 Stella981
3年前
Spring Cloud云服务架构
今天正式给大家介绍了SpringCloud企业分布式微服务云架构构建,我这边结合了当前大部分企业的通用需求,包括技术的选型比较严格、苛刻,不仅要用业界最流行的技术,还要和国际接轨,在未来的5~10年内不能out。作为公司的架构师,也要有一种放眼世界的眼光,不仅要给公司做好的技术选型,而且还要快速响应企业的业务需求,能够为企业快速定制化业务。以下是
Stella981 Stella981
3年前
Spring Cloud
这边结合了当前大部分企业的通用需求,包括技术的选型比较严格、苛刻,不仅要用业界最流行的技术,还要和国际接轨,在未来的5~10年内不能out。作为公司的架构师,也要有一种放眼世界的眼光,不仅要给公司做好的技术选型,而且还要快速响应企业的业务需求,能够为企业快速定制化业务。以下是我为公司规划的大型互联网分布式企业微服务云架构:!(https://im
Stella981 Stella981
3年前
30天如何实现超级APP从0到1开发?京东mPaaS EMOP最佳示范来了
!(https://pic3.zhimg.com/80/v2af9f6637b50b09be60b00a42f3812d5e_1440w.jpg)当前,随着移动通信市场的成熟,企业提供服务的商业模式也随之改变,几乎每一个涉足移动互联网的企业都要拥有一款自己的APP。在此过程中,企业如何解决用户体验、质量把控、业务验证和研发速度等方面的挑战,对于快速
曼成 曼成
1年前
企业工商基本信息API:一站式掌握企业核心数据
在当今快速发展的商业环境中,了解企业的基本信息是每个业务决策者的基本需求。然而,手动收集和处理这些信息既耗时又容易出错。企业工商基本信息查询API的出现,为企业提供了一个高效、准确的一站式解决方案。
容器、容器云和容器化PaaS平台之间到底是什么关系?
容器是一种操作系统级虚拟化技术,Docker是一种容器引擎。使用Docker来运行操作容器。但从容器自身来说,其提供的是IaaS层能力。Kubernetes提供了容器调度和管理的能力,加上云计算租户功能,实现容器云平台功能。而基于容器技术所构建的应用开发、应用托管和应用运维平台则可以称为容器化PaaS平台,它是一种轻量化PaaS实现。结合日志、监控、认证、权限等基础能力则可以构建企业级的平台和可复用服务,采用微服务架构实现企业技术服务中台能力,支撑企业业务敏捷研发和模式转型。
幂简集成 幂简集成
8个月前
全球货币汇率转换API大全
随着全球贸易的增长,对货币转换API的需求大幅增加。企业在国际市场上进行买卖,需要在各种货币之间进行快速准确地转换。免费货币兑换API服务是为满足这一需求而开发的技术时代最快、最可靠的解决方案之一。那么,为什么全球企业如此需要这些API呢?
飞速携手DeepSeek,开启低代码开发新时代
“ 数字化转型的痛点,如何破局? 在数字化转型浪潮中,企业亟需快速响应业务需求,但传统开发模式却面临周期长、成本高、技术门槛高等难题。低代码虽能简化流程,但面对复杂业务逻辑时,仍依赖人工梳理需求、设计架构,效率瓶颈始终存在。如何让应用开发真正实现“所想即所得”?”