Docker原理、架构与应用是什么

技术Docker原理、架构与应用是什么本篇内容主要讲解“Docker原理、架构与应用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker原理、架构与应用是什么”吧

本文主要解释“什么是Docker的原理、体系结构和应用”。感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖带你学习“什么是Docker原理、架构和应用”!

一、云计算介绍

1.Docker通过将运行环境和应用打包在一起,解决了部署的环境依赖问题,真正实现了跨平台的分发和使用。

2.因为容器省略了操作系统,所以整个级别得到了简化,更多的应用程序可以在单个服务器上运行。

3.3.ubuntu的存储部分可以使用AUFS,而CentOS只能使用Devicemapper。前者性能更好。

二、安装码头工人

第三,使用Docker

1.容器实际上是一个运行在操作系统上的进程,只是增加了资源的隔离和限制,以及Docker的三个核心功能:

CGroups:用于限制进程的资源使用。在操作系统上,用户标识和机器名称等资源是全局的,所有正在运行的进程都访问相同的资源。

命名空间:用于划分不同的命名空间。

UnionFS:用于处理分层镜像。

2.镜像是容器中的文件系统,它还集成了容器操作的一些参数,可以看作是容器的模板。

3.一些订单:

Docker信息:查看运行状态和版本信息,这是整个Docker Daemon运行状态的缩影,包括容器数量、镜像数量、Daemon版本、使用的存储驱动等信息。

拉镜子

docker run-I-t ubuntu/bin/bash:-I表示启动一个交互容器,-t表示使用伪TTY,它与容器的stdin和stdout相关联,Ubuntu是正在运行的映像,/bin/bash表示启动容器时要运行的命令,如果想退出交互模式而不影响容器的运行,请使用[Ctrl PQ]

长时间运行容器:-d让容器在后台运行,docker logs容器id检查容器的日志(实际上,它检查容器的标准输出日志)。

码头工人:查看容器,-查看所有容器

四,Docker的深入分析

A.码头工人的建筑

1.Docker Daemon:在主机上运行,用户不直接与Docker Daemon交互,而是通过Docker Client进行交互。

2.Docker客户端:是用户访问Docker的主要渠道,通过它用户可以控制Docker Daemon的访问。

3.Docker Image:它是一个只读模板。

4.Docker注册表:是存储Image的仓库,可以使用公共和私有注册表进行上传和下载。

5.Docker容器:Docker容器就像一个文件夹。容器包含应用程序所需的所有环境。每个容器都源自一个图像。每个容器都可以运行、启动、停止、移动和删除。每个容器都是一个独立且安全的应用程序。

B.码头工人是如何工作的

1.Docker Image是一个只读模板,从容器开始。每个图像包含多个层。联合文件系统用于将这些层组合成一个图像。Union FS可以透明地堆叠文件和目录,形成单个文件系统,每个映像都来自一个基本映像。

2.容器由操作系统、用户文件和元数据组成。在运行时,容器将在联合文件系统的顶部添加一个文件层。

3.3使用的命名空间。Docker: PID命名空间,NET Namesapce,IPC Namesapce,MNT命名空间:PID命名空间;使用的联合文件系统包括AUFS、英国、VFS、设备映射性能等。

4.-p主机端口:集装箱端口

5.输入镜像:docker exec -it容器id /bin/bash

6.docker提交容器id新名称,保存图像和所有更改。

C.镜像制作

1.获得镜像的三种方法:

拉镜:docker拉

将容器转换为镜像:docker提交

制作镜像:通过Dockerfile生成镜像。

2.查找DockerHub图像:docker搜索

3 .推送图像,标签图像优先,dockertag [options]图像[:标签] [Registry host/] [username]名称[3360标签]

4.根据Dockerfile: docker在Dockerfile所在的目录中编译映像。

5.删除镜像

cker run 命令

1.语法格式:docker run [OPTIONS] IMAGE[:TAG!@DIGEST][COMMAND][ARG…]

2.前后台运行:后台-d,前台-i -t,后台运行后再次进入容器,可以使用docker attach <cid>,退出时使用【ctrl+pq】

3.容器的标识:—name,Image[:tag],Image[@digest]

4.PID设置:—pid=host,可以在容器里面共享主机的PID Namespace

5.IPC设置:—pic是进程间通信的支持,可以和主机共享

五、容器的网络

A.容器自带网络

1.通过docker network ls来查看,包括bridge、host 、none

B.网络详情

1.通过docker network inspect <net>来查看本机的网络信息

2.当启动一个容器时,都会在全局注册相关的网络信息

C.用户自定义网络

1.包括三种:桥接网络、Overlay网络、插件网络

2.桥接网络:

  • 系统默认的桥接是docker0

  • 使用docker network create —driver bridge mynet创建mynet桥接网络

  • 通过—net属性将容器挂接到mynet中

  • 在同一个桥接下,形成了一个私网,相互间是可以通信的,但这仅限于在同一台主机上

2.Overlay网络:

  • Overlay是一种虚拟交接技术,主要是解决不同IP地址段之间的网络通信问题,Docker使用的Overlay技术是VXLAN,是借助于libnetwork实现的

  • Overlay需要一个K-V服务来存储相关的主机信息,可以使用Consul、Etcd和ZooKeeper,Consul是默认的

  • Overlay主机还必须 开放UDP/4789和TCP/UDP/7946,分别用作数据通道和控制通道

六、容器的数据

A.数据卷

1.数据卷提供了一种主机和容器共享数据的方式,有些时候需要用它来做持久化和数据共享。当做持久化时,通常数据卷都会比较大,可以将其放在单独的磁盘、卷或者阵列上,这个时候容器只是一个执行环境。当做数据共享时,可以用于开发和测试分布式系统,如需要用到共享盘、处理fencing等

2.创建数据卷:主要通过-v属性来指定,-v [主机目录]:[容器目录]

3.任何时候都不要将宿主机的根目录映射到容器内部

B.使用数据型容器

1.把容器的卷分享给另一个容器用

2.创建一个包含外部卷的容器,只需要create即可

3.在另一个容器中通过—volumes-from来映射

C.备份、还原和迁移数据卷

1.-v $(pwd):xxxx,$(pwd)表示当前路径

D.容器和代码进行关联

1.数据卷的几个特点:

  • 数据卷在容器创建时进行初始化

  • 数据卷既可以共享,也可以在容器之间重用

  • 对于数据卷的读写是直接下发的

  • Commit命令不会将改动保存到镜像中

  • 即使容器被删除了,数据卷仍然存在,因此这一块需要特别注意,避免产生垃圾数据卷

七、镜像仓库

A.仓库相关的Docker命令

1.docker login -u username -p password,登录docker hub或第三方库

2.docker search mysql,查找mysql相关的库

3.docker pull mysql,拉取mysql镜像

4.docker push [OPTIONS] [server/][user/] image name[:TAG],提交镜像

八、镜像和容器的存储结构

A.镜像、容器和存储驱动的关系

1.每个镜像都由多个镜像层组成,这些镜像层是只读的,从下往上,以栈的方式组合在一起,组成容器的根文件系统

2.容器运行时,所有文件变化 的数据都保存在容器层中,如新建文件、修改文件、删除文件

3.Docker在管理镜像和容器时,使用写时复制技术,写时复制采用了共享和复制,针对相同的数据,系统只保留一份数据,所有操作都访问这一份数据。当有操作需要修改或添加数据时,操作系统会把这部分数据复制到新的地方,这个操作会在新的数据区修改或添加数据,其他操作仍然在旧的数据区读取原始数据

4.docker history命令,列出镜像的层信息

5.定时复制技术节约存储空间,加速容器的启动时间,

6.数据卷是宿主机上的一个文件或者目录,启动容器时,会把这个文件或目录挂载到容器中。数据卷不受存储驱动程序管理,数据卷中的数据读写操作会练过存储驱动程序,直接工作在宿主机的文件系统中。容器中挂载 的数据卷数量没有限制 ,多个容器也可以挂载同一个数据卷

B.如何选择存储驱动

1.使用哪种存储驱动取决于用户在宿主机上使用何种文件系统,一些存储驱动可以工作在不同的后端文件系统上,另一些存储驱动必须使用相同的后端文件系统

2.—storage-driver=<name>,设置存储驱动

3.考虑因素:没有哪种存储驱动能够适用于所有场景;每种存储驱动都在不断升级;

4.选择方向:稳定性;熟悉性;成熟性;Overlay和Overlay2

C.AUFS存储驱动

1.AUFS是一种Union FS,将不同的目录合并成一个目录,做成一个虚拟文件系统。AUFS为每个目录设置不同权限 ,并且可以实时的添加、删除、修改已经挂载好的目录

D.Devicemapper存储驱动

1.Devicemapper把镜像和容器存储在虚拟设备上,使用按需分配、写时复制快照技术管理镜像和容器,对块设备进行操作,而不是整个文件

2.在生产环境中应该使用Devicemapper的direct-lvm模式,该模式下,Devicemapper使用真实的块设备为存储介质,在块设备上建立thin pool

E.Btrfs存储驱动

1.Btrfs是下一代存储技术,使用了按需分配、写时复制和快照技术管理镜像和容器,目前还处于开发阶段,生产环境慎用

2.Btrfs把镜像层和容器层保存在独立的子卷或快照中,镜像中的基础层作为一个子卷保存,其他镜像卷和容器卷都作为快照保存

F.ZFS存储驱动

1.ZFS是下一代文件系统,提供卷管理、快照、校验、压缩、消重和多地复制等功能,如果开发者没有使用过ZFS,建议不要在生产环境使用

G.Overlay存储驱动

1.OverlayFS是一种联合文件系统,Linux内核4.0及以上版本支持Overlay2存储驱动

2.Overlay/Overlay2存储驱动很快,比AFUS和Devicemapper都要快,在某些场景下甚至快于Btrfs

九、定制Docker Daemon

A.修改Docker Daemon的三种方式

1.三种方式:命令行修改、修改启动项和修改配置文件,命令行时Docker Daemon运行在前端,适合调试,在生产环境中应使用另外两种方式

B.仓库相关配置

1.—disable-legacy-registry选项:设置不从旧版本的镜像仓库下载镜像

2.—registry-mirror选项:指定镜像仓库,可以设置多个镜像仓库

3.—insecure-registry选项:设置可以从不安全的镜像仓库下载镜像

C.安全相关配置

1.-p,—pidfile选项:设置Docker Daemon使用的pid文件,默认为/var/run/docker.pid

2.-H,—host选项:配置Docker Daemon监听的IP和端口

3.—tls,—tlscacert,—tlscert,—tlskey,—tlsverify选项:配置远程通信的TLS通信及相关证书

D.日志相关

1.-D,—debug选项:开房调试模式

2.—log-level,—log-driver,—log-opt选项:设置日志等级、日志格式等信息

E.存储相关配置

1.-g,—graph选项:设置Docker运行时的根目录

2.—storage-driver选项:配置Docker Daemon的存储驱动

3.—ostorage-opt选项:配置存储驱动的参数

F.网桥相关配置

1.—big选项:设置docker0的IP和子网掩码

2.—fixed-cidr,—fixed-cidr-v6选项:配置容器的IP范围

3.—mtu选项:配置docker0的最大会转单元长度

4.-b,—bridge选项:配置网桥

G.容器与外部通信

1.—ip-forward选项:会自动修改宿主机的ip_forward,默认true

2.—iptables选项:会在iptables中追加转发规则,默认true

3.—ip,—ipv6选项:设置IP地址

H.其他网络配置

1.—default-gateway、—default-gateway-v6选项:设置网关

I.excdriver配置

1—exec-opt选项:设置如何管理容器的CGroups,默认值为cgroupfs,可选systemd

2.—exec-root选项:设置execdriver使用的状态文件的根目录,默认为/var/run/docker

J.其他配置

1.—default-ulimit,设置一个用户能够使用的最大进程数,启动容器时为—ullimit参数

十、如何编写Dockerfile

A.本地编译镜像

1.加入.dockerignore,过滤不需要的文件

2.使用指定Dockerfile文件,-f

3.-t用于打标签

4.—no-cache,编译时不使用缓存 

2.dockerignore文件

1.和git类似

C.Dockerfile格式

1.每条指令由指令+参数组成,中间以空格隔离,#为注释

2.一般指令大写,参数小写,第一条指令必须是FROM,设置基础镜像

D.Dockerfile指令详解 

1.FROM指令:设置基础镜像,可以设置多个基础镜像,两条FROM指令之间的内容放在一个镜像中,tag和digest是可选项,忽略tag会使用latest镜像

2.MAINTAINER指令:设置镜像作者

3.RUN指令:生成一个新的容器,在容器中执行脚本,脚本正常执行完后,Docker daemon会把该容器提交为一个中间镜像,供后面的指令使用

4.CMD指令:设置容器的启动集合,只能有一条CMD指令,如果写了多条,只有最后一条生效

5.LABEL指令:设置镜像的标签,可以通过docker inspect查看标签,每个标签采用Key=Value的格式,不同标签之前通过空格隔离。每条指令会生成一个镜像层,一个镜像只能有127层,因此最好使用一条LABEL指令设置完成

6.EXPOSE指令:设置镜像暴露端口,记录容器启动时监听在哪些端口

7.ENV指令:设置镜像中的环境变量,支持读取环境变量的指令:ADD、COPY、ENV、EXPOSE、LABEL、USER、WORKDIR、VOLUME、STOPSIGNAL、ONBUILD

8.ADD指令:把文件复制到镜像中,ADD <src>..<dest>,src必须在编译目录中,src为URL时,如果dest结尾没有/则dest作为文件名保存在/tmp,如果有/,则dest作为存储目录,如果src为目录,复制目录内所有内容,包括文件系统的元数据,如果scr是压缩文件(identity,gzip,bzip2,xz)会解压成目录,如果src是文件则复制文件和元数据,如果src使用了通配符或是一个文件列表,则dest必须以/结尾,如果dest不以/结尾则为文件名,如果dest不存在,则ADD会自动创建dest及缺失的上级目录

9.COPY指令:把文件或目录复制到镜像中

10.ENTRYPOINT指令:设置容器的入口程序,计算器程序是容器启动时执行的程序,docker run命令中最后的命令将作为参数传递给入口程序,只有最后的ENTRYPOINT生效

11.VOLUMN指令:设置容器的挂载点

12.USER指令:设置执行RUN、CMD和ENTRYPOINT的用户名或UID

13.WORKDIR指令:设置RUN、CMD、ENTRYPOINT、ADD和COPY指令的工作目录

14.ARG指令:设置编译变量

15.ONBUILD指令:设置子镜像的编译钩子指令,当从父镜像生成子镜像时,子镜像编译过程中,首先会执行父镜像中的ONBUILD指令

16.STOPSIGNAL指令:设置容器退出时,Docker Daemon向容器发送的信号量

E、CMD、ENTRYPOINT和RUN的区别

1.RUN指令是设置编译镜像时执行的脚本和程序,镜像编译完成,RUN指令的生命周期结束

2.CMD叫作容器默认启动命令,在docker run末尾添加Command即可替换掉CMD设置的启动程序 

3.ENTRYPOINT叫做入口程序,不能被docker run末尾的Command替换,末尾的Command会被当做字符串,传递给ENTRYPOINT作为参数,可以在docker run中加入—entrypoint替换镜像中的入口程序

4.一些规则 :

  • 在Dockerfile中,应至少有一条CMD或ENTRYPOINT指令

  • 当使用容器作为一个程序容器时,应使用ENTRYPOINT定义入口程序

  • 在Dockerfile中,如果同时定义了ENTRYPOINT和CMD,CMD会作为参数传递给ENTRYPOINT

十一、Dockerfile最佳实践

A.基本原则

1.容器的生命期是短暂的

2.使用.dockerignore

3.只安装需要的包

4.每个容器只运行一个进程

5.减少镜像层

6.把多个参数排在不同的行中

7.编译缓存:Docker Daemon从基础镜像编译出新的镜像;针对ADD和COPY指令,Docker Daemon会检查镜像层中所有源文件的元数据和文件内容;除了ADD和COPY指令外,Docker Daemon在镜像缓存中寻找镜像层时,不会检查文件

B.Dockerfile指令最佳实践

1.RUN指令:具有可读性,apt-get的install和update必须在一行执行,尽量在一条指令中安装需要的包

2.CMD指令:应尽量使用JSON格式,不要使用CMD设置ENTRYPOINT的参数

3.EVN指令:使用容器对外提供服务时,最好通过环境变量设置服务相关配置

4.ADD和COPY指令:推荐使用COPY指令,因为功能更单一,仅把编译目录中的文件复制到镜像中,而ADD还会解压文件并支持远端复制

5.ENTRYPOINT指令:当需要把容器当作一个命令行工具使用时,最好通过ENTRYPOINT指令设置镜像的入口程序

6.VOLUME指令:如果需要在容器中,对数据库、配置文件、用户上传文件夹等文件目录做数据持久化,可以使用VOLUME指令导出这些文件和目录;容器会在主机的/var/lib/docker/volumes目录中创建对应的目录挂载到容器中;

7.WORKDIR指令:设置Dockerfile中其他指令的工作目录,就使用绝对路径

8.USER指令:如果容器中的应用程序不需要特殊权限,则可以通过USER指令把应用程序的所有者设置为非root用户

9.ONBUILD指令:在基础镜像中设置钩子指令,子镜像会先执行基础镜像的ONBUILD设置的指令

C.如何减小镜像体积

1.避免apt/yum update

2.每条指令都会生成一个镜像层,每个镜像层都会占用一些磁盘空间

3.应该在一条RUN指令中,更新安装源、安装程序、清理缓存,这样可以减少镜像体积

十二、使用容器提供服务

A.使用容器提供数据库服务

1.查看启动mysql容器时可以添加的选项:docker run -it —rm mysql —verbose —help

2.-e EVNIRONMENT,可以配置环境变量

3.mysql相关目录:/etc/mysql/my.cnf、/etc/mysql/conf.d/、/var/lib/mysql/

4.mongodb相关目录:/data/db/

B.使用容器提供Web服务

1.apache相关目录:/usr/local/apache2/htdocs/、/usr/local/apache2/conf/httpd.conf

2.gitlab/gitlab-ce(git仓库)相关目录:/etc/gitlab,配置文件、/var/opt/gitlab,保存git所有版本库、/var/log/gitlab,日志

十三、建立私有镜像仓库

1.registry,镜像仓库容器,镜像存储目录:/var/lib/registry,配置文件:/etc/docker/registry/config.yml

十四、Docker常见问题

1.虚拟化就是在一台主机上运行多个相互隔离的实例,这包含两层意思,一是相互隔离,即彼此之间没有影响;二是实例,既可以是一个完整的操作系统

到此,相信大家对“Docker原理、架构与应用是什么”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/143772.html

(0)

相关推荐

  • react: 高阶函数及函数柯里化

    技术react: 高阶函数及函数柯里化 react: 高阶函数及函数柯里化1.高阶函数若A函数,接收的参数是一个函数,那么A就可以称之为高阶函数。
    若A函数,调用的返回值依然是一个函数,那么A就可以称之

    礼包 2021年12月2日
  • 怎么理解TiDB兼容MySQL参数优化

    技术怎么理解TiDB兼容MySQL参数优化本篇内容介绍了“怎么理解TiDB兼容MySQL参数优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔

    攻略 2021年11月8日
  • 南辕北辙原文及翻译,《南辕北辙》的古文意思和寓意

    技术南辕北辙原文及翻译,《南辕北辙》的古文意思和寓意1南辕北辙原文及翻译、《南辕北辙》的古文意思如下:
    我今天来上朝的时候,在大路上遇见了一个人,正在面朝北面驾着他的车,他告诉我说:‘我想到楚国去。’我说:‘您到楚国去,

    生活 2021年10月23日
  • 荸荠怎么煮,朋友送了好多马蹄怎么做菜

    技术荸荠怎么煮,朋友送了好多马蹄怎么做菜原料主料荸荠怎么煮:马蹄9个 梨1个 橘子1个 辅料:水适量调料:冰糖适量 详细步骤 1、将马蹄,梨,橘子洗好。
    2、马蹄梨削皮,橘子剥皮。
    3、将马蹄,梨切小块,锅中放水烧开

    生活 2021年10月25日
  • 第二篇Scrum冲刺博客

    技术第二篇Scrum冲刺博客 第二篇Scrum冲刺博客1
    1.1每天举行站立式会议
    由于我们是不同班而且有男生和女生,所以大家都很难抽出时间参加站立式会议,所以我们改为微信会议1.2昨天已完成工作成员

    礼包 2021年11月24日
  • php中怎么创建ODBC

    技术php中怎么创建ODBC本篇内容介绍了“php中怎么创建ODBC”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ODB

    攻略 2021年11月25日