您的位置:

Dockerfile命令详解

一、FROM命令

FROM命令用于指定基础镜像。Docker镜像的构建基础是基础镜像,所以FROM命令是非常关键的。例如,如果我们需要构建一个基于Ubuntu的Python应用镜像,我们可以用以下代码指定:

FROM ubuntu:18.04
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
ENTRYPOINT ["python"]
CMD ["app.py"]

其中,FROM命令指定了基础镜像为Ubuntu 18.04。接着,我们进行了一些必要的安装,复制了当前目录的文件到/app目录下,设置了工作目录为/app,安装所需的Python包,最后,通过ENTRYPOINT和CMD命令指定了启动容器时需要执行的命令。

二、RUN命令

RUN命令用于在镜像中运行指定的命令。在Dockerfile中,我们可以通过RUN命令来安装软件、配置环境、编译程序等。例如,以下代码演示了如何通过RUN命令在Ubuntu镜像中安装Nginx:

FROM ubuntu:18.04
RUN apt-get update -y
RUN apt-get install -y nginx

注意,通过RUN命令安装的软件必须通过dpkg/apt安装包管理器进行安装。如果需要安装其他类型的软件,可以使用ADD或COPY命令添加到容器中。

三、CMD命令

CMD命令用于指定容器启动后默认要执行的命令。在Dockerfile中,可以通过CMD命令指定需要启动的应用程序或服务,也可以指定为一个Shell命令。例如,以下代码指定了当容器启动时,执行一个Python web应用程序:

FROM python:3.7-slim-buster
WORKDIR /app
COPY . /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 80
CMD ["python", "app.py"]

这里使用的基础镜像是Python 3.7,将当前目录复制到容器中,安装所需的Python包,设置端口号为80,并使用CMD命令指定了需要启动的Python web应用程序。

四、ENTRYPOINT命令

ENTRYPOINT命令用于配置容器启动时需要执行的命令。在Dockerfile中,可以使用ENTRYPOINT命令指定需要执行的应用程序或服务,也可以指定为一个Shell命令。例如,以下代码指定了在容器启动时需要执行的命令为Python:

FROM python:3.7-slim-buster
WORKDIR /app
COPY . /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 80
ENTRYPOINT ["python"]
CMD ["app.py"]

这里与之前的例子不同的地方在于,使用了ENTRYPOINT命令指定了需要执行的应用程序为Python。而CMD命令则指定了需要运行的Python应用程序。这种方式可以让用户在运行容器时,不需要指定执行的应用程序,即可启动容器并执行指定的命令。

五、ENV命令

ENV命令用于配置环境变量,其语法与在Linux中配置环境变量的方式相同。在Dockerfile中,可以使用ENV命令配置环境变量。例如,以下代码指定了一个名为ENV_VAR的环境变量,并将其值设置为testing:

FROM ubuntu:18.04
ENV ENV_VAR testing
RUN echo $ENV_VAR

这里使用的基础镜像是Ubuntu 18.04,使用ENV命令指定了一个名为ENV_VAR的环境变量,并将其值设置为testing。接着,使用RUN命令输出该环境变量的值。

六、ADD命令

ADD命令用于将文件或目录从构建上下文目录复制到容器目录中。在Dockerfile中,可以使用ADD命令添加文件或目录到镜像中。例如,以下代码将当前目录下的app目录复制到了容器的/app目录下:

FROM ubuntu:18.04
ADD app /app
WORKDIR /app

这里使用的基础镜像是Ubuntu 18.04,使用ADD命令将当前目录下的app目录复制到容器中的/app目录中。接着,使用WORKDIR命令设置工作目录为/app。

七、COPY命令

COPY命令用于将文件或目录从构建上下文目录复制到容器目录中。与ADD命令相比,COPY命令只能复制本地文件或目录,不能从tar包或URL中复制。例如,以下代码将当前目录下的app目录复制到了容器的/app目录下:

FROM ubuntu:18.04
COPY app /app
WORKDIR /app

这里使用的基础镜像是Ubuntu 18.04,使用COPY命令将当前目录下的app目录复制到容器中的/app目录中。接着,使用WORKDIR命令设置工作目录为/app。