1. 首页
  2. IT资讯

终于有人把 Docker 讲清楚了,万字详解

“u003Cpu003E优质文章,及时送达u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRcsUnd92eoboDR” img_width=”640″ img_height=”29″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003E作者 | 乐章u003Cu002Fpu003Eu003Cpu003E编辑 | Java技术栈(id:javastack)u003Cu002Fpu003Eu003Cpu003E来源 | cnblogsu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003Eu002Fzhangu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Engengu002Fpu002F11236968.htmlu003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003E一、简介u003Cu002Fh1u003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E1、了解Docker的前生LXCu003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003ELXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。u003Cu002Fpu003Eu003Cpu003E与传统虚拟化技术相比,它的优势在于:u003Cu002Fpu003Eu003Cpu003E(1)与宿主机使用同一个内核,性能损耗小;u003Cu002Fpu003Eu003Cpu003E(2)不需要指令级模拟;u003Cu002Fpu003Eu003Cpu003E(3)不需要即时(Just-in-time)编译;u003Cu002Fpu003Eu003Cpu003E(4)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;u003Cu002Fpu003Eu003Cpu003E(5)避免了准虚拟化和系统调用替换中的复杂性;u003Cu002Fpu003Eu003Cpu003E(6)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。u003Cu002Fpu003Eu003Cpu003E总结:Linux Container是一种轻量级的虚拟化的手段。u003Cu002Fpu003Eu003Cpu003ELinux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为lxc是一种操作系统层次上的资源的虚拟化。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E2、LXC与docker什么关系?u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003Edocker并不是LXC替代品,docker底层使用了LXC来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,并且能够课哦内阁制各进程的资源分配。u003Cu002Fpu003Eu003Cpu003E在LXC的基础之上,docker提供了一系列更强大的功能。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E3、什么是dockeru003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003Edocker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。u003Cu002Fpu003Eu003Cpu003Edocker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux服务器,也可以实现虚拟化。u003Cu002Fpu003Eu003Cpu003E容器是完全使用沙箱机制,相互之间不会有任何接口(类iphone的app),并且容器开销极其低。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E4、docker官方文档u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003Ehttps:u002Fu002Fdocs.dockeru003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003Eu002Fu003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E5、为什么docker越来越受欢迎u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003E官方话语:u003Cu002Fpu003Eu003Culu003Eu003Cliu003Eu003Cpu003E容器化越来越受欢迎,因为容器是:u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Culu003Eu003Culu003Eu003Cliu003Eu003Cpu003E灵活:即使是最复杂的应用也可以集装箱化。u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E轻量级:容器利用并共享主机内核。u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E可互换:您可以即时部署更新和升级。u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E便携式:您可以在本地构建,部署到云,并在任何地方运行。u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E可扩展:您可以增加并自动分发容器副本。u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E可堆叠:您可以垂直和即时堆叠服务。u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cu002Fulu003Eu003Culu003Eu003Cliu003Eu003Ch2 toutiao-origin=”h3″u003E镜像和容器(contalners)u003Cu002Fh2u003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003E通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。u003Cu002Fpu003Eu003Cpu003E容器是镜像的运行实例,当被运行时有镜像状态和用户进程,可以使用docker ps 查看。u003Cu002Fpu003Eu003Culu003Eu003Cliu003Eu003Ch2 toutiao-origin=”h3″u003E容器和虚拟机u003Cu002Fh2u003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003E容器时在linux上本机运行,并与其他容器共享主机的内核,它运行的一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。u003Cu002Fpu003Eu003Cpu003E虚拟机运行的是一个完成的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUg3WCMZgKsL” img_width=”720″ img_height=”278″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E6、docker版本u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003EDocker Community Edition(CE)社区版u003Cu002Fpu003Eu003Cpu003EEnterprise Edition(EE) 商业版u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E7、docker和openstack的几项对比u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUg3v1JqOvDv” img_width=”509″ img_height=”163″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E8、容器在内核中支持2种重要技术u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003Edocker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)u003Cu002Fpu003Eu003Cpu003E1)namespaces 名称空间u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUg44IzA2eyT” img_width=”542″ img_height=”145″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003E2)control Group 控制组u003Cu002Fpu003Eu003Cpu003Ecgroup的特点是: u003Cu002Fpu003Eu003Culu003Eu003Cliu003Eu003Cpu003Ecgroup的api以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现cgroup的组件管理u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003Ecgroup的组件管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资源载分配和再利用u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E所有资源管理的功能都以子系统的方式实现,接口统一子任务创建之初与其父任务处于同一个cgroup的控制组u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003E四大功能:u003Cu002Fpu003Eu003Culu003Eu003Cliu003Eu003Cpu003E资源限制:可以对任务使用的资源总额进行限制u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E任务控制:cgroup可以对任务执行挂起、恢复等操作u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E9、了解docker三个重要概念u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003E1)image镜像u003Cu002Fpu003Eu003Cpu003Edocker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下周一个已经做好的镜像来直接使用u003Cu002Fpu003Eu003Cpu003E2)container容器u003Cu002Fpu003Eu003Cpu003Edocker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以吧容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行再其中的应用程序u003Cu002Fpu003Eu003Cpu003E3)repostory仓库u003Cu002Fpu003Eu003Cpu003E仓库是集中存储镜像文件的沧桑,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)u003Cu002Fpu003Eu003Cpu003E仓库分为两种,公有参考,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下周,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E10、docker的主要用途u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003E官方就是Bulid 、ship、run any appu002Fany where,编译、装载、运行、任何appu002F在任意地放都能运行。u003Cu002Fpu003Eu003Cpu003E就是实现了应用的封装、部署、运行的生命周期管理只要在glibc的环境下,都可以运行。u003Cu002Fpu003Eu003Cpu003E运维生成环境中:docker化。u003Cu002Fpu003Eu003Culu003Eu003Cliu003Eu003Cpu003E发布服务不用担心服务器的运行环境,所有的服务器都是自动分配docker,自动部署,自动安装,自动运行u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E再不用担心其他服务引擎的磁盘问题,cpu问题,系统问题了u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E资源利用更出色u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E自动迁移,可以制作镜像,迁移使用自定义的镜像即可迁移,不会出现什么问题u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E管理更加方便了u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E11、docker改变了什么u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Culu003Eu003Cliu003Eu003Cpu003E面向产品:产品交付u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E面向开发:简化环境配置u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E面向测试:多版本测试u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E面向运维:环境一致性u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E面向架构:自动化扩容(微服务)u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003E二、docker架构u003Cu002Fh1u003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E1、总体架构u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUg4Z7gVciuX” img_width=”847″ img_height=”527″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Culu003Eu003Cliu003Eu003Cpu003Edistribution 负责与docker registry交互,上传洗澡镜像以及v2 registry 有关的源数据u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003Eregistry负责docker registry有关的身份认证、镜像查找、镜像验证以及管理registry mirror等交互操作u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003Eimage 负责与镜像源数据有关的存储、查找,镜像层的索引、查找以及镜像tar包有关的导入、导出操作u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003Ereference负责存储本地所有镜像的repository和tag名,并维护与镜像id之间的映射关系u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003Elayer模块负责与镜像层和容器层源数据有关的增删改查,并负责将镜像层的增删改查映射到实际存储镜像层文件的graphdriver模块u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003Egraghdriver是所有与容器镜像相关操作的执行者u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E2、docker架构2u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003E如果觉得上面架构图比较乱可以看这个架构:u003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUgLNFXlYOV6″ img_width=”992″ img_height=”1227″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cu002Fh2u003Eu003Cpu003E从上图不难看出,用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者。u003Cu002Fpu003Eu003Cpu003E而Docker Daemon作为Docker架构中的主体部分,首先提供Server的功能使其可以接受Docker Client的请求;而后Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。u003Cu002Fpu003Eu003Cpu003EJob的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动graphdriver将下载镜像以Graph的形式存储;当需要为Docker创建网络环境时,通过网络管理驱动networkdriver创建并配置Docker容器网络环境;当需要限制Docker容器运行资源或执行用户指令等操作时,则通过execdriver来完成。u003Cu002Fpu003Eu003Cpu003E而libcontainer是一项独立的容器管理包,networkdriver以及execdriver都是通过libcontainer来实现具体对容器进行的操作。当执行完运行容器的命令后,一个实际的Docker容器就处于运行状态,该容器拥有独立的文件系统,独立并且安全的运行环境等。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E3、docker架构3u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003E再来看看另外一个架构,这个个架构就简单清晰指明了serveru002Fclient交互,容器和镜像、数据之间的一些联系。u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUgLf7GKTP2i” img_width=”690″ img_height=”405″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003E这个架构图更加清晰了架构u003Cu002Fpu003Eu003Cpu003Edocker daemon就是docker的守护进程即server端,可以是远程的,也可以是本地的,这个不是Cu002FS架构吗,客户端Docker client 是通过rest api进行通信。u003Cu002Fpu003Eu003Cpu003Edocker cli 用来管理容器和镜像,客户端提供一个只读镜像,然后通过镜像可以创建多个容器,这些容器可以只是一个RFS(Root file system根文件系统),也可以ishi一个包含了用户应用的RFS,容器再docker client中只是要给进程,两个进程之间互不可见。u003Cu002Fpu003Eu003Cpu003E用户不能与server直接交互,但可以通过与容器这个桥梁来交互,由于是操作系统级别的虚拟技术,中间的损耗几乎可以不计。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003E三、docker架构2各个模块的功能(带完善)u003Cu002Fh1u003Eu003Cpu003E主要的模块有:u003Cstrong toutiao-origin=”span” class=”highlight-text”u003EDocker Client、Docker Daemon、Docker Registry、Graph、Driver、libcontainer以及Docker containeru003Cu002Fstrongu003E。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E1、docker clientu003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003Edocker client 是docker架构中用户用来和docker daemon建立通信的客户端,用户使用的可执行文件为docker,通过docker命令行工具可以发起众多管理container的请求。u003Cu002Fpu003Eu003Cpu003Edocker client可以通过一下三宗方式和docker daemon建立通信:tcp:u002Fu002Fhost:port;unix:path_to_socket;fd:u002Fu002Fsocketfd。,docker client可以通过设置命令行flag参数的形式设置安全传输层协议(TLS)的有关参数,保证传输的安全性。u003Cu002Fpu003Eu003Cpu003Edocker client发送容器管理请求后,由docker daemon接受并处理请求,当docker client 接收到返回的请求相应并简单处理后,docker client 一次完整的生命周期就结束了,当需要继续发送容器管理请求时,用户必须再次通过docker可以执行文件创建docker client。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E2、docker daemonu003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003Edocker daemon 是docker架构中一个常驻在后台的系统进程,功能是:接收处理docker client发送的请求。该守护进程在后台启动一个server,server负载接受docker client发送的请求;接受请求后,server通过路由与分发调度,找到相应的handler来执行请求。u003Cu002Fpu003Eu003Cpu003Edocker daemon启动所使用的可执行文件也为docker,与docker client启动所使用的可执行文件docker相同,在docker命令执行时,通过传入的参数来判别docker daemon与docker client。u003Cu002Fpu003Eu003Cpu003Edocker daemon的架构可以分为:docker server、engine、job。daemonu003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E3、docker serveru003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003Eu003Cu002Fpu003Eu003Cpu003Edocker server在docker架构中时专门服务于docker client的server,该server的功能时:接受并调度分发docker client发送的请求,架构图如下:u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUgLoEpkdDtv” img_width=”625″ img_height=”470″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003E在Docker的启动过程中,通过包gorillau002Fmux(golang的类库解析),创建了一个mux.Router,提供请求的路由功能。在Golang中,gorillau002Fmux是一个强大的URL路由器以及调度分发器。该mux.Router中添加了众多的路由项,每一个路由项由HTTP请求方法(PUT、POST、GET或DELETE)、URL、Handler三部分组成。u003Cu002Fpu003Eu003Cpu003E若Docker Client通过HTTP的形式访问Docker Daemon,创建完mux.Router之后,Docker将Server的监听地址以及mux.Router作为参数,创建一个httpSrv=http.Server{},最终执行httpSrv.Serve为请求服务。u003Cu002Fpu003Eu003Cpu003E在Server的服务过程中,Server在listener上接受Docker Client的访问请求,并创建一个全新的goroutine来服务该请求。在goroutine中,首先读取请求内容,然后做解析工作,接着找到相应的路由项,随后调用相应的Handler来处理该请求,最后Handler处理完请求之后回复该请求。u003Cu002Fpu003Eu003Cpu003E需要注意的是:Docker Server的运行在Docker的启动过程中,是靠一个名为”serveapi”的job的运行来完成的。原则上,Docker Server的运行是众多job中的一个,但是为了强调Docker Server的重要性以及为后续job服务的重要特性,将该”serveapi”的job单独抽离出来分析,理解为Docker Server。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E4、engineu003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003EEngine是Docker架构中的运行引擎,同时也Docker运行的核心模块。它扮演Docker container存储仓库的角色,并且通过执行job的方式来操纵管理这些容器。u003Cu002Fpu003Eu003Cpu003E在Engine数据结构的设计与实现过程中,有一个handler对象。该handler对象存储的都是关于众多特定job的handler处理访问。举例说明,Engine的handler对象中有一项为:{“create”: daemon.ContainerCreate,},则说明当名为”create”的job在运行时,执行的是daemon.ContainerCreate的handler。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E5、jobu003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003E一个Job可以认为是Docker架构中Engine内部最基本的工作执行单元。Docker可以做的每一项工作,都可以抽象为一个job。例如:在容器内部运行一个进程,这是一个job;创建一个新的容器,这是一个job,从Internet上下载一个文档,这是一个job;包括之前在Docker Server部分说过的,创建Server服务于HTTP的API,这也是一个job,等等。u003Cu002Fpu003Eu003Cpu003EJob的设计者,把Job设计得与Unix进程相仿。比如说:Job有一个名称,有参数,有环境变量,有标准的输入输出,有错误处理,有返回状态等。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E6、docker registryu003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003EDocker Registry是一个存储容器镜像的仓库。而容器镜像是在容器被创建时,被加载用来初始化容器的文件架构与目录。u003Cu002Fpu003Eu003Cpu003E在Docker的运行过程中,Docker Daemon会与Docker Registry通信,并实现搜索镜像、下载镜像、上传镜像三个功能,这三个功能对应的job名称分别为”search”,”pull” 与 “push”。u003Cu002Fpu003Eu003Cpu003E其中,在Docker架构中,Docker可以使用公有的Docker Registry,即大家熟知的Docker Hub,如此一来,Docker获取容器镜像文件时,必须通过互联网访问Docker Hub;同时Docker也允许用户构建本地私有的Docker Registry,这样可以保证容器镜像的获取在内网完成。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E7、Graphu003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003EGraph在Docker架构中扮演已下载容器镜像的保管者,以及已下载容器镜像之间关系的记录者。一方面,Graph存储着本地具有版本信息的文件系统镜像,另一方面也通过GraphDB记录着所有文件系统镜像彼此之间的关系。u003Cu002Fpu003Eu003Cpu003EGraph的架构如下:u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUgLxHKGHbWQ” img_width=”757″ img_height=”391″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003E其中,GraphDB是一个构建在SQLite之上的小型图数据库,实现了节点的命名以及节点之间关联关系的记录。它仅仅实现了大多数图数据库所拥有的一个小的子集,但是提供了简单的接口表示节点之间的关系。u003Cu002Fpu003Eu003Cpu003E同时在Graph的本地目录中,关于每一个的容器镜像,具体存储的信息有:该容器镜像的元数据,容器镜像的大小信息,以及该容器镜像所代表的具体rootfs。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E8、driveru003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003EDriver是Docker架构中的驱动模块。通过Driver驱动,Docker可以实现对Docker容器执行环境的定制。由于Docker运行的生命周期中,并非用户所有的操作都是针对Docker容器的管理,另外还有关于Docker运行信息的获取,Graph的存储与记录等。因此,为了将Docker容器的管理从Docker Daemon内部业务逻辑中区分开来,设计了Driver层驱动来接管所有这部分请求。u003Cu002Fpu003Eu003Cpu003E在Docker Driver的实现中,可以分为以下三类驱动:graphdriver、networkdriver和execdriver。u003Cu002Fpu003Eu003Cpu003Egraphdriver主要用于完成容器镜像的管理,包括存储与获取。即当用户需要下载指定的容器镜像时,graphdriver将容器镜像存储在本地的指定目录;同时当用户需要使用指定的容器镜像来创建容器的rootfs时,graphdriver从本地镜像存储目录中获取指定的容器镜像。u003Cu002Fpu003Eu003Cpu003E在graphdriver的初始化过程之前,有4种文件系统或类文件系统在其内部注册,它们分别是aufs、btrfs、vfs和devmapper。而Docker在初始化之时,通过获取系统环境变量”DOCKER_DRIVER”来提取所使用driver的指定类型。而之后所有的graph操作,都使用该driver来执行。u003Cu002Fpu003Eu003Cpu003Egraphdriver的架构如下:u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUgM8AUZJXrn” img_width=”559″ img_height=”329″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003Enetworkdriver的用途是完成Docker容器网络环境的配置,其中包括Docker启动时为Docker环境创建网桥;Docker容器创建时为其创建专属虚拟网卡设备;以及为Docker容器分配IP、端口并与宿主机做端口映射,设置容器防火墙策略等。networkdriver的架构如下:u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUgiE4dRsnXH” img_width=”593″ img_height=”391″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003Eexecdriver作为Docker容器的执行驱动,负责创建容器运行命名空间,负责容器资源使用的统计与限制,负责容器内部进程的真正运行等。在execdriver的实现过程中,原先可以使用LXC驱动调用LXC的接口,来操纵容器的配置以及生命周期,而现在execdriver默认使用native驱动,不依赖于LXC。u003Cu002Fpu003Eu003Cpu003E具体体现在Daemon启动过程中加载的ExecDriverflag参数,该参数在配置文件已经被设为”native”。这可以认为是Docker在1.2版本上一个很大的改变,或者说Docker实现跨平台的一个先兆。execdriver架构如下:u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUgiS7oYYkb7″ img_width=”553″ img_height=”336″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E9、libcontaineru003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003Elibcontainer是Docker架构中一个使用Go语言设计实现的库,设计初衷是希望该库可以不依靠任何依赖,直接访问内核中与容器相关的API。u003Cu002Fpu003Eu003Cpu003E正是由于libcontainer的存在,Docker可以直接调用libcontainer,而最终操纵容器的namespace、cgroups、apparmor、网络设备以及防火墙规则等。这一系列操作的完成都不需要依赖LXC或者其他包。libcontainer架构如下:u003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUgibCRM9jxs” img_width=”612″ img_height=”330″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003E另外,libcontainer提供了一整套标准的接口来满足上层对容器管理的需求。或者说,libcontainer屏蔽了Docker上层对容器的直接管理。又由于libcontainer使用Go这种跨平台的语言开发实现,且本身又可以被上层多种不同的编程语言访问,因此很难说,未来的Docker就一定会紧紧地和Linux捆绑在一起。而于此同时,Microsoft在其著名云计算平台Azure中,也添加了对Docker的支持,可见Docker的开放程度与业界的火热度。u003Cu002Fpu003Eu003Cpu003E暂不谈Docker,由于libcontainer的功能以及其本身与系统的松耦合特性,很有可能会在其他以容器为原型的平台出现,同时也很有可能催生出云计算领域全新的项目。u003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E10、docker containeru003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003EDocker container(Docker容器)是Docker架构中服务交付的最终体现形式。u003Cu002Fpu003Eu003Cpu003EDocker按照用户的需求与指令,订制相应的Docker容器:u003Cu002Fpu003Eu003Culu003Eu003Cliu003Eu003Cpu003E用户通过指定容器镜像,使得Docker容器可以自定义rootfs等文件系统;u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E用户通过指定计算资源的配额,使得Docker容器使用指定的计算资源;u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E用户通过配置网络及其安全策略,使得Docker容器拥有独立且安全的网络环境;u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003E用户通过指定运行的命令,使得Docker容器执行指定的工作。u003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUgiq66iKgOv” img_width=”779″ img_height=”451″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003E四、docker简单使用u003Cu002Fh1u003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E1、安装u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003Eyum install docker -y u003Cu002Fcodeu003Eu003Ccodeu003Esystemctl enable dockeru003Cu002Fcodeu003Eu003Ccodeu003Esystemctl start dockeru003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cpu003E注意:启动前应当设置源u003Cu002Fpu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003Evim u002Fusru002Flibu002Fsystemdu002Fsystemu002Fdocker.serviceu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cpu003E这里设置阿里的,注册阿里云账户号每个用户都有:u003Cu002Fpu003Eu003Cpreu003Eu003Cdivu003Eu003Cpreu003Eu003Cdivu003Eu003Cpu003Eu003Ccodeu003E[root@web1 ~]# vim u002Fusru002Flibu002Fsystemdu002Fsystemu002Fdocker.serviceu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cpu003Eu003Ccodeu003E[Unit]u003Cu002Fcodeu003Eu003Ccodeu003EDescription=Docker Application Container Engineu003Cu002Fcodeu003Eu003Ccodeu003EDocumentation=http:u002Fu002Fdocs.dockeru003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003Eu003Cu002Fcodeu003Eu003Ccodeu003EAfter=network.targetu003Cu002Fcodeu003Eu003Ccodeu003EWants=docker-storage-setup.serviceu003Cu002Fcodeu003Eu003Ccodeu003ERequires=docker-cleanup.timeru003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cpu003Eu003Ccodeu003E[Service]u003Cu002Fcodeu003Eu003Ccodeu003EType=notifyu003Cu002Fcodeu003Eu003Ccodeu003ENotifyAccess=mainu003Cu002Fcodeu003Eu003Ccodeu003EEnvironmentFile=-u002Frunu002Fcontainersu002Fregistries.confu003Cu002Fcodeu003Eu003Ccodeu003EEnvironmentFile=-u002Fetcu002Fsysconfigu002Fdockeru003Cu002Fcodeu003Eu003Ccodeu003EEnvironmentFile=-u002Fetcu002Fsysconfigu002Fdocker-storageu003Cu002Fcodeu003Eu003Ccodeu003EEnvironmentFile=-u002Fetcu002Fsysconfigu002Fdocker-networku003Cu002Fcodeu003Eu003Ccodeu003EEnvironment=GOTRACEBACK=crashu003Cu002Fcodeu003Eu003Ccodeu003EEnvironment=DOCKER_HTTP_HOST_COMPAT=1u003Cu002Fcodeu003Eu003Ccodeu003EEnvironment=PATH=u002Fusru002Flibexecu002Fdocker:u002Fusru002Fbin:u002Fusru002Fsbinu003Cu002Fcodeu003Eu003Ccodeu003EExecStart=u002Fusru002Fbinu002Fdockerd-current –registry-mirror=https:u002Fu002Frfcod7oz.mirror.aliyuncsu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003E #这个值可以登陆阿里云账号请参考下图u003Cu002Fcodeu003Eu003Ccodeu003E –au003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003E-runtime docker-runc=u002Fusru002Flibexecu002Fdockeru002Fdocker-runc-current u003Cu002Fcodeu003Eu003Ccodeu003E –default-runtime=docker-runc u003Cu002Fcodeu003Eu003Ccodeu003E –exec-opt native.cgroupdriver=systemd u003Cu002Fcodeu003Eu003Ccodeu003E –userland-proxy-path=u002Fusru002Flibexecu002Fdockeru002Fdocker-proxy-current u003Cu002Fcodeu003Eu003Ccodeu003E –init-path=u002Fusru002Flibexecu002Fdockeru002Fdocker-init-current u003Cu002Fcodeu003Eu003Ccodeu003E –seccomp-profile=u002Fetcu002Fdockeru002Fseccomp.json u003Cu002Fcodeu003Eu003Ccodeu003E $OPTIONS u003Cu002Fcodeu003Eu003Ccodeu003E $DOCKER_STORAGE_OPTIONS u003Cu002Fcodeu003Eu003Ccodeu003E $DOCKER_NETWORK_OPTIONS u003Cu002Fcodeu003Eu003Ccodeu003E $ADD_REGISTRY u003Cu002Fcodeu003Eu003Ccodeu003E $BLOCK_REGISTRY u003Cu002Fcodeu003Eu003Ccodeu003E $INSECURE_REGISTRY u003Cu002Fcodeu003Eu003Ccodeu003E $REGISTRIESu003Cu002Fcodeu003Eu003Ccodeu003EExecReload=u002Fbinu002Fkill -s HUP $MAINPIDu003Cu002Fcodeu003Eu003Ccodeu003ELimitNOFILE=1048576u003Cu002Fcodeu003Eu003Ccodeu003ELimitNPROC=1048576u003Cu002Fcodeu003Eu003Ccodeu003ELimitCORE=infinityu003Cu002Fcodeu003Eu003Ccodeu003ETimeoutStartSec=0u003Cu002Fcodeu003Eu003Ccodeu003ERestart=on-abnormalu003Cu002Fcodeu003Eu003Ccodeu003EKillMode=processu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cpu003Eu003Ccodeu003E[Install]u003Cu002Fcodeu003Eu003Ccodeu003EWantedBy=multi-user.targetu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cdivu003E u003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002FRgMUgiyEmNxYUv” img_width=”957″ img_height=”590″ alt=”终于有人把 Docker 讲清楚了,万字详解” inline=”0″u003Eu003Cu002Fdivu003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E2、docker版本查询u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Eu003Cdivu003Eu003Cpreu003Eu003Cdivu003Eu003Cpu003Eu003Ccodeu003E[root@web1 ~]# docker versionu003Cu002Fcodeu003Eu003Ccodeu003EClient:u003Cu002Fcodeu003Eu003Ccodeu003E Version: 1.13.1u003Cu002Fcodeu003Eu003Ccodeu003E API version: 1.26u003Cu002Fcodeu003Eu003Ccodeu003E Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003Eu003Cu002Fcodeu003Eu003Ccodeu003E Go version: go1.10.3u003Cu002Fcodeu003Eu003Ccodeu003E Git commit: b2f74b2u002F1.13.1u003Cu002Fcodeu003Eu003Ccodeu003E Built: Wed May 1 14:55:20 2019u003Cu002Fcodeu003Eu003Ccodeu003E OSu002FArch: linuxu002Famdu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003Eu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cpu003Eu003Ccodeu003EServer:u003Cu002Fcodeu003Eu003Ccodeu003E Version: 1.13.1u003Cu002Fcodeu003Eu003Ccodeu003E API version: 1.26 (minimum version 1.12)u003Cu002Fcodeu003Eu003Ccodeu003E Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003Eu003Cu002Fcodeu003Eu003Ccodeu003E Go version: go1.10.3u003Cu002Fcodeu003Eu003Ccodeu003E Git commit: b2f74b2u002F1.13.1u003Cu002Fcodeu003Eu003Ccodeu003E Built: Wed May 1 14:55:20 2019u003Cu002Fcodeu003Eu003Ccodeu003E OSu002FArch: linuxu002Famdu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003Eu003Cu002Fcodeu003Eu003Ccodeu003E Experimental: falseu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E3、搜索下载镜像u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Eu003Cbru003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003Edocker pull alpine #下载镜像u003Cu002Fcodeu003Eu003Ccodeu003Edocker search nginx #查看镜像u003Cu002Fcodeu003Eu003Ccodeu003Edocker pull nginxu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E4、查看已经下载的镜像u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpreu003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E[root@web1 ~]# docker imagesu003Cu002Fcodeu003Eu003Ccodeu003EREPOSITORY TAG IMAGE ID CREATED SIZEu003Cu002Fcodeu003Eu003Ccodeu003Ezxgu002Fmy_nginx v1 b1u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003Ef4c07cu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003E 8 days ago 126 MBu003Cu002Fcodeu003Eu003Ccodeu003Ezxgu002Fmy_nginx latest f07837869dfc 8 days ago 126 MBu003Cu002Fcodeu003Eu003Ccodeu003Edocker.iou002Fnginx latest e445ab08b2be 2 weeks ago 126 MBu003Cu002Fcodeu003Eu003Ccodeu003Edocker.iou002Falpine latest b7b28af77ffe 3 weeks ago 5.58 MBu003Cu002Fcodeu003Eu003Ccodeu003Edocker.iou002Fcentos latest 9f38484d220f 4 months ago 202 MBu003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 ~]#u003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E5、导出镜像u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpreu003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003Edocker save nginx >u002Ftmpu002Fnginx.tar.gzu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E6、删除镜像u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpreu003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003Edocker rmi -f nginxu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E7、导入镜像u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpreu003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003Edocker load <u002Ftmpu002Fnginx.tar.gzu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E8、默认配置文件u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003Evim u002Fusru002Flibu002Fsystemdu002Fsystemu002Fdocker.service u003Cu002Fpu003Eu003Cpreu003Eu003Cbru003Eu003Cdivu003Eu003Cpreu003Eu003Cdivu003Eu003Cpu003Eu003Ccodeu003E[Unit]u003Cu002Fcodeu003Eu003Ccodeu003EDescription=Docker Application Container Engineu003Cu002Fcodeu003Eu003Ccodeu003EDocumentation=http:u002Fu002Fdocs.dockeru003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003Eu003Cu002Fcodeu003Eu003Ccodeu003EAfter=network.targetu003Cu002Fcodeu003Eu003Ccodeu003EWants=docker-storage-setup.serviceu003Cu002Fcodeu003Eu003Ccodeu003ERequires=docker-cleanup.timeru003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cpu003Eu003Ccodeu003E[Service]u003Cu002Fcodeu003Eu003Ccodeu003EType=notifyu003Cu002Fcodeu003Eu003Ccodeu003ENotifyAccess=mainu003Cu002Fcodeu003Eu003Ccodeu003EEnvironmentFile=-u002Frunu002Fcontainersu002Fregistries.confu003Cu002Fcodeu003Eu003Ccodeu003EEnvironmentFile=-u002Fetcu002Fsysconfigu002Fdockeru003Cu002Fcodeu003Eu003Ccodeu003EEnvironmentFile=-u002Fetcu002Fsysconfigu002Fdocker-storageu003Cu002Fcodeu003Eu003Ccodeu003EEnvironmentFile=-u002Fetcu002Fsysconfigu002Fdocker-networku003Cu002Fcodeu003Eu003Ccodeu003EEnvironment=GOTRACEBACK=crashu003Cu002Fcodeu003Eu003Ccodeu003EEnvironment=DOCKER_HTTP_HOST_COMPAT=1u003Cu002Fcodeu003Eu003Ccodeu003EEnvironment=PATH=u002Fusru002Flibexecu002Fdocker:u002Fusru002Fbin:u002Fusru002Fsbinu003Cu002Fcodeu003Eu003Ccodeu003EExecStart=u002Fusru002Fbinu002Fdockerd-current –registry-mirror=https:u002Fu002Frfcod7oz.mirror.aliyuncsu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003E u003Cu002Fcodeu003Eu003Ccodeu003E –au003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003E-runtime docker-runc=u002Fusru002Flibexecu002Fdockeru002Fdocker-runc-current u003Cu002Fcodeu003Eu003Ccodeu003E –default-runtime=docker-runc u003Cu002Fcodeu003Eu003Ccodeu003E –exec-opt native.cgroupdriver=systemd u003Cu002Fcodeu003Eu003Ccodeu003E –userland-proxy-path=u002Fusru002Flibexecu002Fdockeru002Fdocker-proxy-current u003Cu002Fcodeu003Eu003Ccodeu003E –init-path=u002Fusru002Flibexecu002Fdockeru002Fdocker-init-current u003Cu002Fcodeu003Eu003Ccodeu003E –seccomp-profile=u002Fetcu002Fdockeru002Fseccomp.json u003Cu002Fcodeu003Eu003Ccodeu003E $OPTIONS u003Cu002Fcodeu003Eu003Ccodeu003E $DOCKER_STORAGE_OPTIONS u003Cu002Fcodeu003Eu003Ccodeu003E $DOCKER_NETWORK_OPTIONS u003Cu002Fcodeu003Eu003Ccodeu003E $ADD_REGISTRY u003Cu002Fcodeu003Eu003Ccodeu003E $BLOCK_REGISTRY u003Cu002Fcodeu003Eu003Ccodeu003E $INSECURE_REGISTRY u003Cu002Fcodeu003Eu003Ccodeu003E $REGISTRIESu003Cu002Fcodeu003Eu003Ccodeu003EExecReload=u002Fbinu002Fkill -s HUP $MAINPIDu003Cu002Fcodeu003Eu003Ccodeu003ELimitNOFILE=1048576u003Cu002Fcodeu003Eu003Ccodeu003ELimitNPROC=1048576u003Cu002Fcodeu003Eu003Ccodeu003ELimitCORE=infinityu003Cu002Fcodeu003Eu003Ccodeu003ETimeoutStartSec=0u003Cu002Fcodeu003Eu003Ccodeu003ERestart=on-abnormalu003Cu002Fcodeu003Eu003Ccodeu003EKillMode=processu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cpu003Eu003Ccodeu003E[Install]u003Cu002Fcodeu003Eu003Ccodeu003EWantedBy=multi-user.targetu003Cu002Fcodeu003Eu003Ccodeu003E~u003Cu002Fcodeu003Eu003Ccodeu003E~u003Cu002Fcodeu003Eu003Ccodeu003E~u003Cu002Fcodeu003Eu003Ccodeu003E~u003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E如果更改存储目录就添加 u003Cu002Fpu003Eu003Cpreu003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E–graph=u002Foptu002Fdockeru003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cu002Fpreu003Eu003Cpu003E如果更改DNS——默认采用宿主机的dnsu003Cu002Fpu003Eu003Cpreu003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E–dns=xxxx的方式指定u003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E9、运行hello worldu003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003E这里用centos镜像echo一个hello wordu003Cu002Fpu003Eu003Cpreu003Eu003Cbru003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E[root@web1 overlay2]# docker imagesu003Cu002Fcodeu003Eu003Ccodeu003EREPOSITORY TAG IMAGE ID CREATED SIZEu003Cu002Fcodeu003Eu003Ccodeu003Ezxgu002Fmy_nginx v1 b1u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003Ef4c07cu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003E 8 days ago 126 MBu003Cu002Fcodeu003Eu003Ccodeu003Ezxgu002Fmy_nginx latest f07837869dfc 8 days ago 126 MBu003Cu002Fcodeu003Eu003Ccodeu003Edocker.iou002Fnginx latest e445ab08b2be 2 weeks ago 126 MBu003Cu002Fcodeu003Eu003Ccodeu003Edocker.iou002Falpine latest b7b28af77ffe 3 weeks ago 5.58 MBu003Cu002Fcodeu003Eu003Ccodeu003Edocker.iou002Fcentos latest 9f38484d220f 4 months ago 202 MBu003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]# docker run centos echo “hello world”u003Cu002Fcodeu003Eu003Ccodeu003Ehello worldu003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]#u003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E10、运行一个容器-runu003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpreu003Eu003Cbru003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E[root@web1 overlay2]# docker run -it alpine sh #运行并进入alpineu003Cu002Fcodeu003Eu003Ccodeu003Eu002F #u003Cu002Fcodeu003Eu003Ccodeu003Eu002F #u003Cu002Fcodeu003Eu003Ccodeu003Eu002F #u003Cu002Fcodeu003Eu003Ccodeu003Eu002F #u003Cu002Fcodeu003Eu003Ccodeu003Eu002F #u003Cu002Fcodeu003Eu003Ccodeu003Eu002F # lsu003Cu002Fcodeu003Eu003Ccodeu003Ebin etc lib mnt proc run srv tmp varu003Cu002Fcodeu003Eu003Ccodeu003Edev home media opt root sbin sys usru003Cu002Fcodeu003Eu003Ccodeu003Eu002F # cd tmpu003Cu002Fcodeu003Eu003Ccodeu003Eu002Ftmp # eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Etu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E后台运行(-d后台运行)(–name添加一个名字)u003Cu002Fpu003Eu003Cpreu003Eu003Cbru003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E[root@web1 overlay2]# docker run -it -d –name test1 alpineu003Cu002Fcodeu003Eu003Ccodeu003Eac46c019b800d34c37d4f9dcd56c974cb82eca3acfu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E185u003Cu002Fiu003Ee5f8f80c8a60075e343u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]# docker psu003Cu002Fcodeu003Eu003Ccodeu003ECONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESu003Cu002Fcodeu003Eu003Ccodeu003Eac46c019b800 alpine “u002Fbinu002Fsh” 5 seconds ago Up 3 seconds test1u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]#u003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E还有一种-rm参数,ctrl+c后就删除,可以测试环境用,生成环境用的少u003Cu002Fpu003Eu003Cpreu003Eu003Cbru003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E[root@web1 overlay2]# docker run -it –rm –name centos nginxu003Cu002Fcodeu003Eu003Ccodeu003E^C[root@web1 overlay2]#u003Cu002Fcodeu003Eu003Ccodeu003E##另开一个窗口u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 ~]# docker psu003Cu002Fcodeu003Eu003Ccodeu003ECONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESu003Cu002Fcodeu003Eu003Ccodeu003E3397b96ea7bd nginx “nginx -g ‘daemon …” 27 seconds ago Up 25 seconds 80u002Ftcp centosu003Cu002Fcodeu003Eu003Ccodeu003Eac46c019b800 alpine “u002Fbinu002Fsh” 4 minutes ago Up 4 minutes test1u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 ~]# docker psu003Cu002Fcodeu003Eu003Ccodeu003ECONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESu003Cu002Fcodeu003Eu003Ccodeu003Eac46c019b800 alpine “u002Fbinu002Fsh” 4 minutes ago Up 4 minutes test1u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 ~]#u003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E11、如何进入容器u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003E三种方法,上面已经演示了一种u003Cu002Fpu003Eu003Cpu003E第一种,需要容器本身的pid及util-linux,不推荐,暂时不演示了u003Cu002Fpu003Eu003Cpu003E第二种,不分配bash终端的一种实施操作,不推荐,这种操作如果在开一个窗口也能看到操作的指令,所有人都能看到。u003Cu002Fpu003Eu003Cpreu003Eu003Cdivu003Eu003Cpreu003Eu003Cdivu003Eu003Cpu003Eu003Ccodeu003E[root@web1 overlay2]# docker psu003Cu002Fcodeu003Eu003Ccodeu003ECONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESu003Cu002Fcodeu003Eu003Ccodeu003E9fcu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-5″u003E79u003Cu002Fiu003E6e928d7 nginx “sh” 2 minutes ago Up 8 seconds 80u002Ftcp mynginxu003Cu002Fcodeu003Eu003Ccodeu003Eac46c019b800 alpine “u002Fbinu002Fsh” 12 minutes ago Up 12 minutes test1u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]# docker attach mynginxu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cpu003Eu003Ccodeu003E#u003Cu002Fcodeu003Eu003Ccodeu003E#u003Cu002Fcodeu003Eu003Ccodeu003E#u003Cu002Fcodeu003Eu003Ccodeu003E#u003Cu002Fcodeu003Eu003Ccodeu003E# lsu003Cu002Fcodeu003Eu003Ccodeu003Ebin boot dev etc home lib libu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003E media mnt opt proc root run sbin srv sys tmp usr varu003Cu002Fcodeu003Eu003Ccodeu003E# eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Et u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]# docker attach mynginxu003Cu002Fcodeu003Eu003Ccodeu003EYou cannot attach to a stopped container, start it firstu003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]# docker psu003Cu002Fcodeu003Eu003Ccodeu003ECONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESu003Cu002Fcodeu003Eu003Ccodeu003Eac46c019b800 alpine “u002Fbinu002Fsh” 13 minutes ago Up 13 minutes test1u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]#u003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E第三种:exec方式,终端时分开的,推荐u003Cu002Fpu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E[root@web1 overlay2]# docker exec -it mynginx shu003Cu002Fcodeu003Eu003Ccodeu003E#u003Cu002Fcodeu003Eu003Ccodeu003E#u003Cu002Fcodeu003Eu003Ccodeu003E#u003Cu002Fcodeu003Eu003Ccodeu003E# lsu003Cu002Fcodeu003Eu003Ccodeu003Ebin boot dev etc home lib libu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003E media mnt opt proc root run sbin srv sys tmp usr varu003Cu002Fcodeu003Eu003Ccodeu003E# eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Etu003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]#u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]#u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]#u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]# docker pau003Cu002Fcodeu003Eu003Ccodeu003Edocker: ‘pa’ is not a docker command.u003Cu002Fcodeu003Eu003Ccodeu003ESee ‘docker –help’u003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]# docker psu003Cu002Fcodeu003Eu003Ccodeu003ECONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESu003Cu002Fcodeu003Eu003Ccodeu003E6fc2d091cfe9 nginx “nginx -g ‘daemon …” 45 seconds ago Up 43 seconds 80u002Ftcp mynginxu003Cu002Fcodeu003Eu003Ccodeu003Eac46c019b800 alpine “u002Fbinu002Fsh” 16 minutes ago Up 16 minutes test1u003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E12、查看docker进程及删除容器u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003E上面已经演示:u003Cu002Fpu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E[root@web1 overlay2]# docker psu003Cu002Fcodeu003Eu003Ccodeu003ECONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESu003Cu002Fcodeu003Eu003Ccodeu003E9fcu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-5″u003E79u003Cu002Fiu003E6e928d7 nginx “sh” 2 minutes ago Up 8 seconds 80u002Ftcp mynginxu003Cu002Fcodeu003Eu003Ccodeu003Eac46c019b800 alpine “u002Fbinu002Fsh” 12 minutes ago Up 12 minutes test1u003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cpreu003Eu003Cbru003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E[root@web1 overlay2]# docker ps -a #-a :显示所有的容器,包括未运行的u003Cu002Fcodeu003Eu003Ccodeu003ECONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESu003Cu002Fcodeu003Eu003Ccodeu003E9fcu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-5″u003E79u003Cu002Fiu003E6e928d7 nginx “sh” 4 minutes ago Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Eted (0) About a minute ago mynginxu003Cu002Fcodeu003Eu003Ccodeu003Eac46c019b800 alpine “u002Fbinu002Fsh” 15 minutes ago Up 15 minutes test1u003Cu002Fcodeu003Eu003Ccodeu003E3bf234febeaa alpine “sh” 17 minutes ago Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Eted (0) 16 minutes ago youthful_lumiereu003Cu002Fcodeu003Eu003Ccodeu003Eab113c63f0b4 centos “echo ‘hello world'” 31 minutes ago Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Eted (0) 31 minutes ago infallible_torvaldsu003Cu002Fcodeu003Eu003Ccodeu003Eb326027dcf42 zxgu002Fmy_nginx “nginx” 8 days ago Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Eted (0) 8 days ago my_nginxu003Cu002Fcodeu003Eu003Ccodeu003E4f1f1ca319f2 centos “bash” 8 days ago Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Eted (u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-4″u003E137u003Cu002Fiu003E) 8 days ago musing_lichtermanu003Cu002Fcodeu003Eu003Ccodeu003Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003Eb4e32991c7 nginx “nginx -g ‘daemon …” 12 days ago Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Eted (0) 12 days ago mynginx1u003Cu002Fcodeu003Eu003Ccodeu003Eaee506fe7b5a alpine “sh” 12 days ago Created infallible_haibtu003Cu002Fcodeu003Eu003Ccodeu003E70620cu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E73u003Cu002Fiu003Eb9a0 alpine “sh” 12 days ago Created gallant_volhardu003Cu002Fcodeu003Eu003Ccodeu003E7655cbf87bb0 alpine “sh” 12 days ago Created agitated_brahmaguptau003Cu002Fcodeu003Eu003Ccodeu003E33fb949372e8 fce289e99eb9 “u002Fhello” 12 days ago Created elastic_dijkstrau003Cu002Fcodeu003Eu003Ccodeu003E9de47616aea4 fce289e99eb9 “u002Fhello” 13 days ago Created confident_fermiu003Cu002Fcodeu003Eu003Ccodeu003E[root@web1 overlay2]# docker rm 9fcu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-5″u003E79u003Cu002Fiu003E6e928d7 #rm时删除一个或多个容器u003Cu002Fcodeu003Eu003Ccodeu003E9fcu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-5″u003E79u003Cu002Fiu003E6e928d7u003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E13、查看容器详细信息u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003E并不需要进入到容器里面,通过查看详细信息看到了刚才运行的nginx,宿主机curl ip地址访问一下运行情况。u003Cu002Fpu003Eu003Cpreu003Eu003Cbru003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E[root@web1 overlay2]# docker inspect mynginx[ { “Id”: “6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010”, “Created”: “2019-08-07T08:57:48.8u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003E538933Z”, “Path”: “nginx”, “Args”: [ “-g”, “daemon off;”], “State”: { “Status”: “running”, “Running”: true, “Paused”: false, “Restarting”: false, “OOMKilled”: false, “Dead”: false, “Pid”: 1u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-3″u003E199u003Cu002Fiu003E48, “Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003EtCode”: 0, “Error”: “”, “StartedAt”: “2019-08-07T08:57:49.41u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-5″u003E79u003Cu002Fiu003E92u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-3″u003E182u003Cu002Fiu003EZ”, “FinishedAt”: “0001-01-01T00:00:00Z” }, “Image”: “sha256:e445ab08b2be8bu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E178u003Cu002Fiu003E655b714f89e5db9504f67defd5c7408a00bade6u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-5″u003E79u003Cu002Fiu003Ea50d44”, “ResolvConfPath”: “u002Fvaru002Flibu002Fdockeru002Fcontainersu002F6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010u002Fresolv.conf”, “HostnamePath”: “u002Fvaru002Flibu002Fdockeru002Fcontainersu002F6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010u002Fhostname”, “HostsPath”: “u002Fvaru002Flibu002Fdockeru002Fcontainersu002F6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010u002Fhosts”, “LogPath”: “”, “Name”: “u002Fmynginx”, “RestartCount”: 0, “Driver”: “overlay2”, “MountLabel”: “”, “ProcessLabel”: “”, “AppArmorProfile”: “”, “ExecIDs”: , “HostConfig”: { “Binds”: , “ContainerIDFile”: “”, “LogConfig”: { “Type”: “journald”, “Config”: {} }, “NetworkMode”: “default”, “PortBindings”: {}, “RestartPolicy”: { “Name”: “no”, “Mau003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003EmumRetryCount”: 0 }, “AutoRemove”: false, “VolumeDriver”: “”, “VolumesFrom”: , “CapAu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003E”: , “CapDrop”: , “Dns”: , “DnsOptions”: , “DnsSearch”: , “ExtraHosts”: , “GroupAu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003E”: , “IpcMode”: “”, “Cgroup”: “”, “Links”: , “OomScoreAdj”: 0, “PidMode”: “”, “Privileged”: false, “PublishAllPorts”: false, “ReadonlyRootfs”: false, “SecurityOpt”: , “UTSMode”: “”, “UsernsMode”: “”, “ShmSize”: 671088u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003E, “Runtime”: “docker-runc”, “ConsoleSize”: [ 0, 0 ], “Isolation”: “”, “CpuShares”: 0, “Memory”: 0, “NanoCpus”: 0, “CgroupParent”: “”, “BlkioWeight”: 0, “BlkioWeightDevice”: , “BlkioDeviceReadBps”: , “BlkioDeviceWriteBps”: , “BlkioDeviceReadIOps”: , “BlkioDeviceWriteIOps”: , “CpuPeriod”: 0, “CpuQuota”: 0, “CpuRealtimePeriod”: 0, “CpuRealtimeRuntime”: 0, “CpusetCpus”: “”, “CpusetMems”: “”, “Devices”: , “DiskQuota”: 0, “KernelMemory”: 0, “MemoryReservation”: 0, “MemorySwap”: 0, “MemorySwappiness”: -1, “OomKillDisable”: false, “PidsLimit”: 0, “Ulimits”: , “CpuCount”: 0, “CpuPercent”: 0, “IOMau003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003EmumIOps”: 0, “IOMau003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003EmumBandwidth”: 0 }, “GraphDriver”: { “Name”: “overlay2”, “Data”: { “LowerDir”: “u002Fvaru002Flibu002Fdockeru002Foverlay2u002F937u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E140u003Cu002Fiu003Eaf0aee6c43f04c2d7b72e6b5451a44fef92u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-3″u003E141u003Cu002Fiu003E7e8236d9fe01e9u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-4″u003E286u003Cu002Fiu003Ec7a-initu002Fdiff:u002Fvaru002Flibu002Fdockeru002Foverlay2u002Fd8e95505fc3894eb30b48e4b0f48ab5e89d99c09a07cu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-5″u003E79u003Cu002Fiu003Ec0b057c611621e31ebu002Fdiff:u002Fvaru002Flibu002Fdockeru002Foverlay2u002Fb2a6a25974bf1u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E73u003Cu002Fiu003E98b698a2720871u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E157u003Cu002Fiu003E4be3c69a2cd06658bbe838359f3u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E73u003Cu002Fiu003Ea27u002Fdiff:u002Fvaru002Flibu002Fdockeru002Foverlay2u002Fd4610bc89b3ba8ad6ab30ea895fc3a06efff15db493d86ac9bc100e04abbab67u002Fdiff”, “MergedDir”: “u002Fvaru002Flibu002Fdockeru002Foverlay2u002F937u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E140u003Cu002Fiu003Eaf0aee6c43f04c2d7b72e6b5451a44fef92u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-3″u003E141u003Cu002Fiu003E7e8236d9fe01e9u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-4″u003E286u003Cu002Fiu003Ec7au002Fmerged”, “UpperDir”: “u002Fvaru002Flibu002Fdockeru002Foverlay2u002F937u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E140u003Cu002Fiu003Eaf0aee6c43f04c2d7b72e6b5451a44fef92u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-3″u003E141u003Cu002Fiu003E7e8236d9fe01e9u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-4″u003E286u003Cu002Fiu003Ec7au002Fdiff”, “WorkDir”: “u002Fvaru002Flibu002Fdockeru002Foverlay2u002F937u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E140u003Cu002Fiu003Eaf0aee6c43f04c2d7b72e6b5451a44fef92u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-3″u003E141u003Cu002Fiu003E7e8236d9fe01e9u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-4″u003E286u003Cu002Fiu003Ec7au002Fwork” } }, “Mounts”: , “Config”: { “Hostname”: “6fc2d091cfe9”, “Domainname”: “”, “User”: “”, “AttachStdin”: false, “AttachStdout”: false, “AttachStderr”: false, “ExposedPorts”: { “80u002Ftcp”: {} }, “Tty”: true, “OpenStdin”: true, “StdinOnce”: false, “Env”: [ “PATH=u002Fusru002Flocalu002Fsbin:u002Fusru002Flocalu002Fbin:u002Fusru002Fsbin:u002Fusru002Fbin:u002Fsbin:u002Fbin”, “NGINX_VERSION=1.17.2”, “NJS_VERSION=0.3.3”, “PKG_RELEASE=1~buster” ], “Cmd”: [ “nginx”, “-g”, “daemon off;” ], “ArgsEscaped”: true, “Image”: “nginx”, “Volumes”: , “WorkingDir”: “”, “Entrypoint”: , “OnBuild”: , “Labels”: { “maintainer”: “NGINX Docker Maintainers <docker-maint@nginxu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003E>” }, “StopSignal”: “SIGTERM” }, “NetworkSettings”: { “Bridge”: “”, “SandboxID”: “3ece36008fbc5f3f46d3d251cf803cu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E147u003Cu002Fiu003E8ccu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E140u003Cu002Fiu003E32d74a36747e4ed8a115b81df”, “HairpinMode”: false, “LinkLocalIPv6Au003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eress”: “”, “LinkLocalIPv6PrefixLen”: 0, “Ports”: { “80u002Ftcp”: }, “SandboxKey”: “u002Fvaru002Frunu002Fdockeru002Fnetnsu002F3ece36008fbc”, “SecondaryIPAu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eresses”: , “SecondaryIPv6Au003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eresses”: , “EndpointID”: “898de81d97d54d2b60aeb6cc77ef1b4f9b481d1b72f542faa49u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003E94594024eac”, “Gateway”: “172.17.0.1”, “GlobalIPv6Au003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eress”: “”, “GlobalIPv6PrefixLen”: 0, “IPAu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eress”: “172.17.0.3”, #看到ip地址 “IPPrefixLen”: 16, “IPv6Gateway”: “”, “MacAu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eress”: “02:42:ac:11:00:03”, “Networks”: { “bridge”: { “IPAMConfig”: , “Links”: , “Aliases”: , “NetworkID”: “2edae9u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-5″u003E131u003Cu002Fiu003Ee77500a56d251b94ab2cdf0bc86f8df9f2453fa46bf4bab2f7be99f”, “EndpointID”: “898de81d97d54d2b60aeb6cc77ef1b4f9b481d1b72f542faa49u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003E94594024eac”, “Gateway”: “172.17.0.1”, “IPAu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eress”: “172.17.0.3”, “IPPrefixLen”: 16, “IPv6Gateway”: “”, “GlobalIPv6Au003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eress”: “”, “GlobalIPv6PrefixLen”: 0, “MacAu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eress”: “02:42:ac:11:00:03” } } } }][root@web1 overlay2]# curl 172.17.0.1 #访问一下<!DOCTYPE html PUBLIC “-u002Fu002FW3Cu002Fu002FDTD XHTML 1.1u002Fu002FEN” “http:u002Fu002Fu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Ewwwu003Cu002Fiu003E.w3.orgu002FTRu002Fxhtml11u002FDTDu002Fxhtml11.dtd”><html xmlns=”http:u002Fu002Fu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Ewwwu003Cu002Fiu003E.w3.orgu002Fu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-3″u003E199u003Cu002Fiu003E9u002Fxhtml” xml:lang=”en”> <head> <title>Test Page for the Nginx HTTP Server on Fedora<u002Ftitle> <meta http-equiv=”Content-Type” content=”textu002Fhtml; charset=UTF-8″ u002F> <style type=”textu002Fcss”> u002F*<![CDATA[*u002F body { background-color: #fff; color: #000; font-size: 0.9em; font-family: sans-serif,helvetica; margin: 0; pau003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eing: 0; } :link { color: #c00; } :visited { color: #c00; } a:hover { color: #f50; } h1 { text-align: center; margin: 0; pau003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eing: 0.6em 2em 0.4em; background-color: #294172; color: #fff; font-weight: normal; font-size: 1.75em; border-bottom: 2px solid #000; } h1 strong { font-weight: bold; font-size: 1.5em; } h2 { text-align: center; background-color: #3C6EB4; font-size: 1.1em; font-weight: bold; color: #fff; margin: 0; pau003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eing: 0.5em; border-bottom: 2px solid #294172; } hr { display: none; } .content { pau003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eing: 1em 5em; } .alert { border: 2px solid #000; } img { border: 2px solid #fff; pau003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003Eing: 2px; margin: 2px; } a:hover img { border: 2px solid #294172; } .logos { margin: 1em; text-align: center; } u002F*]]>*u002F <u002Fstyle> <u002Fhead> <body> <h1>Welcome to <strong>nginx<u002Fstrong> on Fedora!<u002Fh1> <div class=”content”> <p>This page is used to test the proper operation of the <strong>nginx<u002Fstrong> HTTP server after it has been installed. If you can read this page, it means that the web server installed at this site is working properly.<u002Fp> <div class=”alert”> <h2>Website Administrator<u002Fh2> <div class=”content”> <p>This is the default <tt>index.html<u002Ftt> page that is distributed with <strong>nginx<u002Fstrong> on Fedora. It is located in <tt>u002Fusru002Fshareu002Fnginxu002Fhtml<u002Ftt>.<u002Fp> <p>You should now put your content in a location of your choice and edit the <tt>root<u002Ftt> configuration directive in the <strong>nginx<u002Fstrong> configuration file <tt>u002Fetcu002Fnginxu002Fnginx.conf<u002Ftt>.<u002Fp> <u002Fdiv> <u002Fdiv> <div class=”logos”> <a href=”http:u002Fu002Fnginx.netu002F”><img src=”nginx-logo.png” alt=”[ Powered by nginx ]” width=”121″ height=”32″ u002F><u002Fa> <a href=”http:u002Fu002Ffedoraproject.orgu002F”><img src=”poweredby.png” alt=”[ Powered by Fedora ]” width=”88″ height=”31″ u002F><u002Fa> <u002Fdiv> <u002Fdiv> <u002Fbody><u002Fhtml>[root@web1 overlay2]#u003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch2 toutiao-origin=”h3″u003Eu003Cstrongu003E14、查看日志u003Cu002Fstrongu003Eu003Cu002Fh2u003Eu003Cpu003E-f 挂起这个终端,动态查看日志u003Cu002Fpu003Eu003Cpreu003Eu003Cdivu003Eu003Cpreu003Eu003Cpu003Eu003Ccodeu003E[root@web1 ~]# docker logs -f mynginxu003Cu002Fcodeu003Eu003Cu002Fpu003Eu003Cu002Fpreu003Eu003Cu002Fdivu003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E参考文章:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Ehttps:u002Fu002Fcloud.tencentu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003Eu002Fdeveloperu002Farticleu002F1006116 u003Cu002Fpu003Eu003Cpu003Ehttps:u002Fu002Fyq.aliyunu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003Eu002Farticlesu002F65u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E145u003Cu002Fiu003Eu003Cu002Fpu003Eu003Cpu003Ehttps:u002Fu002Fblog.51ctou003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003Eu002F10085711u002F2068290u003Cu002Fpu003Eu003Cpu003Ehttps:u002Fu002Fu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Ewwwu003Cu002Fiu003E.cnblogsu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003Eu002Fzuu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Engu002Farticlesu002F87u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E174u003Cu002Fiu003E15.htmlu003Cu002Fpu003Eu003Cp class=”pgc-end-source”u003E作者:乐章u003Cu002Fpu003Eu003Cp class=”pgc-end-source”u003E编辑:Java技术栈(id:javastack)u003Cu002Fpu003Eu003Cblockquote toutiao-origin=”span”u003E来源:cnblogsu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-6″u003E.comu003Cu002Fiu003Eu002Fzhangu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Engengu002Fpu002F11236968.htmlu003Cu002Fblockquoteu003Eu003Cp class=”pgc-end-source”u003E-END-u003Cu002Fpu003Eu003Cp class=”pgc-end-source”u003E如果看到这里,说明你喜欢这篇文章,请转发、点赞。u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E微信u003Cu002Fiu003E搜索「web_resource」,u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E关注u003Cu002Fiu003E后回复「进群」或者扫描下方二维码即可进入无广告交流群。u003Cu002Fpu003E”

原文始发于:终于有人把 Docker 讲清楚了,万字详解

主题测试文章,只做测试使用。发布者:逗乐男神i,转转请注明出处:http://www.cxybcw.com/17838.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code