Docker 是一个非常流行的容器化技术,可以用于部署应用程序、测试环境和开发环境等。Dockerfile 文件是用于定义 Docker 镜像的文本文件。Dockerfile 文件可以用来构建 Docker 镜像,它包含一系列指令,可以让你在构建镜像时自动化执行一些任务。
本文将介绍 Dockerfile 文件的常用指令和实用技巧,帮助你更好地理解和使用 Dockerfile 文件。
FROM
FROM 指令用于定义所使用的基础镜像,可以指定一个已有的基础镜像,也可以是一个本地的 Dockerfile 文件。比如:
FROM node:14
表示使用 node:14 作为基础镜像。
RUN
RUN 指令用于在容器中运行命令,可以用于安装软件、更新系统等。比如:
RUN apt-get update && apt-get install -y curl
表示运行 apt-get update 和 apt-get install 命令来安装 curl。
WORKDIR
WORKDIR 指令用于设置工作目录,等同于 cd 命令。比如:
WORKDIR /app
表示设置工作目录为 /app。
COPY
COPY 指令用于拷贝文件或目录到容器中。比如:
COPY package*.json ./ COPY src/ ./src/
表示拷贝 package.json 和 package-lock.json 文件到容器的当前目录下,然后拷贝 src 目录到容器的 src 目录下。
EXPOSE
EXPOSE 指令用于定义容器监听的端口,但并不会实际上打开端口。比如:
EXPOSE 3000
表示容器会监听 3000 端口。
CMD
CMD 指令用于指定容器启动时运行的命令,默认为 /bin/sh -c。在 Dockerfile 文件中可以多次使用 CMD 指令,但是只有最后一个有效。比如:
CMD ["node", "index.js"]
表示启动容器时运行 node index.js 命令。
ARG
ARG 指令用于声明一个环境变量,其值可以在构建时通过 --build-arg 参数指定。比如:
ARG NODE_VERSION=14 FROM node:$NODE_VERSION
表示声明一个名为 NODE_VERSION 的环境变量,如果构建时不传递 --build-arg 参数,则会使用默认值 14。
实用技巧
利用 .dockerignore 文件
在构建 Docker 镜像时,可以使用 .dockerignore 文件来排除一些不必要的文件或目录,以减少构建时间和镜像大小。
利用多段构建
可以通过多个 FROM 指令来实现多段构建,每个 FROM 指令定义一个基础镜像。这样可以将应用程序和依赖包的安装分离在两个不同的阶段中,从而减小镜像大小。
FROM node:14 as build WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build FROM node:14-alpine WORKDIR /app COPY --from=build /app/dist ./dist COPY package*.json ./ RUN npm install --only=production CMD ["node", "dist/index.js"]
这个 Dockerfile 文件可以分为两个阶段。第一阶段使用 node:14 镜像作为基础镜像,安装依赖包和构建应用程序。第二阶段使用 node:14-alpine 镜像作为基础镜像,安装生产环境的依赖包和启动应用程序。
总结
Dockerfile 文件是 Docker 镜像的构建蓝图,可以用来构建一些常用的镜像或者自定义镜像。本文介绍了常用的指令和实用技巧,希望对你的 Docker 学习和开发有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65925c32eb4cecbf2d72e676