docker容器4 :docker存储和dockerfile相关指令

本文详细介绍了Docker的存储驱动,包括aufs、overlay2等,强调了overlay2作为首选存储驱动的原因和要求。此外,还详细讲解了Dockerfile中的常用指令,如RUN、CMD、LABEL、ENV等,以及如何使用这些指令定制镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一,docker存储

二,dockerfile相关内容

三,docker相关指令

dockerfile常用指令:

RUN指令-运行命令:

CMD指令-指定容器启动时默认执行的命令:

LABEL指令-向镜像添加标记(元数据)

ENV指定-指定环境变量

COPY指令-将源文件复制到容器

ADD指令-将文件复制到容器

ENTRYPOINT指令——配置容器的默认入口:

VOLUME指令——创建挂载点

USER指令——设置运行镜像时使用的用户名

SHELL指令——指定命令的shell格式


一,docker存储

docker存储;
docker存储驱动与联合文件系统:联合文件系统是一种为linux,FreeBSD和NetBSD操作系统设计的,将其他文件系统合并到一个联合挂载点的文件系统。
联合文件系统实际上是由存储驱动实现的,相应的存储驱动有aufs,overlay,overlay2,deveicemapper,btrfs,zfs,vfs等。

选择docker存储驱动的总体原则:
在最常用的场合使用具有有最佳整体性能和稳定性的存储驱动。
如果内核支持多个存储驱动,则docker会提供要使用的存储驱动的优先级列表。
优先使用linux发行版默认的存储驱动。
一些存储驱动要求使用特定格式的底层文件系统,这可能会限制选择。
选择存储驱动还要取决于工作负载的特性和所需的稳定性级别。

主流的docker存储驱动:
对于当前支持的linux发行版,overlay2存储驱动是首选,centos和RHEL的最新版本现在已经支持overlay2存储驱动,并将overlay2作为推荐的存储驱动。
对于docker 18.06或更早的版本aufs存储驱动是首选。
devicemapper存储驱动用于生产环境是需要配置为direct-lvm模式。
btrfs和zfs存储驱动对底层文件系统有用。
vfs存储驱动用于测试,适合那些没有“写时拷贝”的文件系统。
存储驱动的选择可能受到docker版本操作系统内核和发行版本的限制。


docker版本所支持的存储驱动:
docker引擎企业版和docker EE:支持存储驱动的决定性资源是产品兼容性矩阵,建议用户迁移到overlay2存储驱动。
docker CE:只有部分配置被测试过,并且操作系统的内核不可能支持每个存储驱动,最佳配置是使用带有支持overlay2存储驱动的内核的现代linux发行版,并且对于大量的工作负载要使用docker卷写入,而不是将数据写入容器的可写层。
docker for Mac和 windows
这两个版本仅用于开发,而不能用于生产环境,不支持定义存储驱动。


选择存储驱动需要考虑的其他事项:
适合工作负载:aufs,overlay和overlay2存储驱动的所有操作都在文件级而不是在块级。
块级存储驱动,在写入繁重的工作负载时表现的更好。
btrfs和zfs存储驱动需要更多的内存。
zfs存储驱动是高密度工作负载的理想选择。


检查当前的存储驱动:使用docker info
更改存储驱动会使得现有的容器和镜像不可访问。


使用overlay2存储驱动的要求:
doker版本的要求:docker EE 17.06.02-ee5或者更高的版本支持。
虽然docker CE版本支持 overlay存储驱动,但是建议使用overlay2存储驱动。
linux内核版本要求:4.0或更高版本的linux内核。
            RHEL或centos可使用3.10.0-514或更高版本的内核
            如果使用更低版本的内核,则可使用overlay存储驱动,但不推荐这样做。
底层文件系统要求:
    ext4
    xfs,但仅限于启用d_type的情形

docker安装默认使用overlay2存储驱动的情形:
    从Ubuntu 14.04版本开始支持overlay2存储驱动
    从centoss7.4版本开始,安装过程中建立的xfs文件系统开始支持d_type,安装docker默认使用的就是overlay2存储驱动。


容器使用overlay2存储驱动的读写机制:
读取文件:
    文件不存在于容器层:果该文件并不在容器层中,则从镜像层中读取。
    文件已存在于容器层:如果该文件已经存在于容器层中,而不存在镜像层中,则直接 从容器中读取。
    文件同时存在于容器层和镜像层:将读取镜像层中的文件版本。


写入或者修改文件:
    首次写入文件:容器首次写入现有文件,该文件不会存在于容器层,overlay2存储驱动执行一个copy_up操作将文件从镜像层复制到容器层。容器将更改的部分写入容器层中该文件的一个新复制。
    删除文件或目录:容器中一个文件被删除时,会在容器层中创建一个白化文件。
               容器中一个目录被删除时,会才容器层中创建一个不透明目录。
重命名目录:只有源和目的路径都位于顶层时才能对目录进行重命名,否则会返回EXDEV错误。

docker目录:docker根目录就是docker中存放镜像和容器的目录,默认是:/var/lib/docker
解决docker根目录所在磁盘空间和饱和问题通常采用docker根目录迁移这适合不同的docker存储驱动。
(1)停止docker
(2)在一个可用空间 足够大的磁盘或逻辑卷中创建新的docker存储目录/
(3)迁移/var/lib/docker 目录下的文件到/home/docker/lib目录。
(4)编辑docker服务单元文件/usr/lib/systemd/system/docker.service    
    在[service]节中的ExecStart定义语句末尾增加选项 --graph=/home/docker/lib
(5)重新加载systemd单元文件
(6)重新启动docker
(7)执行docker info命令查看当前docker的信息

默认在容器中创建的所有文件保存在可写的容器中这类存储的问题如下:
    此类存储只在容器的生命周期内存在,会随着容器的删除而被删除。
    如果主机上的其他进程需要访问容器中的数据,则会很难从容器中获取数据。
    容器的可写层与运行容器的主机紧密耦合,无法轻松地将数据转移到其他地方。
&nbs

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值