登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 280|回复: 0

看完这篇,Docker你就入门了

[复制链接]

960

主题

960

帖子

0

现金

黑狼菜鸟

Rank: 1

积分
0
发表于 2020-12-24 03:44:19 | 显示全部楼层 |阅读模式 来自 法国

原标题:看完这篇,Docker你就入门了

喜好就 关注我们吧!

在盘算机技能日新月异的本日, Docker在国内发展的风起云涌,特殊是在一线互联网公司,Docker的利用是非常广泛的,在明白docker之前,我们先认识两个概念,容器和假造机。

一、容器与假造机

传统的假造机有VMware, VirtualBox,它们必要模仿整台呆板包罗硬件,每台假造机都必要有本身的操纵体系,假造机一旦开启,预分配给它们的资源将全部被占用。每一台假造机包罗应用,须要的二进制和库,以及一个完备的用户操纵体系。

而容器技能是和我们的宿主机共享硬件资源及操纵体系,可以实现资源的动态分配。容器包罗应用和其全部的依靠包,但是与其他容器共享内核。容器在宿主机操纵体系中,在用户控件以分离的历程运行。

容器技能是实现操纵体系假造化的一种途径,可以让您在资源受到隔离的历程中运行应用步伐及其依靠关系。通过利用容器,我们可以轻松打包应用步伐的代码、设置和依靠关系,将其编程轻易利用的构建块,从而实现情况同等性、运营服从、开辟职员生产力和版本控制等诸多目的。容器资助包管应用步伐快速、可靠、同等性摆设,其间不受摆设情况的影响。容器还赋予我们对资源更多的精致化控制本领,让我们的底子办法服从更高、通过下面这张图我们可以很直观的反映出二者的区别。

J4E1RaAR6uo2LuIY.jpg

Docker属于Linux容器的一种封装,提供简朴易用的容器利用接口。它是现在最盛行的Linux容器办理方案。

Linux容器不是模仿一个完备的操纵体系,而是对历程举行隔离,相称于在正常历程的表面套了一个掩护层。对于容器内里的历程来说,它打仗到的各种资源都是假造的,从而实现与底层体系的隔离。

Docker将应用步伐与该步伐的依靠,打包在一个文件里。运行这个文件,就会天生一个假造容器,步伐在这个假造容器里运行,就似乎在真实的物理机上运行一样,有了Docker,就不消担心情况题目。

总体来说,Docker的接口相称简朴,用户可以方便的创建和利用容器,把本身的应用放入容器,容器还可以举行版本管理,复制,分享,修改,就像管理代码一样。

睁开全文

二、Docker的上风

1、Docker启动快速,属于秒级别。假造机通常必要几分钟去启动。

2、Docker必要的资源更少,Docker在操纵体系级别举行假造化,Docker容器和内核交互,险些没有性能消耗,性能优于通过 Hypervisor层与内核层的假造化

3、Docker更轻量,Docker的架构可以共用一个内核与共享应用步伐库,所占内存极小。同样的硬件情况,Docker运行的镜像数远低于假造机数目,对体系的使用率非常高

4、安全性, Docker 的安全性也更弱。Docker 的租户root和宿主机root等同,一旦容器内的用户从平凡用户权限提拔为root权限,它就直接具备了宿主机的root权限,进而可举行无穷制的操纵。假造机租户root权限和宿主机的root假造机权限是分离的,而且假造机使用如intel的vt-d和vt-x的ring-1硬件隔离技能,这种隔离技能可以防止假造机突破和相互交互,而容器至今还没有任何情势的硬件隔离,这使得容器轻易受到攻击

5、可管理性:Docker 的会合化管理工具还不算成熟。各种假造化技能都有成熟的管理工具,比方VMware Vcentor提供完备的假造机管理本领

6、高可用和可规复性:Docker 对业务的高可用支持是通过快速重新摆设实现的。假造化具备负载平衡,高可用,容错,迁徙和数据掩护等颠末生产实践查验的成熟保障机制,VMware可答应假造机99.9999%高可用,包管业务一连性

7、交付、摆设:假造机可以通过镜像实现情况交付的同等性,但镜像分发无法体系化。 Docker Dockerfile 中记载了容器构建过程,可在集群中实现快速分发和快速摆设

三、Docker的三个根本概念

XkForTK7cWgHdbbl.jpg

从上图我们可以看到,Docker 中包罗三个根本的概念:

  • Image(镜像)
  • Container(容器)
  • Repository(堆栈)

1、镜像是Docker运行容器的条件,堆栈是存放镜像的场合,可见镜像是Docker的焦点。

那么镜像到底是什么呢?

Docker 镜像可以看作是一个特别的文件体系,除了提供容器运行时所需的步伐、库、资源、设置等文件外,还包罗了一些为运行时预备的一些设置参数。镜像不包罗任何动态数据,其内容在构建之后也不会被改变。

e61EyAA0ewjaMmna.jpg

2、 Container (容器)

容器的界说和镜像险些千篇一律,也是一堆层的同一视角,唯一区别在于容器的最上面那一层是可读可写的。

dfNgA7MFRGcl5y4y.jpg

由于容器的界说并没有提及是否要运行容器,以是现实上,容器 = 镜像 + 读写层。

3、Repository(堆栈)

Docker堆栈是会合存放镜像文件的场合,镜像构建完成后,可以很轻易在当前宿主上运行,但是,假如必要在其他服务器上利用这个镜像,我们必要一个会合的存储、分发镜像的服务,Docker Registry (堆栈注册服务器)就是如许的服务。有时间会把堆栈(Repository)和堆栈注册服务器(Registry)等量齐观,并不严酷区分。 现实上,一个Docker Registry 中可以包罗多个堆栈(Repository ),每个堆栈可以包罗多个标签 ,每个标签对应着一个镜像。以是说,镜像堆栈是Docker 用来会合存放镜像文件的地方雷同于我们之前常用的代码堆栈。

堆栈又可以分为两种情势:

(1)public(共有堆栈)

Docker Registry 公有堆栈是开放给用户利用、答应用户管理镜像的 Registry服务。一样平常这类公开服务答应用户免费上传、下载公开的镜像,并大概提供收费服务供用户管理私有镜像。

(2)private(私有堆栈)

Docker 官方提供了Docker Registry 镜像,可以直接利用做为私有Registry 服务。当用户创建了本身的镜像之后就可以利用push下令将它上传到公有大概私有堆栈,如许下次在别的一台呆板上利用这个镜像时间,只必要从堆栈上 pull下来就可以了。

四、Docker的架构

vZtLvtt7119H7hWT.jpg

Docker利用C/S架构,即客户端/服务器体系布局。Docker客户端与Docker服务器举行交互,Docker服务端负责构建、运行和分发Docker镜像。Docker客户端与服务端可以运行在一台呆板上,也可以通过RESTful、stock或网络接口与长途Docker服务端举行通讯。

X1cb9s6816Sez3yy.jpg

这张图展示了Docker 客户端、服务端和Docker 堆栈(即Docker Hub Docker Cloud ),默认环境下Docker 会在Docker 中心堆栈探求镜像文件,这种使用堆栈管理镜像的计划理念雷同于Git,固然这个堆栈是可以通过修改设置来指定的,乃至我们可以创建我们本身的私有堆栈。

Docker接纳的是C/S架构,客户端向服务器发送哀求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个Host上,客户端也可以通过socket或REST API与长途的服务器通讯。

1、Docker Client

Docker客户端实在就是Docker提供下令行界面工具,是很多Docker 用户与Docker 举行交互的重要方式。客户端可以构建、运行和制止应用步伐,还可以长途与Docker_HOST举行交互。 最常用的Docker 客户端就是Docker 下令,我们可以通过Docker 下令很方便地在host上构建和运行Docker 容器。

vOiC4Y5YIo00c4Oc.jpg

2、Docker Daemon

Docker Daemon是服务器组件,以Linux背景服务的方式运行,是Docker最焦点的背景历程,我们也把它称为保卫历程。它负责相应来自Docker Client的哀求,然后将这些哀求翻译成体系调用完成容器管理操纵。该历程会在背景启动一个API Server,负责吸收由Docker Client发送的哀求,吸收到的哀求将通过Docker Daemon内部的一个路由分发调用,由详细的函数来实行哀求。

Docker Daemon 的架构如下所示:

B932C39529W7kmkc.jpg

Docker Daemon 可以以为是通过Docker Server 模块担当Docker Client 的哀求,并在Engine中处置惩罚哀求,然后根据哀求范例,创建出指定的Job并运行。Docker Daemon 运行在Docker Host 上,负责创建、运行、监控容器,构建、存储镜像。

运行过程的作用有以下几种大概:

  • 向Docker Registry获取镜像
  • 通过grapthdriver实行容器镜像的当地化操纵
  • 通过networkdriver实行容器网络情况的设置
  • 通过execdriver实行容器内部运行的实行工作

由于Docker Daemon和Docker Client的启动都是通过可实行文件Docker来完成的,因此两者的启动流程非常相似。Docker可实行文件运行时,运行代码通过差别的下令行flag参数,区分两者,并终极运行两者各自相应的部门。

启动Docker Daemon时,一样平常可以利用一下下令来完成

docker--daemon=truedocker–ddocker–d=true

再由docker的main函数来剖析以上下令的相应的flag参数,并终极完成Docker Daemon的启动。

Docker Daemon的启动流程:

oS2Y15F1zRY32G2g.jpg

默认设置下, Docker Daemon只能相应来自当地host的客户端哀求。假如要答应长途客户端哀求,必要在设置文件中打开TCP监听。我们可以照着如下步调举行设置:

(1)编辑设置文件 /etc/systemd/system/multi-user.target.wants/docker.service,在情况变量 ExecStart背面添加 -H tcp://0.0.0.0,答应来自恣意 IP 的客户端毗连。

oToaFoe6rtoAFF7E.jpg

(2)重启Docker Daemon

systemctldaemon-reloadsystemctlrestart docker.service

(3)我们通过以下下令即可实现与长途服务器通讯

docker-H 服务器IP地点 info

-H 是用来指定服务器主机,info子下令用于检察docker服务器的信息

3、Docker Image

Docker 镜像可以看作是一个特别的文件体系,除了提供容器运行时所需的步伐、库、资源、设置等文件外,还包罗了一些为运行时预备的一些设置参数(如匿名卷、情况变量、用户等)。镜像不包罗任何动态数据,其内容在构建之后也不会被改变。我们可将Docker 镜像当作只读模板,通过它可以创建Docker 容器。

镜像有多种天生方法:

  • 从无到有开始创建镜像
  • 下载并利用别人创建好的现成的镜像
  • 在现有镜像上创建新的镜像

我们可以将镜像的内容和创建步调形貌在一个文本文件中,这个文本文件称作Dockerfile,通过实行docker build<docker-file>下令可以构建出docker镜像。

4、Docker Registry

Docker Registry是存储Docker Image的堆栈,它在Docker生态情况中的位置如下图所示:

XfPp5lEfAzTE8THf.jpg

运行Docker Push、Docker pull、Docker search时,现实上是通过 Docker Daemon与 Docker registry通讯。

5、Docker Container

Docker容器就是Docker镜像的运行实例,是真正运行项目步伐、斲丧体系资源、提供服务的地方。Docker Container提供了体系硬件情况,我们可以利用Docker Image这些制作好的体系盘,再加上我们编写好的项目代码,run一下就可以提供服务了。

五、Docker组件怎样协作运行容器

容器启动过程如下:

  • Docker客户端实行docker run下令
  • Docker Daemon发现当地没有hello-world镜像
  • Daemon从Docker Hub下载镜像
  • 下载完成,镜像hello-world被生存到当地
  • Docker Daemon启动容器

详细过程可以看如下这幅演示图:

I05vQKqi0JTvt5gz.jpg

我们可以通过Docker Image 可以检察到hello-world 已经下载到当地

d0InR0bD3ii63dnr.jpg

六、Docker常用下令

我们可以通过docker -h去检察下令的具体的资助文档。在这里我只会讲一些寻常一样平常角逐大概生存中我们大概会用的比力多的一些下令。

hEcQ1QP6N61IcYUR.jpg

比方,我们必要拉取一个docker镜像,我们可以用如下下令:

dockerpull image_name

image_name为镜像的名称,而假如我们想从Docker Hub上去下载某个镜像,我们可以利用以下下令:

dockerpullcentos:latest

centos:lastest是镜像的名称,Docker daemon发现当地没有我们必要的镜像,会主动去Docker Hub上去下载镜像,下载完成后,该镜像被默认生存到/var/lib/docker目次下。

接着我们假如想检察下主机下存在多少镜像,我们可以用如下下令:

dockerimages

我们要想知道当前有哪些容器在运行,我们可以用如下下令:

dockerps -a

-a 是检察当前全部的容器,包罗未运行的

我们该怎样去对一个容器举行启动,重启和制止呢?我们可以用如下下令:

dockerstart container_name/container_iddockerrestart container_name/container_iddockerstop container_name/container_id

这个时间我们假如想进入到这个容器中,我们可以利用attach下令:

dockerattach container_name/container_id

那假如我们想运行这个容器中的镜像的话,而且调用镜像内里的bash,我们可以利用如下下令:

dockerrun -t -i container_name/container_id /bin/bash

那假如这个时间,我们想删除指定镜像的话,由于image被某个container引用(拿来运行),假如不将这个引用的container烧毁(删除),那image肯定是不能被删除。我们起首得先去制止这个容器:

然后我们用如下下令去删除这个容器:

dockerpsdockerstop container_name/container_id

然后这个时间我们再去删除这个镜像:

dockerrmi image_name

此时,常用的Docker相干的下令就讲到这里为止了,我们在后续的文章中还会反复地提到这些下令。

七、Dockerfile

Dockerfile是主动构建docker镜像的设置文件,用户可以利用Dockerfile快速创建自界说的镜像,Dockerfile中的下令非常雷同于Linux下的shell下令。

我们可以通过下面这幅图来直观地感受下 Docker 镜像、容器和 Dockerfile 三者之间的关系。

ky55Gl4UwU1qlT7z.jpg

我们从上图中可以看到,Dockerfile 可以自界说镜像,通过Docker 下令去运行镜像,从而到达启动容器的目标。

Dockerfile 是由一行行下令语句构成,而且支持已#开头的解释行。

一样平常来说,我们可以将Dockerfile分为四个部门:

  • 底子镜像(父镜像)信息指令FROM
  • 维护者信息指令MAINTAINER
  • 镜像操纵指令RUN、EVN、ADD和WORKER等
  • 容器启动指令CMD、ENTRYPOINT和USER 等

下面是一段简朴的Dockerfile的例子:

1、从 Docker Hub上pull下python 2.7的底子镜像

2、表现维护者的信息

3、copy 当前目次到容器中的/app目次下 复制当地主机的<src>( Dockerfile地点目次的相对路径)到容器里<dest>

4、指定工作路径为/app

5、安装依靠包

6、袒露5000端口

7、启动app

这个例子是启动一个Python flask app的 Dockerfile(flask是Python的一个轻量级的web框架),信赖各人从这个例子中可以或许轻微明白了Dockerfile的构成以及指令的编写过程。

八、构建Dockerfile代码实例

mkdir static_web

cd static_web

touch Dockerfile

然后 vi Dockerfile 开始编辑该文件

输入 i 开始编辑

以下是我们构建的Dockerfile内容 ``````````FROM nginx

MAINTAINER Angel_Kitty <angelkitty6698 @gmail.com>

RUN echo '<h1>Hello, Docker!</h1>'> /usr/share/nginx/html/index.html ``````````

编辑完后 按 esc 退出编辑

然后 :wq 写入 退出

我们在Dockerfile 文件地点目次实行:

dockerbuild -t angelkitty/nginx_web:v1 .

我们表明一下,-t是为新镜像设置堆栈和名称,此中angelkitty为堆栈名,nginx_web为镜像名,:v1为标签(不添加为默认latest)

我们构建完成之后,利用docker images下令检察全部镜像,假如存在REPOSTORY为nginx和TAG是v1的信息,就表现构建乐成。

Toow73jLOg78gc35.jpg

接下来利用docker run下令来启动容器

dockerrun--namenginx_web-d-p8080:80angelkitty/ nginx_web:v1

这条下令会用nginx镜像启动一个容器,定名为nginx_web,而且映射了 8080 端口,如许我们可以用欣赏器去访问这个nginx服务器:http:localhost:8080大概 http://本机的IP地点:8080/,页面返复书息:

wMnZo4fNtm51S4H9.jpg

如许一个简朴利用Dockerfile构建镜像,运行容器的示例就完成了!

架构制图:工具与方法论 2021-03-27

单例模式--我的呆板人女友 2021-03-26

为什么拆微服务这么艰巨 2021-03-23

以为不错,请点个在看返回搜狐,检察更多

责任编辑:





上一篇:拿一个月工资买国产手机OPPOFindX3,这波操纵亏不亏?
下一篇:原创世初赛-登贝莱破门格子造乌龙姆巴佩失点法国2-0
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-4-29 19:27 , Processed in 0.168605 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表