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