Docker和DevOps:4.Dockerfile语法梳理及实践

122 阅读2分钟

Dockerfile语法梳理及实践

一、Dockerfile中的关键字

1.FROM

用于Dockerfile文件的最开始,标识这个镜像基于哪个BaseImage

FROM scratch		# 制作Base Image
FROM ubuntu:14.04	# 基于ubuntu:14.04
  • 为了安全,尽量使用官方的BaseImage
2.LABEL

用于描述这个Image的一些信息,例如作者、版本等等。可以理解为写代码中的注释的作用。

LABEL maintainer="hellozhaoxudong@163.com"
LABEL version="v1.0"
LABEL description="ubuntu:14.04 & vim"
  • 为了让大家了解到这个Image的情况,LABEL必不可少
3.RUN

基于FROM关键字指定的BaseImage创建临时容器后,指定执行的命令

  • 每一个RUN关键字都会变成Image中的一层。例如之前安装vim,先写RUN apt-get update,再写RUN apt-get install -y vim,这样只是为了安装一个Vim,却分了两层
  • 为了避免无用的分层,多条命令用 && 合并成一条RUN
  • 为了美观,复杂的RUN用 \ 换行
## 使用&&将多条命令合并
RUN apt-get update && apt-get install vim

## 注意使用apt-get安装清理缓存
RUN apt-get update && apt-get install vim && rm \
	-rf /var/lib/apt/lists/*
4.WORKDIR

设定当前工作目录(在镜像中),可以理解为cd命令。

FORM ...
LABEL ...
WORKDIR /test	# 若此时在临时容器中无此目录,则会自动创建
WORKDOR demo
RUN pwd			# 会输出:/test/demo
  • 虽然使用RUN cd /test 也能达到相同的效果,但是不推荐,请使用WORKDIR命令。
  • 尽量使用绝对目录,更清晰。
5.ADD和COPY

将本地的文件添加到镜像里面

# ADD命令添加之后会将文件解压
ADD test.tar.gz /		# 添加到镜像中: /test

# COPY命令只会添加,不会解压
WORKDIR /root
COPY test.txt test		# 添加到镜像中: /root/test/test.txt
  • 因为ADD多了一个解压功能,所以一般使用COPY命令。
  • 用于添加本地文件,如果需要下载远程文件到镜像中,使用RUN curl或者RUN wget命令下载。
6.ENV

设定一个环境变量,Dockerfile中后面的信息可以取这个变量的值使用。

ENV MYSQL_VERSION 5.6
RUN apt-get install -y mysql-server= "${MYSQL_VERSION}"
  • 多使用ENV可以增加Dockfile的可维护性
7.VOLUME和EXPOSE

用于存储和网络。

8.CMD和ENTRYPOINT

内容较多,下篇博客。


二、官方的Dockerfile示例

github.com/docker-libr…
以上github的仓库包含:官方提供的很多镜像的Dockfile


三、官方说明文档

docs.docker.com/engine/refe…