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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 阿里华为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用反斜线换行
  • 避免无用分层
    合并多条命令成一行
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
Linux iOS开发 Docker
Docker:容器化技术的领航者 —— 从基础到实践的全面解析
在云计算与微服务架构日益盛行的今天,Docker作为容器化技术的佼佼者,正引领着一场软件开发与部署的革命。它不仅极大地提升了应用部署的灵活性与效率,还为持续集成/持续部署(CI/CD)提供了强有力的支撑。
256 69
|
Kubernetes Cloud Native Devops
【云原生|实战研发】3:Docker命令全集一览
本期文章是Docker文章指令大全,上次的文章中我们已经学习过了Pod详细解析、Docker、K8s的核心概念理解与简单的代码实战相关知识,也学习了DevOps与微服务的概念,感兴趣的同学可以去我的云原生专栏中学习,任意门:云原生学习专栏
|
缓存 JavaScript Ubuntu
纯干货!构建Dockfile镜像的十三个最佳实践点
编写.dockerignore文件 构建镜像时,Docker需要先准备上下文 ,将所有需要的文件收集到进程中。默认的上下文包含Dockerfile目录中的所有文件,但是,实际上我们并不需要.git目录,.vscode目录、.idea目录等内容。 .dockerignore 的作用和语法类似于 .gitignore,可以忽略一些不需要的文件,这样可以有效加快镜像构建时间,同时减少Docker镜像的大小。
|
存储 缓存 Linux
阿里华为Dockerfile命令规范及最佳实践(下)
阿里华为Dockerfile命令规范及最佳实践
197 0
阿里华为Dockerfile命令规范及最佳实践(下)
|
存储 Web App开发 自然语言处理
一种设想:在网盘里coding,debuging,运行linux rootfs作全面devops及一种基于分离服务为api的融合appstack新分布式开发设想
本文关键字:Jupyter visual debug,基于网盘backend的ide和snippter空间,debug driven programming,make chrome like visual debug for every lanaguage,make every language a dsl,c系语言学习最好的时代
324 0
一种设想:在网盘里coding,debuging,运行linux rootfs作全面devops及一种基于分离服务为api的融合appstack新分布式开发设想
|
Prometheus Kubernetes 监控
|
Kubernetes 安全 调度
K8S 生态周报 | 首个 Docker 官方 Action 发布
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 首个 Docker 官方 GitHub Action 发布了 从去年 Docker 将企业服务相关的业务出售给 Mirantis 之后,Docker 将重心放在助力开发者体验上,并为此做了一系列的努力。
|
Prometheus Cloud Native Docker
开源应用 Docker App 加入 CNAB 规范,实现云原生应用的统一管理
Docker App 是我们在2018 DockerCon 美国大会上简要介绍的一款新工具。我们一直致力于“Docker APP”的开发,使容器应用程序更易于在不同团队和不同环境之间共享和管理......
2513 0
|
Ubuntu Linux Shell
阿里P8架构师谈:Docker简介、组成架构、使用步骤、以及生态产品
Docker简介 Docker是DotCloud开源的、可以将任何应用包装在Linux container中运行的工具。 Docker基于Go语言开发,代码托管在Github上,目前超过10000次commit。
2385 0
|
JavaScript 测试技术 网络安全
Docker 社区版 18.09 开放测试,全新内容先睹为快!
几周前,我们宣布了将 Docker 社区版(CE)引擎的维护周期进行更改。作为这些更改的一部分,我们正在进行 beta 测试,以向市场提供更高质量的引擎。
3669 0