docker是一个开源的应用容器引擎,基于go语言开发的
docker是运行在linux的容器化工具,可以理解为轻量级的虚拟机
可以在任何主机上,轻松创建的一个轻量级,可移植的,自给自足的容器
鲸鱼--------->宿主机
集装箱--------->独立运行的容器,相互隔离的容器。一个容器就是一个独立运行的应用程序。
容器化的特点:
1、灵活,最复杂的程序也可以实现集装箱化
2、轻量级:容器利用和共享主机内核
3、可互换:可以即时部署升级,即时更新
4、便携性:可以在本地构建,可以部署到云,可以在任何地方运行
5、可扩展(依赖于k8s)
容器是在linux上运行,与其他容器共享主机内核以及主机的资源,独立运行,相互隔离的进程(应用程序)
轻量级的,容器运行时占用一定的资源,但是不占用其他任务的资源。
docker和虚拟之间的区别:
doker 虚拟机
启动速度 秒级 分钟级
计算能力损耗 几乎无 损耗50%
性能 接近原生性能 只有80%
系统支持数量 上千个(理论上) 部署也就几十个
隔离性 资源隔离 完全隔离
安全性 安全性差 安全性高
docker数据流向图:
linux的命令空间*面试题
docker使用内核技术的两个重要的技术:
1、namespace 实现资源隔离
2、cgroup 资源限制
资源隔离:linux有6项隔离
namespace 命名空间:
1、UTS 主机名与域名 通过UTS命名空间创建进程,这个进程可以看到自己的主机名和域名,与宿主机
的其他进程进行分割。
2、IPC 信号量,消息队列,共享内存,进程拥有独立的通信资源,不受其他的进程影响。
kill -9
systemclt stop firewalld
3、PID 进程编号,每个程序在系统中都有一个唯一标识,唯一标识就是pid,使用不同的pid保证进程
之间不发生冲突
4、network 网络设备,网络端口等等
在network空间中,每个进程都有自己的独立的端口号,靠端口号,可以实现网络访问的隔离。
5、mount 挂载点(文件系统),每个进程使用不同的文件系统挂载点,不同的mount的文件系统互不干扰
6、user 用户和用户组,在user空间中,每个进程都有独立的用户和用户组。
每个用户之间可以互相不受影响。
docker的核心概念:
1、镜像:镜像是容器创建的基础,类似虚拟机的快照,通过快照可以快速创建一个容器
在镜像当中,已经封装好了程序运行需要的代码,库,运行时间,环境变量以及配置文件。
2、容器:基于镜像运行起来的进程就是容器。容器之间互相独立,互相隔离
3、仓库:保存镜像的地方。公有仓库(docker hub 阿里云)
私有仓库,不对外提供访问,自己使用。
docker的文件系统:
overlayFS 联合文件系统。用于docker等容器技术之中,
把多个文件系统层叠在一起,形成一个统一的文件系统。
LowerDir:底层目录
包含底层文件系统,容器运行的基础环境的文件系统。根文件系统
UpperDir:可写层
容器可以在底层文件系统的基础之上进行修改,即容器内部发生的写作。
这些修改不影响底层的文件系统。
达到容器内部的可写性
MergerDir:合并目录
把底层目录和可写层以及其他目录组成联合视图。也就是容器使用的文件系统。
Workdir:工作目录
处理文件系统的变更,当容器内部进行写处理时,由workdir进行处理
docker rmi -f IMAGE id号 如果不加-f,镜像被容器使用,切容器正在运行,-f才能删除。
docker save -o /opt/nginx1.18.tar nginx:web
把nginx:web这个镜像导出opt目录,保存到opt/nginx目录下
docker login登录仓库,才能到push
docker images查看当前镜像
容器操作,前提必须要有镜像
docker create -it nginx:web
创建容器
-i 容器和用户之间可以进行交互
-t 开启一个中端,用户可以用交互式会话访问器
拉取镜像----------------创建容器------------------------------修改镜像-----------重启重启>-----------停止容器-----------删除内容---------------------------删除信息
查看所有容器,包括未运行的容器