容器技术基础(三)——Docker实践|学习笔记

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 快速学习容器技术基础(三)——Docker实践

开发者学堂课程【现代应用容器技术快速入门:快速学习容器技术基础(三)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/830

容器技术基础(三)——Docker实践

------马永亮


目录

一、安装Docker CE

二、使用Docker

三、Volume types

四、bridge网络

五、跨节点容器空间通信

六、设置容器跨主机通信

七、基础网络选项


一、安装Docker CE

●支持的平台

image.png

在最初的时候,有Docker cloud公司更名为Docker以后,对应的发行版也在随后便成了两种分支,一个是Docker EE,一个是Docker CE,这里的C指的就是叫community education及社区版,在学习和使用的时候可以采用DRC的版本,Docker现在的自己的公司也在专心维护剩余的产品,也就是Docker C了。要想安装DRC,并且测试实践使用DRC,那首先得有一台主机,这台主机最好是一个Linux系统,不过目前来讲,DRC所能够支持到的平台分为desktop和server两大分类,而对于desktop来说,它大体上又有Mac和和Windows的两个不同的版本,并且对应的系统平台架构也有所不同,这里需要注意一下,对色板而言,这里主要支持的是各种各样的Linux的发行版,官方支持的主流的Linux发行,包括cent OS baby federal,SDN和open to这样几个主流版本,而且考虑到这里的rest bn本身就是为嵌入式的小平台设定的这个发行版,所以它主要支持的是arm平台。而对cent OS也好,Open to也好,对于X86的平台以及AR这样的平台可能都能知道,甚至对ubuntu而言,针对于arm的发行也能够知道。其实就是一个使用vmware所构建的虚拟机,然后在系统上现在准备的环境就是ubuntu20这种环境是X86_64的系统平台好,于是接下来就尝试着在该平台上去安装DRC即可,安装文档是:https://docs.docker.com/engine/install/

安装步骤:

image.png

表示支持的系统版本和安装过程和安装步骤,包括更新系统所依赖到的一些基本条件,而后去安装到docker官方的JPGPK包仓库,最后去安装DRC的Docker,大概分这样几个步骤,为了能够使得速度更快更便捷,可以打开阿里云的镜像站点,经有阿里云的镜像站点来执行相应的安装操作找到容器,这样比较容易找到这ce的镜像仓库,安装方法或者配置方法在这也是可以给到的。镜像仓库安装方法或者配置方法,这也能看到配置方法,只不过对于步骤来讲,只提到了ubuntu的14.04和16.04这样的版本,但对于20的版本同样是实用的,有对应的仓库都是存在的,首先第一步,去执行下载更新,不过要注意的是,这里的无版图系统直接以管理员用户登录公司,这里就不用带上速度的命令,如果是普通用户登录的话,那需要带上速度命令。其实这个系统此前做过更新,因而这并不需要,或者更新过程一个人非常快了,第二步,尝试着安装依赖到的这个安装包,安装完成之后,再接着去安装GP证书,这个步骤曾经提到过,基于阿里的镜像应该会快一点,接着是写入软件园信息。在这里的配置上,能看到他会使用l sb release 来获取到对应的系统的发行版,所以这会适配到当前系统合适的对应的镜像仓库或者有问题的版本上去。再接着执行安装操作就可以了。首先先去更新一下仓库信息,而后去安装DRC即可,于是执行update2去install doctor。

image.png

Docker完成安装完以后,第一步要去启动docker的服务,直接执行system Docker starch即可。执行system CT l start docker呢,接着system sneakers项目,DR已经正常启动起来,处于running状态,接下来就可以使用Docker令行客户端使用docker,安装完以后会生成一个名为docker的客户端,实际上也支持很多子命令,其中可以分为:管理类的命令叫management commands,还有其他的单个可以用的命令。如果要使用docker,像查看docker对应的word的版本的话就可以。这里安装的是Docker安静的community版本,当前是20.10.7的版本,也就是1.20。对应的这个server和client各自不同的版本,客户端版本是2010,那服务端NG的版本也是2010,因为是来自于同一个程序包,而且是本地直接通过本地接入的。考虑到Docker的系统架构的话,客户端与服务端之间是通过socket套接字通信的,Docker默认启动以后它所监听的socket。事实就是一个只能通过本地通信的unix filed或者称为socket file的这样一个一个一个监听的接口,因此客户端与服务端之间只能通过本地接口通信,无法远程连接,除非我们去重新配置docker。他的所有配置文件或者doc的配置文件将位于etc doc目录下,通过刚才安装的这个文件是json格式的,文件名叫的Jason,它里边就是建制格式所配置的,或者要遵循json语法的一些配置项。这些配置项可以通过docker的官方文档去搜索,去了解每个配置项的意义和作用,包括使用私有的镜像仓库,而不是有docker hub的官方仓库的时候,就是更之前提到的那个right。去的时候等等都可以在这个目录下建立一个叫做的demo.jason的文件来尝试实现。而docker所监听的那个socket文件,它默认位于VAR run目录下,应该就叫docker.sock。当然也可以尝试使用docker info命令来了解docker所在这台主机和Dr engine自身的一些相关信息。比如对课NG来讲,它会显示当前server上以的容器数量一共有多少,处于运行状态暂停状态,停止状态的有多少,本地有多少个镜像文件,已经存储了多少个镜像文件等等,但还包括存储驱动程序。镜像的那种分层叠加展评机制有适配到,或者要使用特定的存储驱动来完成它支持的,比如像Diver the device map,还有over overlay two,还有AFS等等,那这里能看到ubuntu20的系统版本上,对应的使用的是overlay two这么一个存储驱动,后面还有cgroup driver,用的是cgroups,还有logging driver就是日志存储,它使用json格式的文件。

而现在支持各种各样的插件,比如存储卷只支持本地的,没有安装支持其他外界的存储卷,所以也就意味着容器如果想脱离容器自己的那个文件系统树想持久存储数据的话,只能存储在宿主机本地。

这对于网络而言,所知的插件包括,Bridge host IP v la mak v la now overlay等等,这就是所谓的叠加网络后面日志驱动程序,或者说他的插件还是比较多的,支持将日志输出保存在多种不同的日志服务系统之上。现在来看其他几个命令,其中包括有几个重要的对象类型首先有container,就是专门实现容器管理的,所以在管理类命令当中,所有1content作为二级命令的更多的子命令都是用来做容器的增、删、改、查操作的,还有image就是镜像的管理操作,Network是跟网络管理相关的增、删、改、查,还有一个就是volume存储却除此之外它还有其他的一些常见的管理的命令。而且doctor历史上这个命令并没有分组,并没有管理命令这么一说。他们各个管理操作都是单个命令,所以很多的操作,无论是容器镜像网络或者是存储卷,大体上他们都有单独可以直接使用的命令,比如镜像、列举、删除相关的,专门用来删除镜像的,如果要查看镜像的话,就需要用到image这样的命令,所以这样的命令会交叉进行使用。

使用Docker

下图当中所给出来的事例其实也是单独使用的命令来实现的。

image.png

大多数的docker容器操作时所用到的,比如docker run这是启动容器的创建并启动容器,docker create就是创建容器,创建完以后要想启动还可以使用docker starch,所以run命令就相当于create加starch。一旦创建并启动起来以后,我们的容器将处于started状态,如果只创建没启动就表示处于create的状态或者created状态,接着一旦启动完以后,它将会转入running状态,如果能正常运行的话(这里的前提叫做如果能正常运行的话,将转为running状态)。处于running状态的容器支持各种各样的管理操作,比如像stop停止,改到相当于发给他个term信号去停止容器中的进程。docker Kill这就表示强行杀死那个对应的进程了,类似于像进程发restart这样的型号儿,那docker restart其实就相当于重启。对应的容器中的进程(或表的服务pass),可以理解为叫暂停的进程。pass表示继续运行,另外运行状态的容器很有可能因为系统资源内,尤其是内存资源耗尽而导致被Kill,这就是因为oom及cute by out of memory而导致转为stopped状态容器处于中止状态了。而处于停止状态的容器,可以使用start再重新启动起来,也可以使用docker oom给它删除了。对RM将经历一个称之为叫this的阶段,最终容器将转为delete的状态。所以容器常用常见状态,有就有这么几个,Created 、running、 house stops 、 deleted,大概这样几种状态相。并有很多这里也展出了什么docker kill duck pows dark restaurant,这些都是跟docker容器相关的操作。在前面提到过docker的管理对象,还有docker镜像,Docker网络等等,那些命令也都可以拎使用。另外这里的很多命令也都可以用docker container来进行执行,

Volume types

●Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同,默认的挂载点面上,默认支持的这个点只支持local1种类型,所以只能使用宿主机,默认只能使用速录机之类的存储卷。这就意味着数据在容器上存储时,可以将速录机上的某一个目录与容器内的某个目录路径建立关联关系,这个时候容器内的这个目录路径就叫挂载点,被挂载的就是宿主机上的某一个存储空间,通常也是一个目录,所以这两个目录,其实就相当于mark的绑定关系,那么在容器内的进程存储在该挂载点中的任何数据实际都被保存在宿主机上去了,因此如果容器停止并且被删除的话,数据是不会丢失的。但是在宿主机上,这个目录有两种类型:

●Bind mount volume

 ◆avolume that points to a user-specified location on the host file system

●Docker-managed volume

◆the Docker daemon creates managed volumes in a portion of the host's file system that’s owned by Docker

image.png

docker管理的券不同之处在于绑定挂载卷是自己可以指定一个特定的速录机上的路径的路径,路径可以自行指定,而有docker管理的卷在宿主机上,这个指定路径用户无需指定,docker有一个默认位置,并且在这个默认位置下会为对应的存储卷生成一个圈,ID命名的目录作为存储权空间。很显然,为了能够更具有更好的定制性,可以使用单的Mark volume,否则的话,为了能够让doctor自行管理,可以使用docker managed to volume,在实际使用中可以按需来进行定义和选择。而要想使用存储券,只需要在docker run的命令上,在创建容器的时候给他一个“-V选项”,两种使用方法也肯定会有所区别。

image.png

要使用管理券的话,只需要使用“-v”指定在容器内哪一个路径作为挂载点即可,而如果想使用绑定挂载卷的话,需要继续要指定容器内的挂载点同时,需要将红色的DR在前面,Volume docker反而在后面。

、Bridge网络

本身提供了四种网络或者四种网支持,四种网络模型或者叫模式,有host跟宿主机共享,第二个叫做none表示不提供任何网络模型,还有一个叫做container,与其他容器共享(共享其他容器)的网络名称空间,还有一个叫做bridge,这是doctor默认为创建的每一个容器使用的网络模型。其实bridge指的就是Linux内linkedin所支持的虚拟网桥设备。默认情况下,它模拟的是物理网桥设备,工作于数据链路层。

●Bridge是指Linux内核支持的虚拟网桥设备,它模拟的是物理网桥设备,工作于数据链接层,根据习得的MAC地址表向设备端口转发数据帧,

●虚拟以太网接口设备对(VethPain)用于模块连接虚拟网桥和容器的网络媒介

◆一端插入到容器的网络栈中表现为通信接口(例如eth0等)

◆另一端则于宿主机上关联至虚拟网桥并被降级为当前网桥的“从设备”,失去调用网络协议栈处理数据包的资格,从而表现为桥设备的一个端口。

image.png

跨节点的容器间通信

●跨主机的容器间通信时,需要NAT机制的全程参与。

◆请求报文会首先由源宿主机进行一次SNAT(源地址转换)

◆而后再由目标宿主机进行一次DNAT(目标地址转换)方可送到目标容器器。

image.png

该目标就类似于这里的第二幅图所示,所以要想能够实现跨节点的容器间通信,或者是将该节点上的容器中所运行的服务发布到暴露到节点外部群能够被别人访问到,那么这个时候就必须在该节点上去为该容器内部的那个服务所监听的端口做的none,做个denied规则,就好像用户访问的时候访问的是这个节点(主机)。对应的网络接口之上的某一个特点端口,但对该端口的访问将被转发至内部的特定容器地址上的另外的其他端口,也可能是相同端口进行响应,所以在如docker容器网络当中,基于bridge模型,如果想实现跨节点的容器间通信。离开请求端的主机时要做sight,原因很简单,要不然content2收到线以后只看到content1的地址,而content1的地址是一个私网地址,这个时候的节点2是无法了解到这个地址在任何和在在在何处的,所以他们在报完离开节点1的时候必须转为节点1的接口地址,这个时候节点2才知道我们报完该送给谁,就是跨界的容器通信所面临的复杂境况,显然对于性能的影响是绝对不容忽视的。

设置容器跨主机通信

●-p选项的使用格式

◆-p <containerPort>

 ★将指定的容器端口映射至主机所有地址的一个动态端口

◆-p<hostPort>:<containerPort>

 ★将容器端口<containerPor>映射至指定的主机制端口<hosiPort>.

◆-p<ip>:<iccontainerPori>

 ★将指定的容器端口<contanerPor>映射至主机指定<ip>的动态端口

◆-p<ip>:<hostPort>:<containerPort>

 ★将指定的容器端口<containerPor>映射至主机指定<ip>的端口<hostPort>

●"动态端口”指随机端口,具体的映射结果可使用dockerpor命令查看。

基础网络选项

image.png

doctor软命令也可以指定其他几个选项,用来设定与网络属性相关的其他属性。比如自己为容器定义一下使用的主机名,可以使用“-host name”来实现,或者自定义一下指定要使用的DNS服务器的地址,使用“-S”,比如23.5.5.523.6.6.6什么之类的,也可以额外使用“--at host”自己为etc下的hosts文件添加解析选项,比如指定的格式打主机名解析为那个壁纸,这里将doctor com解析为172170.100这样的地址。

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
23天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
19天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
164 77
|
27天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
5天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
48 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
11天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
35 3
实战~如何组织一个多容器项目docker-compose
|
17天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
5天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
25 4
|
17天前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
18天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
21天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
66 3