【Docker】【基础】入门知识
一、docker介绍
docker是一个快速交付、开发和运行应用程序的平台。
docker提供一个独立的运行应用程序环境,应用程序不依赖其环境就可以部署运行应用程序,可以将业务程序和基础架构进行隔离,具有隔离性。隔离原理是底层利用linux内核命名空间namespaces和cgroups功能来达到容器工作空间的隔离性。
docker通过快速交付、测试和部署代码的方法,可以减少编写代码和生产环境运行程序的时延。
docker具有隔离性和安全性,并且docker是轻量级的,因此可以运行多个docker容器,并且还可以设置共享容器与其他容器进行交互(后面有专门的kubernetes解决应用容器之间相互发现和访问的问题)。
docker提供了工具和平台来管理容器的生命周期:
- 使用容器来开发应用程序和组件
- 使用容器分发和测试应用程序
- 上面都准备好了之后,就可以将应用程序部署到生产环境中。
二、docker作用优点
1. 快速、一致性的交付应用程序
场景:
- 本地开发代码,并使用docker容器与其他同事共享工作
- 本地开发完之后,使用docker将应用程序打包成镜像推送到测试环境中,并执行自动和手动测试。
- 当开发发现bug的时候,先在开发环境中修复,然后使用docker重新部署到测试环境进行测试和验证。
- 测试完成之后,使用docker将修改好的镜像推送到生产环境。
2. 响应式部署和拓展
docker具有可移植性和轻量级特性,可以实时根据业务需求拓展和拆除应用程序和服务
3. 同一台机器上运行多个docker容器
docker具有轻量级和快速特性,可以使用很少的资源完成更多的工作
三、docker架构
- docker使用client-server的架构模式,也就是docker客户端(简称docker)与docker守护进程(简称dockerd)之间进行通信的一个架构。
- 守护进程dockerd完成docker容器的创建、分发和运行docker容器的繁重工作。
- 客户端docker和守护进程dockerd可以在同一系统或同一台机器运行,也可以在不同系统或不同机器上运行(docker远程连接到dockerd),它们是怎么进行通信的呢?docker与dockerd是通过使用RESTAPI、UnixSocket或网络接口进行通信的。
基本架构图:
基本流程说明:
-
当docker用户在docker客户端运行docker pull命令时,该命令发送到守护进程dockerd中,dockerd会从Registry仓库中拉取指定镜像到本地images中。
- 当docker用户在docker客户端运行docker build命令时,该命令发送到守护进程dockerd中,dockerd将本地images中指定的镜像编译好,以供使用。
- 当docker用户在docker客户端运行docker run命令时,该命令发送到守护进程dockerd中,dockerd会在本地images将指定编译好的镜像在指定的容器中运行起来。
基本概念解释:
docker守护进程(dockerd)
守护进程dockerd其实就是docker服务,主要是监听客户端Docker的API请求,管理docker镜像、docker容器、networks网络、volumes存储卷等;docker守护进程还可以与其他守护进程进行通信一起管理docker服务,组成一个dockerd集群,为客户端docker提供服务。
docker客户端(docker)
客户端docker是docker用户与docker的交互主要方式,如当docker用户执行docker run命令时,docker将这些命令发送到dockerd,在dockerd上执行该命令。
docker命令使用Docker API,docker客户端可以与多个守护进程dockerd通信。
docker注册中心(Registry)
docker注册中心registry,可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应一个镜像,简单来说就是专门存放Docker镜像的地方,docker有个公共仓库叫Docker Hub,提供每个人使用,dockerd默认配置了Docker Hub为默认查找镜像的仓库,当然也可以配置自己的私人仓库。
当docker用户在docker客户端运行docker pull 或 docker run命令时,请求的镜像将从你配置的registry仓库拉取。
当docker用户在docker客户端运行docker push命令时,会将镜像推送至你配置的registry仓库中。
docker对象
docker中包含很多对象:镜像images,容器containers,网络networks,存储卷volumes,插件plugins,还有其他的一些对象等等。
1. docker镜像(images)
镜像images只是一个描述怎么创建Docker容器的只读模板;通常一个镜像是基于另一个镜像并进行额外的自定义配置;例如,你可以构建基于ubuntu的镜像,并且可以在镜像中安装Apache web服务器和应用程序,以及使应用程序运行所需的详细配置信息等等,每个dockerd都有一个本地images,存放自己制作的镜像或者从别的仓库拉取过来的镜像。
可以创建自己的镜像,也可以直接使用仓库里面别人发布的镜像。
想要创建自己的镜像,需要的步骤为:
- 创建一个dockerfile文件。
- 使用简单的语法定义创建、运行镜像所需的指令步骤。
dockerfile文件中的每条指令都会在images中创建一个layer,当改变dockerfile文件并重新编译镜像时,只是改变并重建images中的layer,这就是制作镜像如此轻、小、快速的原因之一。
2. docker容器
- 容器是镜像的可运行实例,简单来说就是计算机上的另一个进程,与宿主机上的其他进程隔离。
- 可以使用Docker API或CLI创建、启动、停止、移动或删除容器,可以将容器连接到一个或多个网络并附加存储卷给它,甚至还可以根据当前容器的状态创建一个新镜像。
- 默认情况下,容器与容器之间以及容器与宿主机之间是存在比较好的隔离环境的,你可以控制容器的网络、存储卷与其他容器或宿主机的隔离程度。
- 容器的定义是由镜像决定的,当创建或者运行一个容器时,需要在镜像文件中提供好所有的配置信息;删除容器的时候,没有保存容器状态的更改都会消失。
- 例如,运行一个docker容器命令docker run -i -t ubuntu /bin/bash .,运行一个ubuntu容器并运行/bin/bash .会执行以下步骤:
- 守护进程检查本地有没有ubuntu镜像,如果没有,docker会从配置的仓库中提取它,就像手动运行docker pull ubuntu一样。
- docker会创建一个新容器,就像手动执行命令docker container create。
- docker分配一个读写文件系统给容器,允许正在运行的容器在该文件系统创建和修改文件或目录。
- docker创建一个网络接口将容器连接到默认网络,如果没有指定任何的网络配置,docker会为容器自动分配IP地址,并且默认可以使用宿主机的网络连接连接到外部网络。
- 上面完成之后,docker启动容器并执行/bin/bash .,并以交互方式运行且连接到本地终端(-i和-t参数),可以从键盘输入,同时输出记录到终端
- 当输入exit命令时,将终止/bin/bash命令,容器将停止,但不会被删除,可以再次启动或删除它
3. docker仓库(Repository)
上面也说了一个docker Registry注册中心可以包含多个仓库Repository,一个Repository包含多个标签Tag,一个标签Tag对应一个镜像,同一个Repository下的多个Tag就是指的是同一个软件不同版本的镜像,通过<仓库名>:<标签>的格式来指定具体软件版本,如果不给出标签,就以latest作为默认标签。在docker注册中心多用户环境下仓库名经常以两段式路径出现:用户名/软件名。
问题:镜像与容器的区别
镜像就是运行容器实例的一个模板,镜像包含运行容器实例的环境配置信息和应用程序。
容器就是镜像的一个运行实例,可以基于镜像创建多个实例,每个实例都是独立运行的。
- 点赞
- 收藏
- 关注作者
评论(0)