我们在使用Dockerfile构建镜像的时候需要搞清楚DockerFile中常用的指令有哪些
From:
- 说明:指定该镜像的基础镜像
- 格式:FROM <image>或FROM <image>:<tag>
- 示例:FROM python:3.8
- 注意:FROM一般出现在文件头,因为每个镜像都需要有一个FROM来指定基础镜像。
MAINTAINER:
- 说明:用以指定作者信息
- 格式:MAINTAINER <name>
- 示例:MAINTAINER jibu "455636959@qq.com"
WORKDIR:
- 说明:设置工作目录
- 格式:WORKDIR /path
- 示例:WORKDIR /app
- 注意:可以使用绝对路径,也可以使用相对路径,设置后会自动切换到该目录下以后所有操作都将在这个目录下完成,一般会设置/app目录
RUN:
- 说明:在构建镜像时执行脚本
- 实例:RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
ENTRYPOINT:
- 说明:在运行容器时执行脚本
- 格式如:ENTRYPOINT ["exec", "comm1", "comm2"]、ENTRYPOINT command comm1 comm2
- 示例:ENTRYPOINT ["test.sh", "run"]
- 注意:一个Dockerfile中只有一条ENTRYPOINT,如果有多条只执行最后一条;不会被容器运行时的命令所覆盖
CMD:
- 说明:在运行容器时执行脚本
- 示例:CMD ["cd"]
- 注意:一个Dockerfile中只有一条CMD,如果有多条只执行最后一条;在运行容器时如果用户指定了运行命令则Dockerfile中的CMD将被覆盖。
EXPOSE:
- 说明:让Docker暴露容器的端口号,供其他容器使用,在宿主机以外的网络中是无法使用的
- 格式如:EXPOSE <port> ...
- 示例:EXPOSE 8000
ENV:
- 说明:指定环境变量,在Dockerfile文件中的后续代码中使用,在容器运行时也可以使用
- 格式如:ENV <key> <value>
- 示例:ENV PYTHONUNBUFFERED 1
ADD:
- 说明:复制文件(夹)到容器
- 格式如:COPY <src> <goal>
- 示例:COPY test.jar /test.jar 宿主机 /容器
- 注意:复制指定的<src>到容器中的<dest>,<src>可以是Dockerfile所在目录的一个相对路径,也可以是一个URL,也可以是一个tar文件(tar文件将自动解压成文件目录)
COPY:
- 说明:复制文件(夹)到容器
- 格式如:COPY <src> <goal>
- 示例:COPY requirements.txt requirements.txt
- 注意:与ADD功能相似,只是不能指定URL,使用本地文件(夹)为源文件时,推荐使用COPY
VOLUME:
- 说明:创建挂载点
- 格式如:VOLUME [path]
- 示例:volumes: "/home/lx/user_upload:/home/lx/user_upload"
- 作用:就是将宿主机和容器的路径做一个映射,这样同意的目录下存的文件或文件夹相同
总结:
RUN、CMD、ENTRYPOINT三个指令的区别
1. 三个指令都是执行脚本
2. RUN是在创建镜像是执行,即使用docker build命令时执行,在一个Dockerfile里面可以有多个RUN
3. CMD和ENTRYPOINT是在运行容器时执行,即使用docker run命令时执行,这两个指令在Dockerfile中都只有最行一条被执行
4. CMD在使用docker run时可以加参数将Dockerfile中的CMD覆盖
5. ENTRYPOINT在Dockerfile中出现后就一定会在docker run时被执行,不必担心会被其他参数所覆盖。
ADD、COPY复制文件(夹)到容器
1. ADD复制文件(夹)时可以指定本地文件、远程URL地址,如果复制的是tar文件时将会被自动解压成文件夹
2. COPY复制文件(夹)时不可以指定远程URL地址,拷贝tar文件也不会被自动解压成文件夹,在复制本地文件时建议使用COPY