在我们传统的开发部署服务时,涉及到环境总会耗费很多的精力,容器化技术就给我们带来了很大的方便。容器可以配置一系列服务需要配置的环境,节省了我们配置环境的时间。容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便,运行资源消耗小。Docker是现在容器化技术中非常流行成熟的技术。
Docker镜像
Docker镜像是一个特殊的文件系统,除了提供运行时所需的程序,库,资源,配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷,环境变量,用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
Docker容器
镜像和容器的关系,就像Java中的类和实例一样,镜像是静态的定义,容器是镜像运行的实体。容器可以被创建,启动,停止,删除,暂停等。
Docker仓库
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储,分发镜像的服务,Docker Registry就是这样的服务。
Dockerfile定制镜像
我们可以通过Dockerfile定制自己的自定义镜像。Dockerfile是一个包含组合映像命令的文本文档。Docker通过读取Dockerfile中的指令自动生成映像。
Dockfile一般分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行指令。
Dockfile指令
FROM:指定基础镜像,必须是第一个命令
MAINTRAINER:维护者信息
RUN:构建镜像所执行的命令
ADD:将本地文件添加到容器中,可以访问网络资源
COPY:功能类似ADD,但是不能自动解压文件,也不能访问网络资源
CMD:容器启动时才进行调用。
ENTRYPOINT:配置容器,使其可执行化
LABEL:用于为镜像添加元数据
ENV:设置环境变量
EXPOSE:指定于外界交互的端口
VOLUME:用于指定持久化目录
WORKDIR:工作目录,类似于cd命令
USER:指定运行容器时的用户名或UID
ARG:用于指定传递给构建运行时的变量
ONBUILD:用于设置镜像触发器
Docker安装启动流程
1、安装依赖
docker依赖于系统的一些必要的工具,可以提前安装。
yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加软件源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装docker-ce
yum clean all yum makecache fastyum -y install docker-ce
4、启动服务
通过systemctl启动服务
systemctl start docker
5、查看安装版本
这样子就安装成功了,启动服务以后可以使用docker version查看一下当前的版本。
docker version
Docker实现原理
Docker的原理是利用LXC来实现VM的功能。LXC提供一个共享kernel的OS级虚拟化方法,在执行时不用重复加载kernel,且container的kernel与host共享,因此可以大大加快container的启动过程,并显著减少资源消耗。在实际的测试中,基于LXC的虚拟化的IO和CPU性能几乎接近baremetal的性能。
Liunx Namespace
LXC实现的隔离性主要是来自kernel的namespace。其中pid,net,ipc,mnt,uts等namespace将container的进程,网络,消息,文件系统和hostname隔离开。
Control Groups
cgroups实现了对资源的配额和度量。cgroups的使用非常简单,提供类似文件的接口。