容器技术2-镜像与容器储存

目录

一、镜像制作

1、ddocker build

2、docker commit

二、镜像存储

1、公共仓库

2、私有仓库

三、镜像使用

四、容器存储

1、镜像元数据

2、存储驱动

3、数据卷


一、镜像制作

1、ddocker build

基于 Dockerfile 自动构建镜像

其机制为:每一行都会基于上一的中间容器来执行对应的修改命令,然后通过 docker build 提交,经过一次次循环,最终提交成为目标镜像。

Dockerfile 示例:

FROM ubuntu:15.04
COPY . /app
RUN make /app
CMD python /app/app.py

Dockerfile 中的每一行指令(COPY、RUN、CMD)都会生成新的一层,叠加在上一个指令生成的文件系统之上,最后所有镜像层叠加就构成了镜像的文件系统。

2、docker commit

首先使用某一镜像启动容器,进入容器中完成需要的操作,最后在宿主机上执行 docker commit 命令,该命令会将此时的容器打包成一个新的镜像。

二、镜像存储

分为公共仓库和私有仓库

1、公共仓库

面向整个互联网用户,典型的代表为 Docker Hub

2、私有仓库

在一定范围内可访问的镜像仓库,典型的代表为 Harbor,Docker Hub也支持设置私有仓库

三、镜像使用

常用命令 docker pull/push

其他命令操作详细用法参考官方文档:

https://docs.docker.com/engine/reference/commandline/images/

四、容器存储

1、镜像元数据

在 Linux 系统中 Docker 的数据默认存放在/var/lib/docker 中

容器技术2-镜像与容器储存_第1张图片

镜像每一层的 ID 是该文件内容的哈希校验值,作为该层的唯一标识。

2、存储驱动

理想情况下,使用挂载卷来存储高读写的目录,很少将数据直接写入容器的可写层。 但是,总有些特殊需求需要直接写入容器的可写层。这时候就需要存储驱动来作为容器和宿主机之间的媒介。Docker 依靠驱动技术来管理镜像和运行它们的容器间的存储和交互。

根据不同的场景选择合弁的存储驱动,目前 Docker 主要支持 AUFS、BtrFS、Device Mapper、OverlayFS、ZFS 五种存储驱动。

3、数据卷

文件系统的改动都是发生在最上面的可读写层,在容器的生命周期内,它是持续的,包括容器被停止后。但是,当容器被删除后,该数据层也随之被删除了。

Docker 采用数据卷(Volume)的形式向容器提供持久化存储,数据卷是持久化的,不会依赖于容器的生命周期,绑定挂载(Bind Mounts)依赖于主机的目录结构,但数据卷是由 Docker 管理。

Docker 主机上数据卷的挂载方式:

容器技术2-镜像与容器储存_第2张图片

你可能感兴趣的:(云原生,后端,云原生,docker,容器,镜像)