1、FROM
构建容器时使用的基础容器
如:FROM ubuntu:20.04
2、 RUN
在构建时运行一行命令
如:RUN apt-get update && apt-get install -y python3 python3-venv libpq5
因为多条RUN指令会创建多个镜像层,请尽可能把多行命令使用&连接,减少新镜像层的创建。
3、 WORKDIR
指定工作目录,即构建镜像和运行镜像过程中,运行命令所在的目录
如:WORKDIR /usr/app
4、ADD
把上下文中的文件添加到容器中,如果是zip,gz,war等压缩文件,会自动解压缩到指定目录下。
源文件必须在上下文目录中,并使用相对上下文目录到路径,不能使用绝对路径
目标文件或目录可以是容器中的绝对路径,也可以是相对工作目录到路径。
如:
ADD test.war /usr/app 会把test.war添加到/usr/app目录下,并解压缩
ADD test.war /usr/app/app.war 会把test.war添加到/usr/app目录下,改名为app.war,并解压缩
ADD test.war bin 会把test.war添加到/usr/app/bin目录下,并解压缩,如果bin目录不存在,则创建,bin是相对WORKDIR的路径
ADD test.war bin.war/ 会把test.war添加到/usr/app/bin.war目录下,并解压缩,因为bin.war/后面有个反斜杠,因此docker-engine会把它识别为目录,而不是文件
5、 COPY
把上下文中的文件添加到容器中,与ADD不同,它不会自动解压缩,其他特性同ADD
如:
COPY test.war /usr/app会把test.war拷贝到/usr/app目录下
6、 ENV
定义容器中的环境变量
如:
ENV HOME=/usr/app 定义环境变量HOME,他的值是/usr/app。
这个指令可以被运行容器时到-e参数覆盖
7、 USER
定义构建容器时使用的用户,用户必须已存在,后续所以指令,都会使用这个用户执行
如:USER simple
8、 EXPOSE
定义容器暴露的端口,注意,这个端口只是声明,并不代表容器实际使用的端口,也可以不声明。这个声明都作用是在查看容器信息时,知道这个镜像暴露的端口,方便非镜像制作者使用。
如:
EXPOSE 80
EXPOSE 80,443
9、 CMD
定义容器启动时默认使用的命令,这个命令被运行时指定的命令覆盖
如:
CMD java -jar /usr/app/test.jar
CMD ["sh", "-c", "/usr/app/bin/start.sh"]
CMD bin/start.sh
CMD sh -c bin/start.sh