背景
随着云原生、AI等技术的推进,容器技术逐渐成为算法科学家的必备技能之一
微服务的出现,导致使用的技术更加多元化,在部署上的难度也变得更大
docker可以减轻在部署上面的复杂性
docker起到了承上启下的桥梁作用:将App连带环境一同打包直接部署到服务器上
为什么用docker
在没出现docker的时候,项目和服务器配置的周期相当的冗杂并且繁琐。
利用docker,不但可以使用一个空的镜像,从头开始构建
还可以使用之前各种大牛已经build好的镜像,直接使用
而且在项目需要迁移的时候,我们只需要在需要部署的地方,直接使用之前项目使 用的docker放置好自己的项目即可,方便快捷。
docker底层技术支持
NameSpaces:用于做进程之间的隔离
Control Groups: 用于做资源控制,根据需求划分资源的核心数,内存,硬盘等
Union file systems(UFS,联合文件系统):Container和image的分层
docker基本概念
镜像(image)
镜像是文件与meta data的集合
只读
分层,并且每一层都可以添加删除文件,从而形成新的镜像
不同的镜像可以共享相同的层(layout)
每一个镜像都会依赖于另一个镜像
这个依赖关系体现在docker镜像制作的dockerfile中的FROM指令中
容器(container)
通过image创建
在image 的最后一层上面再添加一层,这一层比较特殊,可读写。
image负责存储和分发,container负责运行
容器是镜像的一个运行实例
容器的结构是与镜像相类似的,底部也是一层层的只读层
不过在最上层会存在一个存储层,可以在这一层定制化这个容器
还可以通过build命令,把容器打包成我们需要的镜像
另外镜像启动后会形成一个容器
容器在计算机中是一个进程,但这个进程对其他进程并不可见。
容器的启动过程:
检查镜像是否在本地存在,如果不存在去远程仓库下载
==>利用镜像创建一个容器
==>启动刚刚创建的容器
==>分配一个文件系统给容器,并且在镜像层外挂载一个可读可写层
==>从宿主主机的网桥接口中桥接一个给容器
==>从网桥中分一个ip地址给容器
==>执行用户指定的应用程序
==>执行完毕后容器自动终止
仓库(repository)
一个远程的仓库记录着我们的代码,和每一次我们提交的记录
默认情况下,我们都是从docker hub中取得的镜像