英语谚语翻译 梦秦演的电视剧

Docker是什么?


Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

举个栗子,小明写了一个CMS体系,该体系的技能栈十分广,需求依赖于各种开源库和中间件。假如按照纯手动的布置办法,小明需求装置各种开源软件,还需求写好每个开源软件的装备文件。假如仅仅布置一次,这点时刻开销还是能够接受的,但假如小明每隔几天就需求换个服务器去布置他的程序,那么这些繁琐的重复作业无疑是会令人发狂的。这时候,Docker的用处就派上场了,小明只需求根据运用程序的布置步骤编写一份Dockerfile文件(将装置、装备等操作交由Docker自动化处理),然后构建并发布他的镜像,这样,不论在什么机器上,小明都只需求拉取他需求的镜像,然后就能够直接布置运转了,这正是Docker的魅力地点。

那么镜像又是什么呢?镜像是Docker中的一个重要概念:

  • Image(镜像):它类似于虚拟机中运用到的镜像,由于任何运用程序都需求有它自己的运转环境,Image便是用来供给所需运转环境的一个模板。
  • Container(容器):Container是Docker供给的一个笼统层,它就像一个轻量级的沙盒,其间包含了一个极简的Linux体系环境与运转在其间的运用程序。Container是Image的运转实例(Image本身是只读的,Container启动时,Docker会在Image的上层创立一个可写层,任何在Container中的修正都不会影响到Image,假如想要在Image保存Container中的修正,Docker采用了根据Container生成新的Image层的策略),Docker引擎运用Container来操作并阻隔每个运用(也便是说,每个容器中的运用都是相互独立的)。

其实从Docker与Container的英文单词本意中就能够体会出Docker的思维。Container能够释义为集装箱,集装箱是一个能够便于机械设备装卸的封装货品的通用规范标准,它的发明简化了物流运送的机械化进程,使其建立起了一套规范化的物流运送体系。而Docker的意思为码头工人,能够认为,Docker就像是在码头上辛勤作业的工人,把运用打包成一个个具有某种规范化标准的"集装箱"(其实这儿指出的集装箱对应的是Image,在Docker中Container更像是一个运转中的沙盒),当货品运送到目的地后,码头工人们(Docker)就能够把集装箱拆开取出其间的货品(根据Image来创立Container并运转)。这种规范化与阻隔性能够很方便地组合运用多个Image来构建你的运用环境(Docker也发起每个Image都遵循单一责任原则,也便是只做好一件事),或者与其别人同享你的Image。

Docker VS 虚拟机


在上文中咱们提到了Docker是根据轻量级虚拟化技能的,所以它与咱们平常运用的虚拟机是不一样的。虚拟机技能能够分红以下两类:

体系虚拟机

  • 体系虚拟机:经过软件对计算机体系的模拟来供给一个实在计算机的替代品。它是物理硬件的笼统并供给了运转完整操作体系所需的功能。虚拟机经过物理机器来管理和同享硬件,这样完成了多个虚拟机环境彼此之间的阻隔,一台机器上能够运转多个虚拟机,每个虚拟机包含一个操作体系的完整副本。在体系虚拟机中,所运转的一切软件或操作都只会影响到该虚拟机的环境。咱们常常运用的VMWare便是体系虚拟机的完成。
  • 程序虚拟机:答应程序独立运转在渠道之外。比较典型的比如便是JVM,Java经过JVM这一笼统层使得Java程序与操作体系和硬件渠道解耦(由于每个Java程序都是运转在JVM中的),因而完成了所谓的compile once, run everywhere。

Docker所用到的技能与上述两种都不相同,它运用了更轻量级的虚拟化技能,多个Container同享了同一个操作体系内核,而且就像运转在本地上一样。Container技能相对于虚拟机来说,仅仅一个运用程序层的笼统,它将代码与依赖联系打包到一同,多个Container能够在同一台机器上运转(意味着一个虚拟机上也能够运转多个Container),并与其它Container同享操作体系内核,每一个Container都在用户空间中作为一个独立的进程运转,这些特性都证明了Container要比虚拟机更加灵敏与轻量(一般都是结合虚拟机与Docker一同运用)。

Container技能其实并不是个新鲜事物,最早能够追溯到UNIX中的chroot(在1979年的V7 Unix中引进),它能够改变当前正在运转的进程及其子目录的根目录,在这种修正过的环境下运转的程序不能在指定的目录树之外拜访文件,从而约束用户的活动范围,为进程供给了阻隔空间。

之后各种Unix版别涌现出许多Container技能,在2006年,Google提出了"Process Containers"希望在Linux内核中完成进程资源阻隔的相关特性,由于Container在Linux内核中的定义过于宽泛紊乱,后来该项目改名为CGroups(Control Groups),完成了对进程的资源约束。

2008年,LXC(Linux Containers)发布,它是一种在操作体系层级上的虚拟化办法,用于在Linux体系上经过同享一个内核来运转多个相互阻隔的程序(Container)。LXC正是结合了Linux内核中的CGroups和对分离的称号空间的支持来为运用程序供给了一个阻隔的环境。而Docker也是根据LXC完成的(Docker的前身是dotClound公司中的内部项目,它是一家供给PaaS服务的公司。),并作出了许多改进。

为什么要用Docker

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。

Docker 在如下几个方面具有较大的优势:

  • 更快速的交付和部署

Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。

例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

  • 高效的部署和扩容

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。你可以快速扩容或方便的下线的你的应用和服务,这种速度趋近实时。

  • 更高的资源利用率

Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

  • 更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

运用Docker


在使用Docker之前你需要先安装Docker(这好像是一句废话。。。),根据不同的平台安装方法都不相同,可以去参考Install Docker | Docker Documentation或者自行Google。

安装完毕之后,输入docker --version来确认是否安装成功。

$ docker --version
Docker version 17.05.0-ce-rc1, build 2878a85复制代码

从Docker Hub中可以pull到其他人发布的Image,我们也可以注册一个账号去发布自己的Image与他人共享。

[root@Jack ~] docker search redis  查看redis镜像是否存在
[root@Jack ~] docker pull redis  拉取redis镜像到本机
Using default tag: latest
Trying to pull repository docker.io/library/redis ... 
latest: Pulling from docker.io/library/redis
Digest: sha256:cd277716dbff2c0211c8366687d275d2b53112fecbf9d6c86e9853edb0900956
[root@Jack ~] docker images  查看镜像信息
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/python 3.6-onbuild 7195f9298ffb 2 weeks ago 691.1 MB
docker.io/mongo latest d22888af0ce0 2 weeks ago 360.9 MB
docker.io/redis latest 8f2e175b3bd1 2 weeks ago 106.6 MB复制代码

有了Image,之后就可以在其之上运行一个Container了,命令如下。

[root@Jack ~] docker run -d -p 6379:6379 redis  运行redis,-p代表将本机上6379端口映射到Container的6379端口 -d代表在后台启动
[root@Jack ~] docker ps -a  查看容器信息,如果不加-a只会显示当前运行中的容器
 如果想要进入容器中,那么需要执行以下命令
[root@Jack ~] docker ps  先获得容器的id
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f928073b7eb redis "docker-entrypoint.sh" 45 seconds ago Up 44 seconds 0.0.0.0:6379->6379/tcp desperate_khorana
[root@Jack ~] docker exec -it 1f928073b7eb /bin/bash  然后再执行该命令进入到容器中
root@1f928073b7eb:/data touch hello_docker.txt  在容器中创建一个文件
root@1f928073b7eb:/data exit  退出
exit
[root@Jack ~] 
 也可以在启动时直接进入 命令如下
[root@Jack ~] docker run -d -it -p 6379:6379 redis /bin/bash复制代码

我们对Container做出了修改,如果想要保留这个修改,可以通过commit命令来生成一个新的Image。

 -m为描述信息 -a为作者 1f9是你要保存的容器id 取前3个字符 docker可以自行识别
 sylvanassun/redis为镜像名 :test 为一个tag 一般用于标识版本
[root@Jack ~] docker commit -m "test" -a "SylvanasSun" 1f9 sylvanassun/redis:test
sha256:e7073e8e5bd70b8d58092fd6bd8c2551e65dd29241c235eddf2a7f4b4b25cbbd
[root@Jack ~] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sylvanassun/redis test e7073e8e5bd7 2 seconds ago 106.6 MB
docker.io/python 3.6-onbuild 7195f9298ffb 2 weeks ago 691.1 MB
docker.io/mongo latest d22888af0ce0 2 weeks ago 360.9 MB
docker.io/redis latest 8f2e175b3bd1 2 weeks ago 106.6 MB复制代码

想删除一个容器或镜像也很简单,但在删除镜像前需要先删除依赖于它的容器。

[root@Jack ~] docker stop 1f9  关闭运行中的容器,相应的也有docker start id命令来启动一个容器
1f9
[root@Jack ~] docker rm 1f9  删除容器
1f9
[root@Jack ~] docker rmi e70  删除上面保存的镜像
Untagged: sylvanassun/redis:test
Deleted: sha256:e7073e8e5bd70b8d58092fd6bd8c2551e65dd29241c235eddf2a7f4b4b25cbbd
Deleted: sha256:751db4a870e5f703082b31c1614a19c86e0c967334a61f5d22b2511072aef56d复制代码

如果想要自己构建一个镜像,那么需要编写Dockerfile文件,该文件描述了镜像的依赖环境以及如何配置你的应用环境。

 使用python:2.7-slim 作为父镜像
FROM python:2.7-slim
 跳转到/app 其实就是cd命令
WORKDIR /app
 将当前目录的内容(.)复制到镜像的/app目录下
ADD . /app
 RUN代表运行的shell命令,下面这条命令是根据requirements.txt安装python应用的依赖包
RUN pip install --trusted-host pypi.python.org -r requirements.txt
 暴露80端口让外界访问
EXPOSE 80
 定义环境变量
ENV NAME World
 当容器启动时执行的命令,它与RUN不同,只在容器启动时执行一次
CMD ["python", "app.py"]复制代码

然后就可以通过docker build -t xxx/xxxx .命令来构建镜像,-t后面是镜像名与tag等信息,注意.表示在当前目录下寻找Dockerfile文件。

学会如何构建自己的镜像之后,你是否也想将它发布到Docker Hub上与他人分享呢?要想做到这一点,需要先注册一个Docker Hub账号,之后通过docker login命令登录,然后再docker push image name,就像在使用Git一样简单。

关于Docker的更多命令与使用方法,请参考Docker Documentation | Docker Documentation,另外我还推荐使用Docker Compose来构建镜像,它可以很方便地组合管理多个镜像。

结语


Docker供给了非常强大的自动化部署方法与灵活性,对多个应用程序之间做到了解耦,供给了开发上的敏捷性、可控性以及可移植性。同时,Docker也在不断地帮助越来越多的企业完成了向云端搬迁、 向微效劳转型以及向DevOps形式的实践。 现在,微效劳与DevOps火爆程度日益渐高,你又有何理由挑选拒绝Docker呢?让我们一同挑选拥抱Docker,拥抱未来!

本文来自“这条河叫时光”用户投稿,该文观点仅代表作者本人,不代表华夏信息网立场,本站不对文章中的任何观点负责,内容版权归原作者所有、内容只用于提供信息阅读,无任何商业用途。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站(文章、内容、图片、音频、视频)有涉嫌抄袭侵权/违法违规的内容,请发送邮件至1470280261#qq.com举报,一经查实,本站将立刻删除、维护您的正当权益。如若转载,请注明出处:http://www.xxxwhg.com/cs/59611.html

上一篇 2023-02-06 19:59:18
下一篇 2023-02-06 17:34:04

相关推荐

  • 电视上怎么看韩国电影(韩国电影票房怎么看)

    可以看韩国电影的安卓APP1.韩剧TV是一款比较专业的韩剧电视app,里面收集了大量的韩剧以及电影2.时光韩剧app是一款韩剧在线播放器软件3.天天韩剧app——看韩剧追爱豆听OST4.人人韩剧app是国内专业的韩剧软件5.爱韩剧APP是一款关于看韩剧的软件6.快手日韩剧app最新版是上海优质

    2023-05-31 13:12:32
    150
  • 手机下载电视剧用什么软件好免费

    分享一:柠檬视频分享二:整点视频分享三:海星影视好了,以上就是今天的分享。

    2023-03-24 15:30:02
    211
  • 有什么手机能看电视剧的APP

    对比其它需求来讲刷剧的手机对于屏幕尺寸和续航有更高的要求,需要产品能满足快速充电、长续航特点,同时重量还要轻。我从众多优惠促销产品当中选择了四款有不错价格且符合需求的产品推荐给大家。OPPOK10OPPOK10拥有非常不错的快充技术,其配备67W超级闪充,在充电时仅需29分

    2023-03-19 13:00:02
    174
  • 为什么手机看不了电视剧

    在十多年前,还记得很多手机可以看CMMB电视,外壳上会有一根伸缩式天线。当想看电视的时候,只要抽出天线,就可以收看CCTV5等频道,印象中既有免费频道,也有收费频道,我当地移动好像是包月5块钱套餐。当时支持CMMB电视的手机也很多,既有中兴、联想、天语这样的大品牌,也有

    2023-03-10 07:30:02
    162