一:什么是容器
简单来说,就是一个运行在你主机上的一个进程隔离的沙盒进程。隔离级别为内核命名空间和cgroups命名空间。
从使用上来说: 容器是镜像的运行实例。
使用说明:
1:你可以使用API或者CLI来创建关闭移动启动停止或者删除。
2: 可以运行在本地,虚拟机,或者云服务器。
3: 兼容所有系统
4:容器之间隔离,可以每个容器使用单独的软件,二进制文件,配置文件。
二:什么是容器的镜像
当启动一个容器时,使用了一个隔离的文件系统。而这个自定义系统就是由容器镜像提供。由于镜像为容器提供文件系统,所以必须包含运行应用所需的一切(依赖,配置,脚本,二进制文件)。该镜像还包含容器的其他配置,如环境变量,要运行的默认命令和其他元数据。
从使用上来说:镜像是容器的“系统盘”,我们可以用这个基础的“系统盘”来安装多个系统。这个“系统盘”必须为容器提供基础的运行环境和一些框架依赖。而当容器一旦使用“系统盘”安装完了系统,那么和“系统盘”的交互就完结了,在容器上安装新的软件,不会影响系统盘,也不会影响别的容器。
PS:所以这里可以了解到,其实镜像并非docker独创,windows在装机的时候也会用到后缀为.iso的镜像文件。
扩展:
关于chroot,如果你熟悉这个命令,那么可以将容器视为chroot的扩展版本,多出了一些使用时的隔离。
三:单应用单容器的使用方案
把docker的容器当做一台虚拟机,然后把所有的环境都在容器里进行搭建(如jdk,nginx,mysql,php)。
优势:
只需要一个容器,不用维护容器间的通讯。
当做一台虚拟机使用,更容易上手。
多个服务启停都在一个容器里进行操作,更易调试。
缺点:
耦合程度高,各个服务互相依赖
占用内存高,各个服务占用的内存导致容器内存居高不下
服务复用率低,如nginx这种通用服务,就无法单独给别的容器用
镜像层数高,一层层堆叠的服务,如果合并到镜像上,会导致镜像变大
四:单应用多容器的使用方案
把各个服务单独拆出来,单容器只做一件事。比如MySQL容器,Nginx容器等。然后使用Docker Compose对容器进行编排,以满足应用的需求。
优点:
统一管理,容器成为一个临时性的系统,可以随时销毁重建,更新依赖。
服务复用率高,一个服务可以对多个容器提供。
镜像大小低,可以用dokcer compose命令快速部署。
优化空间大,后续可以用多阶段构建,将运行时依赖和构建时依赖分开。
缺点:
需要docker-compose的基础知识,上手稍慢
五:构建属于你自己的镜像
https://docs.docker.com/develop/develop-images/baseimages/
这里有官方文档对构建自己所需要镜像的方式。就像搭积木,我们先选一个基础镜像(例如debain/centOS)。然后在基础镜像上加入我们日常开发所需的依赖和软件。构建完成后把镜像文件推送到docker的仓库或者第三方云托管平台。后面在开发的时候就可以随用随取了。