Dockerfile常用指令介绍

2024-08-14 10:24:44 浏览数 (3)

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

0 人点赞