阿里华为Dockerfile命令规范及最佳实践(上)

简介: 阿里华为Dockerfile命令规范及最佳实践

0 什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

1  FROM

定制的镜像都是基于 FROM 的镜像,后续的操作都是基于该 image。

  • FROM scratch
    制作base image
  • FROM centos
    使用base image
  • FROM ubuntu:14.04

最佳实践

考虑安全性,请尽量使用官方 image 作为 base image。

2 LABEL

1. LABEL maintainer= "javaedge@gmail.com'
2. LABEL version="1.O"
3. LABEL description="This is a description"

最佳实践

这就像代码的注释,必须写好元数据。

3 RUN

用于执行后面跟着的命令行命令。有以下俩种格式:

Shell格式

1. RUN apt-get install -y vim
2. CMD echo "hello docker"
3. ENTRYPOINT echo "hello docker"

Dockerfile

image.png

docker build -t javaedge/centos-shell 。

image.png

docker image ls
docker run javaedge/centos-shell

image.png

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

Exec 格式

RUN [ "apt-get" , "install" , "-y", "vim" ]
CMD [ " /bin/echo" , "hello docker" ]
ENTRYPOINT [ "/bin/echo" , "hello docker" ]

Dockerfile2

image.png

那如何修改才能让 exec 格式的命令能被 shell 识别呢,修正:

image.png

RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
RUN yum update && yum install -y vim \
    python-dev  # 反斜线换行RUN apt-get update && apt-get install -y perl \
    pwgen --no-install-recommends && rm -rf \
    /var/lib/apt/lists/* # 注意清理cacheRUN /bin/bash -C 'source $HOME/.bashrc; echo
$HOME'

Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。

最佳实践

  • 可读性
    复杂RUN用反斜线换行
  • 避免无用分层
    合并多条命令成一行
目录
相关文章
|
机器学习/深度学习 算法 openCL
高效、轻量的深度学习框架MNN
MNN是一个高效、轻量的深度学习框架。
高效、轻量的深度学习框架MNN
|
人工智能 开发者
解决HuggingFace模型下载难题:AI快站的高效加速服务
在AI研发领域,获取优质模型资源是关键。国内开发者常因海外服务器导致的下载困难而苦恼,尤其是大型模型下载更是耗时且充满挑战。AI快站(aifasthub.com)作为huggingface镜像网站,提供了高效的加速下载服务。它不仅解决了huggingface大模型下载的速度问题,还支持断点续传,保证下载连续性。此外,AI快站还提供全面及时更新的模型资源,是国内AI开发者的理想选择。
2110 0
|
存储 弹性计算 人工智能
阿里云文件存储NAS通用型、极速型和文件存储CPFS有什么区别?
阿里云文件存储NAS极速型NAS低时延,适合企业级时延敏感型核心业务;文件存储CPFS拥有高吞吐和高IOPS,适合高性能计算业务;通用型NAS大容量、高性价比、弹性扩展,支持低频介质,适合通用类文件共享业务。
2543 0
阿里云文件存储NAS通用型、极速型和文件存储CPFS有什么区别?
|
SQL 缓存 Java
Flink SQL 核心解密 —— 提升吞吐的利器 MicroBatch
之前我们在 Flink SQL 中支持了 MiniBatch, 在支持高吞吐场景发挥了重要作用。今年我们在 Flink SQL 性能优化中一项重要的改进就是升级了微批模型,我们称之为 MicroBatch,也叫 MiniBatch2.0。
5906 0
|
数据可视化 定位技术 Python
【100天精通Python】Day68:Python可视化_Matplotlib 绘制热力图,示例+代码
【100天精通Python】Day68:Python可视化_Matplotlib 绘制热力图,示例+代码
3360 0
|
固态存储 NoSQL Go
使用 cProfile 和火焰图调优 Python 程序性能(下)
使用 cProfile 和火焰图调优 Python 程序性能
552 0
|
JSON 监控 JavaScript
使用 cProfile 和火焰图调优 Python 程序性能(上)
使用 cProfile 和火焰图调优 Python 程序性能
404 0
|
10月前
|
人工智能 DataWorks 大数据
大数据AI一体化开发再加速:DataWorks 支持GPU类型资源
大数据开发治理平台 DataWorks 的Serverless资源组支持GPU资源类型,以免运维、按需付费、弹性伸缩的Serverless架构,将大数据处理与AI开发能力无缝融合。面向大数据&AI协同开发场景,DataWorks提供了交互式开发和分析工具Notebook。开发者在创建个人开发环境时,可以选择GPU类型的资源作为Notebook运行环境,以支持进行高性能的计算工作。本教程将基于开源多模态大模型Qwen2-VL-2B-Instruct,介绍如何使用 DataWorks Notebook及LLaMA Factory训练框架完成文旅领域大模型的构建。
704 24
|
9月前
|
人工智能 负载均衡 调度
COMET:字节跳动开源MoE训练加速神器,单层1.96倍性能提升,节省百万GPU小时
COMET是字节跳动推出的针对Mixture-of-Experts(MoE)模型的优化系统,通过细粒度的计算-通信重叠技术,显著提升分布式训练效率,支持多种并行策略和大规模集群部署。
549 9
|
存储 JavaScript 前端开发
JavaScript中的复杂功能实现:一个动态表单生成器
JavaScript中的复杂功能实现:一个动态表单生成器