株洲建设网站公司,个人网站建设简历,免费seo视频教学,市场调研分析报告怎么写一、简介 1、了解Docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化#xff0c;以便隔离进程和资源#xff0c;而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中#…一、简介 1、了解Docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化以便隔离进程和资源而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中以更好地在孤立的组之间平衡有冲突的资源使用需求。 与传统虚拟化技术相比它的优势在于
1与宿主机使用同一个内核性能损耗小
2不需要指令级模拟
3不需要即时(Just-in-time)编译
4容器可以在CPU核心的本地运行指令不需要任何专门的解释机制
5避免了准虚拟化和系统调用替换中的复杂性
6轻量级隔离在隔离的同时还提供共享机制以实现容器与宿主机的资源共享。
总结Linux Container是一种轻量级的虚拟化的手段。 Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Container有点像chroot提供了一个拥有自己进程和网络空间的虚拟环境但又有别于虚拟机因为lxc是一种操作系统层次上的资源的虚拟化。 2、LXC与docker什么关系 docker并不是LXC替代品docker底层使用了LXC来实现LXC将linux进程沙盒化使得进程之间相互隔离并且能对各进程资源合理分配。
在LXC的基础之上docker提供了一系列更强大的功能。 3、什么是docker docker是一个开源的应用容器引擎基于go语言开发并遵循了apache2.0协议开源。
docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中然后发布到任何流行的linux服务器也可以实现虚拟化。
容器是完全使用沙箱机制相互之间不会有任何接口类iphone的app并且容器开销极其低。 4、docker官方文档 https://docs.docker.com/ 5、为什么docker越来越受欢迎 官方话语 容器化越来越受欢迎因为容器是 灵活即使是最复杂的应用也可以集装箱化。 轻量级容器利用并共享主机内核。 可互换您可以即时部署更新和升级。 便携式您可以在本地构建部署到云并在任何地方运行。 可扩展您可以增加并自动分发容器副本。 可堆叠您可以垂直和即时堆叠服务。 镜像和容器contalners 通过镜像启动一个容器一个镜像是一个可执行的包其中包括运行应用程序所需要的所有内容包含代码运行时间库、环境变量、和配置文件。
容器是镜像的运行实例当被运行时有镜像状态和用户进程可以使用docker ps 查看。 容器和虚拟机 容器是在linux上本机运行并与其他容器共享主机的内核它运行的一个独立的进程不占用其他任何可执行文件的内存非常轻量。 虚拟机运行的是一个完成的操作系统通过虚拟机管理程序对主机资源进行虚拟访问相比之下需要的资源更多。 6、docker版本 Docker Community EditionCE社区版
Enterprise Edition(EE) 商业版 7、docker和openstack的几项对比 8、容器在内核中支持2种重要技术 docker本质就是宿主机的一个进程docker是通过namespace实现资源隔离通过cgroup实现资源限制通过写时复制技术copy-on-write实现了高效的文件操作类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g 1namespaces 名称空间 2control Group 控制组 cgroup的特点是 cgroup的api以一个伪文件系统的实现方式用户的程序可以通过文件系统实现cgroup的组件管理 cgroup的组件管理操作单元可以细粒度到线程级别另外用户可以创建和销毁cgroup从而实现资源的分配和再利用 所有资源管理的功能都以子系统的方式实现接口统一子任务创建之初与其父任务处于同一个cgroup的控制组 四大功能 资源限制可以对任务使用的资源总额进行限制 优先级分配通过分配的cpu时间片数量以及磁盘IO带宽大小实际上相当于控制了任务运行优先级 资源统计可以统计系统的资源使用量如cpu时长内存用量等 任务控制cgroup可以对任务执行挂起、恢复等操作 9、了解docker三个重要概念 1image镜像 docker镜像就是一个只读模板比如一个镜像可以包含一个完整的centos里面仅安装apache或用户的其他应用镜像可以用来创建docker容器另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像用户甚至可以直接从其他人那里下一个已经做好的镜像来直接使用 2container容器 docker利用容器来运行应用容器是从镜像创建的运行实例它可以被启动开始、停止、删除、每个容器都是互相隔离的保证安全的平台可以把容器看做是要给简易版的linux环境包括root用户权限、镜像空间、用户空间和网络空间等和运行在其中的应用程序 3repostory仓库 仓库是集中存储镜像文件的沧桑registry是仓库主从服务器实际上参考注册服务器上存放着多个仓库每个仓库中又包含了多个镜像每个镜像有不同的标签tag 仓库分为两种公有参考和私有仓库最大的公开仓库是docker Hub存放了数量庞大的镜像供用户下载国内的docker pool这里仓库的概念与Git类似registry可以理解为github这样的托管服务。 10、docker的主要用途 官方就是Bulid 、ship、run any app/any where编译、装载、运行、任何app/在任意地方都能运行。
就是实现了应用的封装、部署、运行的生命周期管理只要在glibc的环境下都可以运行。
运维生成环境中docker化。 发布服务不用担心服务器的运行环境所有的服务器都是自动分配docker自动部署自动安装自动运行 再不用担心其他服务引擎的磁盘问题cpu问题系统问题了 资源利用更出色 自动迁移可以制作镜像迁移使用自定义的镜像即可迁移不会出现什么问题 管理更加方便了 11、docker改变了什么 面向产品产品交付 面向开发简化环境配置 面向测试多版本测试 面向运维环境一致性 面向架构自动化扩容微服务
二、docker架构 1、总体架构 distribution 负责与docker registry交互上传洗澡镜像以及v2 registry 有关的源数据 registry负责docker registry有关的身份认证、镜像查找、镜像验证以及管理registry mirror等交互操作 image 负责与镜像源数据有关的存储、查找镜像层的索引、查找以及镜像tar包有关的导入、导出操作 reference负责存储本地所有镜像的repository和tag名并维护与镜像id之间的映射关系 layer模块负责与镜像层和容器层源数据有关的增删改查并负责将镜像层的增删改查映射到实际存储镜像层文件的graphdriver模块 graghdriver是所有与容器镜像相关操作的执行者 2、docker架构2 如果觉得上面架构图比较乱可以看这个架构 从上图不难看出用户是使用Docker Client与Docker Daemon建立通信并发送请求给后者。 而Docker Daemon作为Docker架构中的主体部分首先提供Server的功能使其可以接受Docker Client的请求而后Engine执行Docker内部的一系列工作每一项工作都是以一个Job的形式的存在。 Job的运行过程中当需要容器镜像时则从Docker Registry中下载镜像并通过镜像管理驱动graphdriver将下载镜像以Graph的形式存储当需要为Docker创建网络环境时通过网络管理驱动networkdriver创建并配置Docker容器网络环境当需要限制Docker容器运行资源或执行用户指令等操作时则通过execdriver来完成。 而libcontainer是一项独立的容器管理包networkdriver以及execdriver都是通过libcontainer来实现具体对容器进行的操作。当执行完运行容器的命令后一个实际的Docker容器就处于运行状态该容器拥有独立的文件系统独立并且安全的运行环境等。 3、docker架构3 再来看看另外一个架构这个个架构就简单清晰指明了server/client交互容器和镜像、数据之间的一些联系。 这个架构图更加清晰了架构 docker daemon就是docker的守护进程即server端可以是远程的也可以是本地的这个不是C/S架构吗客户端Docker client 是通过rest api进行通信。 docker cli 用来管理容器和镜像客户端提供一个只读镜像然后通过镜像可以创建多个容器这些容器可以只是一个RFSRoot file system根文件系统也可以ishi一个包含了用户应用的RFS容器在docker client中只是要给进程两个进程之间互不可见。 用户不能与server直接交互但可以通过与容器这个桥梁来交互由于是操作系统级别的虚拟技术中间的损耗几乎可以不计。 三、docker架构2各个模块的功能待完善 主要的模块有Docker Client、Docker Daemon、Docker Registry、Graph、Driver、libcontainer以及Docker container。 1、docker client docker client 是docker架构中用户用来和docker daemon建立通信的客户端用户使用的可执行文件为docker通过docker命令行工具可以发起众多管理container的请求。 docker client可以通过一下三宗方式和docker daemon建立通信tcp://host:port;unix:path_to_socket;fd://socketfd。docker client可以通过设置命令行flag参数的形式设置安全传输层协议(TLS)的有关参数保证传输的安全性。 docker client发送容器管理请求后由docker daemon接受并处理请求当docker client 接收到返回的请求相应并简单处理后docker client 一次完整的生命周期就结束了当需要继续发送容器管理请求时用户必须再次通过docker可以执行文件创建docker client。 2、docker daemon docker daemon 是docker架构中一个常驻在后台的系统进程功能是接收处理docker client发送的请求。该守护进程在后台启动一个serverserver负载接受docker client发送的请求接受请求后server通过路由与分发调度找到相应的handler来执行请求。 docker daemon启动所使用的可执行文件也为docker与docker client启动所使用的可执行文件docker相同在docker命令执行时通过传入的参数来判别docker daemon与docker client。 docker daemon的架构可以分为docker server、engine、job。daemon 3、docker server docker server在docker架构中时专门服务于docker client的server该server的功能是接受并调度分发docker client发送的请求架构图如下 在Docker的启动过程中通过包gorilla/muxgolang的类库解析创建了一个mux.Router提供请求的路由功能。在Golang中gorilla/mux是一个强大的URL路由器以及调度分发器。该mux.Router中添加了众多的路由项每一个路由项由HTTP请求方法PUT、POST、GET或DELETE、URL、Handler三部分组成。 若Docker Client通过HTTP的形式访问Docker Daemon创建完mux.Router之后Docker将Server的监听地址以及mux.Router作为参数创建一个httpSrvhttp.Server{}最终执行httpSrv.Serve()为请求服务。 在Server的服务过程中Server在listener上接受Docker Client的访问请求并创建一个全新的goroutine来服务该请求。在goroutine中首先读取请求内容然后做解析工作接着找到相应的路由项随后调用相应的Handler来处理该请求最后Handler处理完请求之后回复该请求。 需要注意的是Docker Server的运行在Docker的启动过程中是靠一个名为”serveapi”的job的运行来完成的。原则上Docker Server的运行是众多job中的一个但是为了强调Docker Server的重要性以及为后续job服务的重要特性将该”serveapi”的job单独抽离出来分析理解为Docker Server。 4、engine Engine是Docker架构中的运行引擎同时也Docker运行的核心模块。它扮演Docker container存储仓库的角色并且通过执行job的方式来操纵管理这些容器。 在Engine数据结构的设计与实现过程中有一个handler对象。该handler对象存储的都是关于众多特定job的handler处理访问。举例说明Engine的handler对象中有一项为{“create”: daemon.ContainerCreate,}则说明当名为”create”的job在运行时执行的是daemon.ContainerCreate的handler。 5、job 一个Job可以认为是Docker架构中Engine内部最基本的工作执行单元。Docker可以做的每一项工作都可以抽象为一个job。例如在容器内部运行一个进程这是一个job创建一个新的容器这是一个job从Internet上下载一个文档这是一个job包括之前在Docker Server部分说过的创建Server服务于HTTP的API这也是一个job等等。 Job的设计者把Job设计得与Unix进程相仿。比如说Job有一个名称有参数有环境变量有标准的输入输出有错误处理有返回状态等。 6、docker registry Docker Registry是一个存储容器镜像的仓库。而容器镜像是在容器被创建时被加载用来初始化容器的文件架构与目录。 在Docker的运行过程中Docker Daemon会与Docker Registry通信并实现搜索镜像、下载镜像、上传镜像三个功能这三个功能对应的job名称分别为”search””pull” 与 “push”。 其中在Docker架构中Docker可以使用公有的Docker Registry即大家熟知的Docker Hub如此一来Docker获取容器镜像文件时必须通过互联网访问Docker Hub同时Docker也允许用户构建本地私有的Docker Registry这样可以保证容器镜像的获取在内网完成。 7、Graph Graph在Docker架构中扮演已下载容器镜像的保管者以及已下载容器镜像之间关系的记录者。一方面Graph存储着本地具有版本信息的文件系统镜像另一方面也通过GraphDB记录着所有文件系统镜像彼此之间的关系。 Graph的架构如下 其中GraphDB是一个构建在SQLite之上的小型图数据库实现了节点的命名以及节点之间关联关系的记录。它仅仅实现了大多数图数据库所拥有的一个小的子集但是提供了简单的接口表示节点之间的关系。 同时在Graph的本地目录中关于每一个的容器镜像具体存储的信息有该容器镜像的元数据容器镜像的大小信息以及该容器镜像所代表的具体rootfs。 8、driver Driver是Docker架构中的驱动模块。通过Driver驱动Docker可以实现对Docker容器执行环境的定制。由于Docker运行的生命周期中并非用户所有的操作都是针对Docker容器的管理另外还有关于Docker运行信息的获取Graph的存储与记录等。因此为了将Docker容器的管理从Docker Daemon内部业务逻辑中区分开来设计了Driver层驱动来接管所有这部分请求。 在Docker Driver的实现中可以分为以下三类驱动graphdriver、networkdriver和execdriver。 graphdriver主要用于完成容器镜像的管理包括存储与获取。即当用户需要下载指定的容器镜像时graphdriver将容器镜像存储在本地的指定目录同时当用户需要使用指定的容器镜像来创建容器的rootfs时graphdriver从本地镜像存储目录中获取指定的容器镜像。 在graphdriver的初始化过程之前有4种文件系统或类文件系统在其内部注册它们分别是aufs、btrfs、vfs和devmapper。而Docker在初始化之时通过获取系统环境变量”DOCKER_DRIVER”来提取所使用driver的指定类型。而之后所有的graph操作都使用该driver来执行。 graphdriver的架构如下 networkdriver的用途是完成Docker容器网络环境的配置其中包括Docker启动时为Docker环境创建网桥Docker容器创建时为其创建专属虚拟网卡设备以及为Docker容器分配IP、端口并与宿主机做端口映射设置容器防火墙策略等。networkdriver的架构如下 execdriver作为Docker容器的执行驱动负责创建容器运行命名空间负责容器资源使用的统计与限制负责容器内部进程的真正运行等。在execdriver的实现过程中原先可以使用LXC驱动调用LXC的接口来操纵容器的配置以及生命周期而现在execdriver默认使用native驱动不依赖于LXC。 具体体现在Daemon启动过程中加载的ExecDriverflag参数该参数在配置文件已经被设为”native”。这可以认为是Docker在1.2版本上一个很大的改变或者说Docker实现跨平台的一个先兆。execdriver架构如下 9、libcontainer libcontainer是Docker架构中一个使用Go语言设计实现的库设计初衷是希望该库可以不依靠任何依赖直接访问内核中与容器相关的API。 正是由于libcontainer的存在Docker可以直接调用libcontainer而最终操纵容器的namespace、cgroups、apparmor、网络设备以及防火墙规则等。这一系列操作的完成都不需要依赖LXC或者其他包。libcontainer架构如下
另外libcontainer提供了一整套标准的接口来满足上层对容器管理的需求。或者说libcontainer屏蔽了Docker上层对容器的直接管理。又由于libcontainer使用Go这种跨平台的语言开发实现且本身又可以被上层多种不同的编程语言访问因此很难说未来的Docker就一定会紧紧地和Linux捆绑在一起。而于此同时Microsoft在其著名云计算平台Azure中也添加了对Docker的支持可见Docker的开放程度与业界的火热度。 暂不谈Docker由于libcontainer的功能以及其本身与系统的松耦合特性很有可能会在其他以容器为原型的平台出现同时也很有可能催生出云计算领域全新的项目。 10、docker container Docker containerDocker容器是Docker架构中服务交付的最终体现形式。 Docker按照用户的需求与指令订制相应的Docker容器 用户通过指定容器镜像使得Docker容器可以自定义rootfs等文件系统 用户通过指定计算资源的配额使得Docker容器使用指定的计算资源 用户通过配置网络及其安全策略使得Docker容器拥有独立且安全的网络环境 用户通过指定运行的命令使得Docker容器执行指定的工作。 四、docker简单使用 1、安装
yum install docker -y systemctl enable dockersystemctl start docker
注意启动前应当设置源 vim /usr/lib/systemd/system/docker.service 这里设置阿里的注册阿里云账户号每个用户都有 [rootweb1 ~]# vim /usr/lib/systemd/system/docker.service[Unit]DescriptionDocker Application Container EngineDocumentationhttp://docs.docker.comAfternetwork.targetWantsdocker-storage-setup.serviceRequiresdocker-cleanup.timer[Service]TypenotifyNotifyAccessmainEnvironmentFile-/run/containers/registries.confEnvironmentFile-/etc/sysconfig/dockerEnvironmentFile-/etc/sysconfig/docker-storageEnvironmentFile-/etc/sysconfig/docker-networkEnvironmentGOTRACEBACKcrashEnvironmentDOCKER_HTTP_HOST_COMPAT1EnvironmentPATH/usr/libexec/docker:/usr/bin:/usr/sbinExecStart/usr/bin/dockerd-current --registry-mirrorhttps://rfcod7oz.mirror.aliyuncs.com #这个值可以登陆阿里云账号请参考下图 --add-runtime docker-runc/usr/libexec/docker/docker-runc-current --default-runtimedocker-runc --exec-opt native.cgroupdriversystemd --userland-proxy-path/usr/libexec/docker/docker-proxy-current --init-path/usr/libexec/docker/docker-init-current --seccomp-profile/etc/docker/seccomp.json $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY $REGISTRIESExecReload/bin/kill -s HUP $MAINPIDLimitNOFILE1048576LimitNPROC1048576LimitCOREinfinityTimeoutStartSec0Restarton-abnormalKillModeprocess[Install]WantedBymulti-user.target 2、docker版本查询 [rootweb1 ~]# docker versionClient: Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64 Go version: go1.10.3 Git commit: b2f74b2/1.13.1 Built: Wed May 1 14:55:20 2019 OS/Arch: linux/amd64 Server:Version: 1.13.1 API version: 1.26 (minimum version 1.12)Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64Go version: go1.10.3 Git commit: b2f74b2/1.13.1 Built: Wed May 1 14:55:20 2019 OS/Arch: linux/amd64 Experimental: false 3、搜索下载镜像 docker pull alpine #下载镜像docker search nginx #查看镜像docker pull nginx 4、查看已经下载的镜像 [rootweb1 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEzxg/my_nginx v1 b164f4c07c64 8 days ago 126 MBzxg/my_nginx latest f07837869dfc 8 days ago 126 MBdocker.io/nginx latest e445ab08b2be 2 weeks ago 126 MBdocker.io/alpine latest b7b28af77ffe 3 weeks ago 5.58 MBdocker.io/centos latest 9f38484d220f 4 months ago 202 MB[rootweb1 ~]# 5、导出镜像 docker save nginx /tmp/nginx.tar.gz 6、删除镜像 docker rmi -f nginx 7、导入镜像 docker load /tmp/nginx.tar.gz 8、默认配置文件 vim /usr/lib/systemd/system/docker.service [Unit]DescriptionDocker Application Container EngineDocumentationhttp://docs.docker.comAfternetwork.targetWantsdocker-storage-setup.serviceRequiresdocker-cleanup.timer[Service]TypenotifyNotifyAccessmainEnvironmentFile-/run/containers/registries.confEnvironmentFile-/etc/sysconfig/dockerEnvironmentFile-/etc/sysconfig/docker-storageEnvironmentFile-/etc/sysconfig/docker-networkEnvironmentGOTRACEBACKcrashEnvironmentDOCKER_HTTP_HOST_COMPAT1EnvironmentPATH/usr/libexec/docker:/usr/bin:/usr/sbinExecStart/usr/bin/dockerd-current --registry-mirrorhttps://rfcod7oz.mirror.aliyuncs.com --add-runtime docker-runc/usr/libexec/docker/docker-runc-current --default-runtimedocker-runc --exec-opt native.cgroupdriversystemd --userland-proxy-path/usr/libexec/docker/docker-proxy-current --init-path/usr/libexec/docker/docker-init-current --seccomp-profile/etc/docker/seccomp.json $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY $REGISTRIESExecReload/bin/kill -s HUP $MAINPIDLimitNOFILE1048576LimitNPROC1048576LimitCOREinfinityTimeoutStartSec0Restarton-abnormalKillModeprocess[Install]WantedBymulti-user.target~~~~ 如果更改存储目录就添加 --graph/opt/docker 如果更改DNS——默认采用宿主机的dns --dnsxxxx的方式指定
9、运行hello world 这里用centos镜像echo一个hello word [rootweb1 overlay2]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEzxg/my_nginx v1 b164f4c07c64 8 days ago 126 MBzxg/my_nginx latest f07837869dfc 8 days ago 126 MBdocker.io/nginx latest e445ab08b2be 2 weeks ago 126 MBdocker.io/alpine latest b7b28af77ffe 3 weeks ago 5.58 MBdocker.io/centos latest 9f38484d220f 4 months ago 202 MB[rootweb1 overlay2]# docker run centos echo hello worldhello world[rootweb1 overlay2]# 10、运行一个容器-run [rootweb1 overlay2]# docker run -it alpine sh #运行并进入alpine/ #/ #/ #/ #/ #/ # lsbin etc lib mnt proc run srv tmp vardev home media opt root sbin sys usr/ # cd tmp/tmp # exit 后台运行-d后台运行--name添加一个名字 [rootweb1 overlay2]# docker run -it -d --name test1 alpineac46c019b800d34c37d4f9dcd56c974cb82eca3acf185e5f8f80c8a60075e343[rootweb1 overlay2]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESac46c019b800 alpine /bin/sh 5 seconds ago Up 3 seconds test1[rootweb1 overlay2]# 还有一种-rm参数ctrlc后就删除可以测试环境用生成环境用的少 [rootweb1 overlay2]# docker run -it --rm --name centos nginx^C[rootweb1 overlay2]###另开一个窗口[rootweb1 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3397b96ea7bd nginx nginx -g daemon ... 27 seconds ago Up 25 seconds 80/tcp centosac46c019b800 alpine /bin/sh 4 minutes ago Up 4 minutes test1[rootweb1 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESac46c019b800 alpine /bin/sh 4 minutes ago Up 4 minutes test1[rootweb1 ~]# 11、如何进入容器 三种方法上面已经演示了一种
第一种需要容器本身的pid及util-linux不推荐暂时不演示了
第二种不分配bash终端的一种实施操作不推荐这种操作如果在开一个窗口也能看到操作的指令所有人都能看到。 [rootweb1 overlay2]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9fc796e928d7 nginx sh 2 minutes ago Up 8 seconds 80/tcp mynginxac46c019b800 alpine /bin/sh 12 minutes ago Up 12 minutes test1[rootweb1 overlay2]# docker attach mynginx ##### lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var# exit [rootweb1 overlay2]# docker attach mynginxYou cannot attach to a stopped container, start it first[rootweb1 overlay2]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESac46c019b800 alpine /bin/sh 13 minutes ago Up 13 minutes test1[rootweb1 overlay2]# 第三种exec方式终端时分开的推荐 [rootweb1 overlay2]# docker exec -it mynginx sh#### lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var# exit[rootweb1 overlay2]#[rootweb1 overlay2]#[rootweb1 overlay2]#[rootweb1 overlay2]# docker padocker: pa is not a docker command.See docker --help[rootweb1 overlay2]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6fc2d091cfe9 nginx nginx -g daemon ... 45 seconds ago Up 43 seconds 80/tcp mynginxac46c019b800 alpine /bin/sh 16 minutes ago Up 16 minutes test1 12、查看docker进程及删除容器 上面已经演示 [rootweb1 overlay2]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9fc796e928d7 nginx sh 2 minutes ago Up 8 seconds 80/tcp mynginxac46c019b800 alpine /bin/sh 12 minutes ago Up 12 minutes test1 [rootweb1 overlay2]# docker ps -a #-a :显示所有的容器包括未运行的CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9fc796e928d7 nginx sh 4 minutes ago Exited (0) About a minute ago mynginxac46c019b800 alpine /bin/sh 15 minutes ago Up 15 minutes test13bf234febeaa alpine sh 17 minutes ago Exited (0) 16 minutes ago youthful_lumiereab113c63f0b4 centos echo hello world 31 minutes ago Exited (0) 31 minutes ago infallible_torvaldsb326027dcf42 zxg/my_nginx nginx 8 days ago Exited (0) 8 days ago my_nginx4f1f1ca319f2 centos bash 8 days ago Exited (137) 8 days ago musing_lichterman64b4e32991c7 nginx nginx -g daemon ... 12 days ago Exited (0) 12 days ago mynginx1aee506fe7b5a alpine sh 12 days ago Created infallible_haibt70620c73b9a0 alpine sh 12 days ago Created gallant_volhard7655cbf87bb0 alpine sh 12 days ago Created agitated_brahmagupta33fb949372e8 fce289e99eb9 /hello 12 days ago Created elastic_dijkstra9de47616aea4 fce289e99eb9 /hello 13 days ago Created confident_fermi[rootweb1 overlay2]# docker rm 9fc796e928d7 #rm时删除一个或多个容器9fc796e928d7 13、查看容器详细信息 并不需要进入到容器里面通过查看详细信息看到了刚才运行的nginx宿主机curl ip地址访问一下运行情况。 [rootweb1 overlay2]# docker inspect mynginx[ { Id: 6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010, Created: 2019-08-07T08:57:48.864538933Z, Path: nginx, Args: [ -g, daemon off;], State: { Status: running, Running: true, Paused: false, Restarting: false, OOMKilled: false, Dead: false, Pid: 119948, ExitCode: 0, Error: , StartedAt: 2019-08-07T08:57:49.417992182Z, FinishedAt: 0001-01-01T00:00:00Z }, Image: sha256:e445ab08b2be8b178655b714f89e5db9504f67defd5c7408a00bade679a50d44, ResolvConfPath: /var/lib/docker/containers/6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010/resolv.conf, HostnamePath: /var/lib/docker/containers/6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010/hostname, HostsPath: /var/lib/docker/containers/6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010/hosts, LogPath: , Name: /mynginx, RestartCount: 0, Driver: overlay2, MountLabel: , ProcessLabel: , AppArmorProfile: , ExecIDs: null, HostConfig: { Binds: null, ContainerIDFile: , LogConfig: { Type: journald, Config: {} }, NetworkMode: default, PortBindings: {}, RestartPolicy: { Name: no, MaximumRetryCount: 0 }, AutoRemove: false, VolumeDriver: , VolumesFrom: null, CapAdd: null, CapDrop: null, Dns: [], DnsOptions: [], DnsSearch: [], ExtraHosts: null, GroupAdd: null, IpcMode: , Cgroup: , Links: null, OomScoreAdj: 0, PidMode: , Privileged: false, PublishAllPorts: false, ReadonlyRootfs: false, SecurityOpt: null, UTSMode: , UsernsMode: , ShmSize: 67108864, Runtime: docker-runc, ConsoleSize: [ 0, 0 ], Isolation: , CpuShares: 0, Memory: 0, NanoCpus: 0, CgroupParent: , BlkioWeight: 0, BlkioWeightDevice: null, BlkioDeviceReadBps: null, BlkioDeviceWriteBps: null, BlkioDeviceReadIOps: null, BlkioDeviceWriteIOps: null, 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: null, CpuCount: 0, CpuPercent: 0, IOMaximumIOps: 0, IOMaximumBandwidth: 0 }, GraphDriver: { Name: overlay2, Data: { LowerDir: /var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a-init/diff:/var/lib/docker/overlay2/d8e95505fc3894eb30b48e4b0f48ab5e89d99c09a07c79c0b057c611621e31eb/diff:/var/lib/docker/overlay2/b2a6a25974bf17398b698a27208711574be3c69a2cd06658bbe838359f373a27/diff:/var/lib/docker/overlay2/d4610bc89b3ba8ad6ab30ea895fc3a06efff15db493d86ac9bc100e04abbab67/diff, MergedDir: /var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a/merged, UpperDir: /var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a/diff, WorkDir: /var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a/work } }, Mounts: [], Config: { Hostname: 6fc2d091cfe9, Domainname: , User: , AttachStdin: false, AttachStdout: false, AttachStderr: false, ExposedPorts: { 80/tcp: {} }, Tty: true, OpenStdin: true, StdinOnce: false, Env: [ PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin, NGINX_VERSION1.17.2, NJS_VERSION0.3.3, PKG_RELEASE1~buster ], Cmd: [ nginx, -g, daemon off; ], ArgsEscaped: true, Image: nginx, Volumes: null, WorkingDir: , Entrypoint: null, OnBuild: null, Labels: { maintainer: NGINX Docker Maintainers docker-maintnginx.com }, StopSignal: SIGTERM }, NetworkSettings: { Bridge: , SandboxID: 3ece36008fbc5f3f46d3d251cf803c1478cc14032d74a36747e4ed8a115b81df, HairpinMode: false, LinkLocalIPv6Address: , LinkLocalIPv6PrefixLen: 0, Ports: { 80/tcp: null }, SandboxKey: /var/run/docker/netns/3ece36008fbc, SecondaryIPAddresses: null, SecondaryIPv6Addresses: null, EndpointID: 898de81d97d54d2b60aeb6cc77ef1b4f9b481d1b72f542faa496494594024eac, Gateway: 172.17.0.1, GlobalIPv6Address: , GlobalIPv6PrefixLen: 0, IPAddress: 172.17.0.3, #看到ip地址 IPPrefixLen: 16, IPv6Gateway: , MacAddress: 02:42:ac:11:00:03, Networks: { bridge: { IPAMConfig: null, Links: null, Aliases: null, NetworkID: 2edae9131e77500a56d251b94ab2cdf0bc86f8df9f2453fa46bf4bab2f7be99f, EndpointID: 898de81d97d54d2b60aeb6cc77ef1b4f9b481d1b72f542faa496494594024eac, Gateway: 172.17.0.1, IPAddress: 172.17.0.3, IPPrefixLen: 16, IPv6Gateway: , GlobalIPv6Address: , GlobalIPv6PrefixLen: 0, MacAddress: 02:42:ac:11:00:03 } } } }][rootweb1 overlay2]# curl 172.17.0.1 #访问一下!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.1//EN http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtdhtml xmlnshttp://www.w3.org/1999/xhtml xml:langen head titleTest Page for the Nginx HTTP Server on Fedora/title meta http-equivContent-Type contenttext/html; charsetUTF-8 / style typetext/css /*![CDATA[*/ body { background-color: #fff; color: #000; font-size: 0.9em; font-family: sans-serif,helvetica; margin: 0; padding: 0; } :link { color: #c00; } :visited { color: #c00; } a:hover { color: #f50; } h1 { text-align: center; margin: 0; padding: 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; padding: 0.5em; border-bottom: 2px solid #294172; } hr { display: none; } .content { padding: 1em 5em; } .alert { border: 2px solid #000; } img { border: 2px solid #fff; padding: 2px; margin: 2px; } a:hover img { border: 2px solid #294172; } .logos { margin: 1em; text-align: center; } /*]]*/ /style /head body h1Welcome to strongnginx/strong on Fedora!/h1 div pThis page is used to test the proper operation of the strongnginx/strong 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./p div h2Website Administrator/h2 div pThis is the default ttindex.html/tt page that is distributed with strongnginx/strong on Fedora. It is located in tt/usr/share/nginx/html/tt./p pYou should now put your content in a location of your choice and edit the ttroot/tt configuration directive in the strongnginx/strong configuration file tt/etc/nginx/nginx.conf/tt./p /div /div div a hrefhttp://nginx.net/img srcnginx-logo.png alt[ Powered by nginx ] width121 height32 //a a hrefhttp://fedoraproject.org/img srcpoweredby.png alt[ Powered by Fedora ] width88 height31 //a /div /div /body/html[rootweb1 overlay2]# 14、查看日志 -f 挂起这个终端动态查看日志 [rootweb1 ~]# docker logs -f mynginx