本文主要是介绍Dcoker -- 概览,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1.容器的发展之路
- 1.1 落后的旧时代
- 1.2 你好,VMware!
- 1.3 虚拟机的不足
- 1.4 你好,容器!
- 1.5 Linux容器
- 1.6 你好,Docker!
- 1.7 Windows容器
- 1.8 Windows容器 vs Linux容器
- 1.9 Mac容器现状
- 1.10 Kubernetes
- 1.11 本章小结
- 2.走进Docker
- 2.1 Docker——简介
- 2.2 Docker公司
- 2.3 Docker运行时与编排引擎
- 2.4 Docker开源项目(Moby)
- 2.5 容器生态
- 2.6 开放容器计划
- 2.7 本章小结
- 3.Docker安装
- 3.1 Windows版Docker(DfW)
- 3.2 Mac版Docker(DfM)
- 3.3 在Linux上安装Docker
- 3.4 在Windows Server 2016上安装Docker
- 3.5 Docker引擎(Engine)升级
- 3.5.1 在Ubuntu 16.04上升级Docker CE
- 3.5.2 在Windows Server 2016上升级Docker EE
- 3.6 Docker存储驱动的选择
- 3.6.1 Device Mapper配置
- 3.6.2 让Docker自动设置direct-lvm
- 3.6.3 手动设置Device Mapper的direct-lvm
- 3.7 本章小结
- 4.纵观Docker
- 4.1 运维视角
- 4.1.1 镜像
- 4.1.2 容器
- 4.1.3 连接到运行中的容器
- 4.2 开发视角
- 4.3 本章小结
1.容器的发展之路
1.1 落后的旧时代
大部分应用时运行在服务器之上的。曾经,每个服务器只能运行单一应用。Windows和Linux操作系统都没有相应的技术手段来保证在一台服务器上稳定而安全地同时运行多个应用。
当公司的某个新业务新增的应用上线的时候,因为没人知道新增应用所需要的服务器性能究竟是怎样的,这意味着IT部门需要凭借经验去猜测所购买的服务器型号和价格。最终考虑应用服务客户等种种不确定因素,最终IT部门通常会采购更大、更好的服务器。这种做法导致了大部分服务器长期运行在它们额定负载5%~10%的水平区间之内。这对公司资产和资源是一种极大的浪费!
1.2 你好,VMware!
VMware公司的礼物——虚拟机(VM)。人们终于拥有了一种允许多应用能够稳定、安全地同时运行在一个服务器中的技术。
虚拟机是一种具有划时代意义的技术!业务部门增加应用的时候,无须采购新的服务器。取而代之的是,可以尝试在现有的,并且有空闲性能的服务器上部署新的应用。
1.3 虚拟机的不足
虚拟机的最大缺点就是依赖其专用的操作系统(OS)。OS会占用额外的CPU、RAM和存储,这些资源本可以用于运行更多的应用。每个OS都需要补丁和监控。另外在某些情况下,OS需要许可证才能运行。这对运营成本(OPEX)和资金性支出(CAPEX)都是一种浪费。
虚拟机启动通常比较慢,并且可移植性比较差——虚拟机在不同的虚拟机管理器(Hypervisor)或者云平台之间的迁移要远比想象中困难。
1.4 你好,容器!
容器模型其实跟虚拟机模型相似,其主要的区别在于,容器的运行不会独占操作系统。实际上,运行在相同宿主机上的容器是共享一个操作系统的,这样就能够节省大量的系统资源,如CPU,RAM以及存储器。容器同时还能节省大量花费在许可证上的开销,以及为OS打补丁等运维成本。最终结果就是,容器节省了维护成本和资金成本。
同时容器还具有启动快和便于迁移等优势。将容器从笔记本电脑迁移代云上,之后在迁移到数据中心的虚拟机或者物理机之上,都是和简单的事情。
1.5 Linux容器
现代的容器技术起源于Linux,是很多人长期努力持续贡献的产物。举个例子子,Google LLC 就贡献了很多容器相关的技术到Linux内核当中。没有大家的贡献,就没有现在的容器。
近几年来,对容器发展影响比较大的技术包括内核命名空间(Kernel Namespace)、控制组(Control Group)、联合文件系统(Union File System),当然更少不了Docker。
1.6 你好,Docker!
不得不感慨Docker确实是使Linux容器技术得到广泛应用的技术。换个角度来说,是Docker这家公司使容器变得简单。
1.7 Windows容器
实现容器所需的核心Windows内核技术被称为Windows容器(Windows Container)。用户空间是通过Docker来完成与Windows容器之间交互的,这使得Docker在Windows平台上的使用体验跟在Linux上几乎一致。那些熟悉Linux Docker工具的研发人员和系统管理员,在切换到Windows容器之后也会很快适应。
1.8 Windows容器 vs Linux容器
运行的容器共享宿主机的内核,理解这一点是很重要的。这意味着一个基于Windows的容器化应用在Linux主机上是无法运行的。也可以简单地理解为Windows容器需要运行在Windows宿主机之上,Linux容器(Linux Container)需要运行在Linux宿主机上。但是,实际场景要比这复杂得多…
1.9 Mac容器现状
迄今为止,还没有出现Mac容器(Mac Container)
但是可以在Mac系统上使用Docker for Mac来运行Linux容器。这是通过在Mac上启动一个轻量级Linux VM,然后在其中无缝地运行Linux容器来实现的。这种方式在开发人员中很流行,因为这样可以在Mac上很容易地开发和测试Linux容器
1.10 Kubernetes
Kubernetes是谷歌的一个开源项目,并且开源之后迅速成为容器编排领域的领头羊。有一种很流行的说法:Kubernetes是保证容器部署和运行的软件体系中很重要的一部分
Kubernetes已经采用Docker作为其默认容器运行时(container runtime),包括Kubernetes 启动 和停止容器,以及镜像的拉取等。但是,Kubernetes也提供了一个可插拔的容器运行时接口CRI。CRI能够帮助Kubernetes实现将运行时环境从Docker快速替换为containerd。
关于Kubernetes,现在需要了解的就是——Kubernetes是Docker之上的一个平台,现在采用Docker实现其底层容器相关的操作。
1.11 本章小结
再过去,每当业务部门想运行新的应用时,IT部门就需要购买新的服务器来满足需求。接下来VMware的出现终结了这个时代,使得IT部门可以更高效地利用现有的和新的机器资源,产生更大的价值。但即使VMware和虚拟机模型这么优秀的技术,也存在其缺点。在VMware和Hypervisor成功之后,出现了更高效并且更轻量级的虚拟化技术——容器。但是容器技术在发展初期是很难应用于生产环境的,并且只在拥有Linux内核工程师的Web巨头的数据中心内才能看到实际应用。接下来Docker公司出现了,突然之间容器虚拟化技术开始被大众广泛使用。
2.走进Docker
当有人提到“Docker”时,可能是指如下3种概念之一
●Docker公司
●Docker的容器运行时和编排引擎
●Docker开源项目
2.1 Docker——简介
Docker是一种运行于Linux和Windows上的软件,用于创建、管理和编排容器
下面针对每个概念进行详细介绍。此外还包含对容器生态的探讨,以及对开放容器计划(Open Container Initiative,OCI)的介绍
2.2 Docker公司
Docker公司位于旧金山,由法裔美籍开发者和企业家Solumon Hykes创立,其标志如下所示。
有意思的是,Docker公司起初是一家名为dotCloud的平台即服务(Platform-as-a-Service,PaaS)提供商。底层技术上,dotCloud平台利用了Linux容器技术。为了方便创建和管理这些容器,dotCloud开发了一套内部工具,之后被命名为“Docker”。Docker就是这样诞生的!
2013年,dotCloud的PaaS业务并不景气,公司需要寻求新的突破。于是他们聘请了Ben Golub作为新的CEO,将公司重新命名为“Docker”,放弃dotCloud PaaS平台,怀揣着“将Docker和容器技术推向全世界”的使命,开启了一段新的征程。
如今Docker公司被普遍认为是一家创新型科技公司,据说其市场价值约为10亿美元。
注:“Docker”一词来自英国口语,意为码头工人(Dock Worker),即从船上装卸货物的人
2.3 Docker运行时与编排引擎
多数技术人员在谈到Docker时,主要是指Docker引擎
Docker引擎是用于运行和编排容器的基础设施工具。有VMware管理经验的读者可以将其类比为ESXi。ESXi是运行虚拟机的核心管理程序,而Docker引擎是运行容器的核心容器运行时
其他Docker公司或第三方的产品都是围绕Docker引擎进行开发和集成的。如下图所示,Docker引擎位于中心,其他产品基于Docker引擎的核心功能进行集成
Docker引擎可以从Docker网站下载,也可以基于GitHub上的源码进行构建。无论是开源版本还是商业版本,都有Linux和Windows版本
2.4 Docker开源项目(Moby)
“Docker”一词也会用于只指代开源Docker项目。其中包含一系列可以从Docker官网下载和安装的工具,比如Docker服务端和Docker客户端。不过,该项目在2017年于Austin举办的DockerCon上正式命名为Moby项目。由于这次改名,GitHub上的docker/docker库也被转译到了moby/moby,并且拥有了项目自己的Logo,如下图所示
多数项目及其工具都是基于Golang编写的,这是谷歌退出的一种新的系统级编程语言,又叫Go语言。
Moby项目以及更官方的Docker运动一时间掀起了一波热潮。GitHub上已经有数以千计的提交申请(pull request),以及数以万计的基于容器化技术的项目了,更不用说Docker Hub上数十亿的镜像下载。Moby项目已经给软件产业带来了翻天覆地的变化。
这并非妄想,Docker已经得到了广泛的应用!
2.5 容器生态
Docker公司的一个核心哲学通常被称为“含电池,但可拆卸”(Batteries included but removable)
意思是许多Docker内置的组件都可以替换为第三方的组件,网络技术栈就是一个很好的例子。Docker核心产品内置有网络解决方案。但是网络技术栈是可插拔的,这意味着Docker内置的网络方案可以被替换为第三方的方案。许多人都会这样使用。
早期的时候,经常出现第三方插件比Docker提供的内内置组件更好的情况。然而这会对Docker公司的商业模式造成冲击。毕竟,Docker公司需要依靠盈利来维持基业长青。因此,“内置的电池”变得越来越好用了。这也导致了生态内部的紧张关系和竞争的加剧。
简单来说,Docker内置的“电池”仍然是可插拔的,然而与来源不需要将它们移除了。
尽管如此,容器生态在一种良性的合作与竞争的平衡中还是以繁荣发展。在谈及容器生态时,人们经常使用到诸如“co-opetiton”与“frenemy”这样的字眼。这是一个好现象!因为良性的竞争是创新之母。
2.6 开放容器计划
如果不谈及开放容器计划(The Open Container Initiative,OCI)的话,对Docker和容器生态的探讨总是不完整的。下图为OCI的Logo。
OCI是一个旨在对容器基础架构中的基础组件(如镜像格式与容器运行时)进行标准化的管理委员会
一个名为CoreOS的公司不喜欢Docker的某些行事方式。一次它就创建了一个新的开源标准,称作“appc”,该标准涉及注入镜像格式和容器运行时等方面。此外它还开发了一个名为rkt(发音“rocket”)的实现
两个处于竞争状态的标准将容器生态置于一种尴尬的境地
考虑不论是对用户还是公司本身都不是一件好事这一点,所有相关方都尽力用成熟的方式的处理此事,共同成立OCI——一个旨在管理标准的轻量级的、敏捷型的委员会
OCI已经发布了两份规范(标准):镜像规范和运行时规范
2.7 本章小结
本章介绍了Docker公司,这是一家位于旧金山的立志于变更软件行业的科技创新公司。可以说他们是现如今容器革命的先行者和推动者。但是现在已经形成了一个由作者和竞争者组成的大型生态
Docker项目是开源的,其上游源码位于GitHub的moby/moby库
开放容器计划(OCI)在容器运行时格式和容器镜像格式的标准化方面发挥了重要作用
3.Docker安装
安装Docker的场景和方式简直是数不胜数
本章主要介绍几种重要的安装方式
●桌面安装
●Windows版Docker(Docker for Windows)
●Mac版Docekr(Docker for Mac)
●服务器安装
●Linux
●Windows Server 2016
●Docekr引擎升级
●Docker存储驱动的选择
后面也会涉及Docker引擎的升级以及如何选择合适的存储驱动等内容
3.1 Windows版Docker(DfW)
Windows版Docker是由Docker公司提供的一个产品。这意味着它易于下载,并且有一个很灵活的安装器(installer)。Windows版Docker需要运行在一个安装64位Windows 10 操作系统的计算机上,通过启动一个独立的引擎来提供Docker环境
Windows版Docker是一个社区版本(Community Edition,CE)的应用,并不是为生产环境设计的
Windows版Docker在某些版本特性上可能是延后支持的。这是因为Docker公司对产品的定位是稳定性第一,新特性其次
以上3点被添加到Windows版Docker这个安装快捷简单,但并不支持生产环境部署的产品当中
Windows版Docker的环境有以下要求:
Windows 10 Pro / Enterprise / Education (1607 Anniversary Update、Build 14393或者更新的版本)
Windows必须是64位的版本
需要启用Windows操作系统中的Hyper-V和容器特性
接下来的步骤会家安设读者的计算机已经开启了BIOS设置中的硬件虚拟机化支持。如果没有开启,读者需要在机器上执行下面的步骤
首先,需要确认在Windows 10操作系统中,Hyper-V和容器特性已安装并且开启
(1)右键单击Windows开始按钮并选择“应用和功能”页面
(2)单击“程序和功能”链接
(3)单击“启用或关闭Windows功能”
(4)确认Hyper-V和容器复选框已经被勾选,并单击确定按钮
按照上述步骤操作完成后,会安装并开启Hyper-V和容器特性,如下图所示。读者需要重启操作系统。
开启Hyper-V和容器特性
其中,容器特性只有在summer 2016 Windows 10 Anniversary Update (build 14393)版本或更高版本上才能开启
完成Hyper-V和容器特性的安装并重启机器之后,就可以安装Windows版
Docker了。
(1)访问Docker的下载页面,并单击其中的Download for Windows
按钮
(2)单击后会跳转到Docker商店,需要读者使用自己的Docker ID 进行登录
(3)单击任意Get Docker下载链接。Docker for Windows分为稳定版(Stable)和抢鲜版(Edge)。抢鲜版当中包含一些新特性,但是可能不够稳定。单击下载链接后,会将名为Docker for
windows Installer.exe的安装包下载到默认下载目录
(4)找到上一步下载的安装包并运行即可
以管理员身份运行安装向导,并按照提示一步一步完成整个安装过程。安装完成后Docker会作为系统服务自动启动,并且在Windows的通知栏看到Docker的大鲸鱼图标
恭喜!到目前为止已经成功完成Windows版Docker的安装
打开命令行或者PowerShell界面,并尝试执行下面的命令
注意观察命令输出内容,其中Server部分中的OS/Arch属性展示了当前的操作系统是linux/amd64。这是因为在默认安装方式中,Docker daemon是运行在Hyper-V虚拟机中的一个轻量级Linux上的。这种情况下,读者只能在Windows版Docker上运行Linux容器
如果读者想要运行原生Windows容器(Native Windows Container),可以右击Windows通知栏中的Docker鲸鱼图标,并选择“切换到Windows容器”。使用下面的命令也可以完成切换(进入\Program Files\Docker\Docker目录下执行)
C:\Program Files\Docker\Docker> .dockercli -SwitchDaemon
如果已经在开启了Windows容器特性,则只需要花费数秒就能完成切换。一旦切换完成,在命令行中执行docker version指令的输出内容如下
可以看到,现在Server版本信息变成了windows/amd64。这意味着Docker daemon运行在原生Windows内核上,并且只能运行Windows容器了
同时也可以发现,Experimental这个属性的是true。这表示当前运行的Docker版本是实验版本。本章前面提到,Docker for Windows有两个版本:稳定版和抢鲜版。在本书的编写的过程中,Windows容器是抢鲜版中的一个实验特性
读者可以通过运行dockercli -Version命令来查看当前的Docker版本。dockercli命令在C:\Program Files\Docker\Docker目录下
下面展示了一些常用的能够正常执行的Docker的命令
Windows版Docker包括Docker引擎(客户端和daemon)、Docker Compose、Docker Machine以及Docker Notary命令行。通过下列命令确认各个模块已经成功安装
3.2 Mac版Docker(DfM)
略
3.3 在Linux上安装Docker
下面的例子使用wget命令来运行一个Shell脚本,完成Docker CE的安装。更多其他在Linux上安装Docker的方式,可以打开Docker主页面,单击页面中Get Started按钮来获取
注:
在开始下面的步骤之前,要确认系统升级到最新的包,并且打了相应的安全补丁
(1)在Linux机器上打开一个新的Shell
(2)使用wget从https:/get.docker.com获取并运行Docker安装脚本,然后采用Shell中管道(pipe)的方式来执行这个脚本
(3)最好通过非root用户来使用Docker。这时需要添加非root用户到本地Docker Unix组当中。下面的命令展示了如何把名为npoulton的用户添加到Docker组中,以及如何确认操作是否执行成功。
如果当前登录用户就是要添加到docker组中的用户的话,则需要重新登录,组权限设置才会生效
恭喜!Docker已经在读者的Linux机器上安装成功,运行命令来确认安装结果。
3.4 在Windows Server 2016上安装Docker
略
3.5 Docker引擎(Engine)升级
升级Docker引擎(Engine)是一项重要的任务,尤其是生产环境
升级Docker引擎的关键步骤如下:
需要重视升级操作的每个前置条件,包括确保容器配置了正确的重启策略;在Swarm Mode模式下使用服务时,需要确保正确配置了draining node。当完成了上述前置条件的检查之后,可以通过如下步骤完成升级操作
(1) 停止Docker守护程序
(2) 移除旧版本Docker
(3) 安装新版本Docker
(4) 配置新版本的Docker为开机自启动
(5) 确保容器重启成功
不同版本的Linux在升级Docker的时候,命令可能略有区别。
3.5.1 在Ubuntu 16.04上升级Docker CE
假设你已经完成了全部的升级前置步骤并且Docker处于可以升级的状态,同时还可以用root用户身份运行升级命令。以root用户运行升级命令是不推荐,但是可以简化示例。
(1)更新APT包列表
(2)卸载当前Docker
(3)安装新版本Docker
有不同版本的Docker可供选择,并且有多种方式可以安装Docker。无论是Docker CE还是Docker EE,都有不止一种安装方式。例如,Docker CE可以通过apt或者deb包管理方式进行安装,也可以使用Docker官网上的脚本
接下来的命令会使用get.docker.com的脚本完成最新版本Docker CE的安装和配置
(4)将Docker配置为开机自启动
此时想重启自己的节点。这样可以确保刚安装的Docker不会对系统开机有任何的影响
(5)检查并确保每一个容器和服务都已经重启成功
3.5.2 在Windows Server 2016上升级Docker EE
略
3.6 Docker存储驱动的选择
每个Docker容器都有一个本地存储空间,用于爆粗你层叠的镜像层(Image Layer)以及挂载的容器文件系统。默认情况下,容器的所有读写操作都发生在其镜像层上或挂载的文件系统中,所以存储是每个容器的性能和稳定性不可或缺的一个环节
以往,本地存储是通过存储驱动(Storge Driver)进行管理的,有时候也被称为Graph Driver或者GraphDriver。虽然存储驱动在上层抽象设计中都采用了栈式镜像层存储和写时赋值(Copy-on-Write)的设计思想,但是Docker在Linux底层支持几种不同的存储驱动的具体实现,没一点实现方式都采用不同方法实现了镜像层和写时复制。虽然底层实现的差异不影响用户与Docker之间的交互,但是对Docker的性能和稳定性至关重要
3.6.1 Device Mapper配置
3.6.2 让Docker自动设置direct-lvm
下面的步骤会将Docker配置存储驱动为Device Mapper,并使用direct-lvm模式
3.6.3 手动设置Device Mapper的direct-lvm
3.7 本章小结
Docker在Linux和Windows中都是可用的,并且分为社区版(CE)和企业版(EE)。在本章中,主要向读者介绍了在Windows10、Mac OS X、Linux以及Windows Server 2016下的几种安装Docker的方式
本章还介绍了如何在Ubuntu 16.04和Windows Server 2016环境中升级Docker引擎,这也是两种常见的配置场景
还可以了解正确的存储驱动对于在Linux生产环境中使用Docker非常重要
4.纵观Docker
再继续深入研究Docker之前,对Docker进行一个整体介绍
两部分内容:
运维(Ops)视角
开发(Dev)视角
在运维视角中,主要包括下载镜像、运行新的容器、登录新容器、在容器内运行命令,以及销毁容器
在开发视角中,更多关注与应用相关的内容。下面会从GitHub拉取一些应用代码,解释其中的Dockerfile,将应用容器化,并在容器中运行它们
从整体上理解Docker究竟是什么,以及主要组件之间是如何相互配合的。
4.1 运维视角
安装Docker的时候,会涉及两个主要组件:Docker客户端和Docker daemon(有时也被称为“服务端”或者“引擎”)
daemon实现了Docker引擎的API
使用Linux默认安装时,客户端与daemon之间的通信是通过本地IPC/UNIX Socket完成的(/var/run/docker.sock);在Windows上是通过名为npipe:./pipe/docker_engine的管道(pipe)完成的。读者可以使用docker version命令来检测客户端和服务端是否都已经成功运行,并且可以互相通信
如果读者能成功获取来自客户端和服务器的响应,那么可以继续后面的操作。
4.1.1 镜像
将Docker镜像理解为一个包含了OS文件系统和应用的对象会很有帮助。实际操作后,就会认为与虚拟机模板类似。虚拟机模板本质上是处于关机状态的虚拟机。在Docker世界中,镜像实际上等价于未运行的容器。对于开发者来说,可以将镜像比作是类(Class)
如果运行命令环境是刚完成Docker安装的主机,或者是Play With Docker,那么Docker主机中应当没有任何镜像,命令输出内容会如上所示
在Docker主机上获取镜像的操作被称为拉取(pulling)。如果使用Linux,那么会拉取ubuntu:latest镜像;如果使用Windows,则会拉取microsoft/powershell:nanoserver镜像
镜像包含了基础操作系统,以及应用程序运行所需要的代码和依赖包。盖菜拉取的ubuntu镜像有一个精简版的Ubuntu Linux文件系统,其中包含部分Ubuntu常用工具。而Windows示例中拉取的microsoft/powershell镜像,则包含了带有PoweShell的Windows Nano Server操作系统
如果拉取了诸如nginx或者microsoft/iis这样的应用容器,则读者会的到一个包含操作系统的镜像,并且在镜像中还包括了运行Nginx或IIS所需的代码
重要的是,Docker的每个镜像都有自己的唯一ID。用户可以通过引用镜像的ID或者名称来使用镜像。如果用户选择使用镜像ID,通常只需要输入ID开头的几个字符即可——因为ID是唯一的,Docker知道用户想引用的具体镜像是哪个
4.1.2 容器
此时,已经有一个拉取到本地的镜像,可以使用Docker container run命令从镜像来启动容器
仔细观察上面命令的输出内容,会注意到每个实例的提示符都发生了变化。这是因为 -it参数会将Shell切换到容器终端——现在已经位于容器内部了!
接下来分析一下docker container run命令。docker container run告诉Docker daemon启动新的容器。其中-it参数告诉Docker开启容器的叫交互模式并告诉读者当前的Shell连接到容器终端。接下来,命令告诉Docker,用户想基于ubuntu:latest镜像启动容器(如果用户使用Windows,则是基于microsoft/powershell:nanoserver镜像)。最后,命令告诉Docker,用户想要在容器内部运行哪个进程。对于Linux示例来说运行Bash Shell,对于Windows示例来说则是运行PowerShell
在容器内部运行ps命令查看当前正在运行的全部进程
Linux容器中仅包含两个进程
PID 1:代表/bin/bash进程,该进程是通过docker container run命令来通知容器运行的
PID 9:代表ps -elf进程,查看当前运行中进程所使用的命令/程序
命令输出中展示的ps -elf进程存在一定的误导,因为这个程序在ps命令退出后就结束了。这意味着容器内长期运行的进程其实只有/bin/bash
Windows容器运行中的进程会更多,这是由Windows操作系统工作方式决定的。虽然Windows容器中的进程比Linux容器要多,但与常见的Windows服务器相比,其进程数量确实明显偏少的
现在返回到Docker主机的Shell提示符,再次运行ps命令
可以看到与容器相比,Docker主机中运行的进程数要多得多。Windows容器中运行的进程要远少于Windows主机,Linux容器中的进程数也远少于Linux主机
在之前的步骤当中,是使用Ctrl-PQ组合键来退出容器的。在容器内部使用该操作可以退出当前容器,但不会杀死容器进程。读者可以通过docker container ls命令查看系统内全部处于运行状态的容器
上述的输出显示只有一个运行中的容器。这就是前面实例中创建的那个容器。输出中有该容器,证明了容器在退出后依然运行的。可以看到这个进程是7min之前创建的,并且一直在运行
4.1.3 连接到运行中的容器
执行docker container exec命令,可以将Shell连接到一个运行中的容器终端。因为之前示例中的容器仍在运行,所以下面的示例会创建到该容器的新连接
再次使用Ctrl-PQ组合键退出容器
Shell提示符应当退回到Docekr主机中
再次运行docker container ls命令来确认容器仍处于运行状态
4.2 开发视角
容器即应用!
分析一份应用代码中的Dockerfile并将其容器化,最终以容器的方式运行。
进入到仓库文件目录之下,查看其内容
对于Windows示例,读者需要cd到dotnet-docker-aspnetapp目录当中
Linux的示例是一个简单的Node.js Web应用。Windows示例是一个简单的ASP.NET Web应用
每个仓库中都包含一个名为Dockerfile的文件。Dockerfile是一个纯文本文件,其中描述了如何将应用构建到Docker镜像当中
查看Dockerfile的全部内容
Dockerfile的每一行都代表一个可用于构建镜像的指令即可
使用docker image build命令,根据Dockerfile中的指令来创建新的镜像。示例中新建的Docker镜像名为test:latest
一定要在包含应用代码和Dockerfile的目录下执行这些命令
一旦构建完成,就可以确认主机上是否存在test:latest镜像
现在已经拥有一个新的Docker镜像,其中包含了应用程序
从镜像启动容器,并测试应用
打开Web浏览器,在地址栏中输入容器运行所在的docker主机的DNS名称或者IP地址,并在后面加上端口号8080.然后就能看见下面的Web页面
Windows代码如下
打开Web浏览器,在地址栏中输入容器运行所在的docker主机的DNS名称或者IP地址,并在后面加上端口号8080.然后就能看见下面的Web页面
现在已经成功将应用代码构建到了Docker镜像当中,然后以容器的方式启动该镜像,这个过程就叫做“应用容器化”
4.3 本章小结
在运维部分,我们下载了Docker镜像,启动容器并且登录到容器内部执行相应的命令,最后停止容器并删除
在开发部分,我们完成了简单应用的容器化过程:从GitHub拉取应用源代码,并且通过Dockerfile中的指令,将应用代码构建到镜像之中。接着运行了该容器化应用
容器技术部分会详细的介绍镜像与容器的相关细节
这篇关于Dcoker -- 概览的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!