构建Docker镜像-Dockerfiles的介绍

34 阅读2分钟

Dockerfile是构建Docker镜像的配方。

这就是工作流程:首先你创建一个Dockefile,然后你用docker build ,从它建立一个Docker镜像,最后你从镜像中运行一个容器。

Dockerfile是一个文本文件,包含如何构建镜像的说明。

这些指令是配置语言的一部分,其中包括关键字,如FROMLABELRUNCOPYENTRYPOINTCMDEXPOSEENV 等等。

让我们来创建我们的第一个Docker文件。

假设你有一个文件夹,里面有一个简单的Node.js应用程序,由一个app.js ,一个package.json 文件,其中列出了你在运行应用程序之前需要安装的几个依赖项,以及package-lock.json

在它里面,创建一个名为Dockerfile 的纯文本文件,没有扩展名,有这样的内容。

FROM node:14
WORKDIR /usr/src/app
COPY package*.json app.js ./
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]

注意:在CMD 行中使用双引号。单引号会导致错误。

在第一行,我们说我们要从哪个图像开始。这将是我们的基本图像。在这种情况下,它将采用官方的Node.js镜像,基于Alpine Linux,使用Node 14。当从Docker文件中创建一个容器时,Docker将从Docker Hub获得该镜像。

接下来我们将工作目录设置为/usr/src/app ,这意味着我们所有的命令都将在这个文件夹中运行,直到我们再次改变它。这是一个我们知道已经存在于Node镜像中的文件夹。

我们将当前文件夹中存在的package.jsonpackage-lock.json (使用* 通配符)和app.js 文件复制到工作目录中。

我们运行npm install 来安装package.json 文件中列出的软件包。

然后,我们将3000端口暴露给外界,因为我们的应用程序就是在这个端口上运行的。除非你使用EXPOSE 命令暴露它的一个端口,否则容器是100%与网络隔离的。我们稍后会看到如何将我们电脑上的端口映射到Docker容器中的端口。

最后,我们运行node app.js ,以启动该应用程序。

这是一个Docker文件,我们很快就会看到如何从它那里实际创建一个容器。