介绍
Docker 多阶段构建(Multi-stage Build)是一项允许你在单个 Dockerfile 中使用多个阶段来构建最终镜像的特性。在本挑战中,你将学习如何使用 Docker 多阶段构建来创建一个体积更小、运行更高效的 Docker 镜像。
使用多阶段构建创建 Dockerfile
在本节中,你将创建一个使用多阶段构建技术的 Dockerfile。
任务
- 创建一个新的
Dockerfile,要求包含两个阶段。第一阶段用于构建应用程序,包括安装必要的依赖项并运行构建脚本。第二阶段用于生成最终镜像,通过从第一阶段复制编译后的代码,仅安装生产环境依赖,并暴露必要的端口。
示例
以下是你需要执行的步骤示例:
创建一个名为
myapp的新目录并进入该目录。mkdir myapp cd myapp从
https://github.com/labex-labs/nodejs-example.git下载 NodeJS 源代码。git clone https://github.com/labex-labs/nodejs-example.git将下载的代码移动到
myapp目录根目录下。mv nodejs-example/* . rm -rf nodejs-example在
myapp目录中创建一个名为Dockerfile的新文件,内容如下:## Stage 1: Build the application FROM node:14-alpine AS base WORKDIR /app COPY . ./ RUN npm install ## Stage 2: Create the final image FROM node:14-alpine WORKDIR /app COPY --from=base /app/ . EXPOSE 3000 CMD [ "npm", "start" ]
要求
要完成此挑战,你需要:
- 在
/home/labex/project目录下创建一个名为myapp的目录。 - 将 NodeJS 源代码克隆到
myapp目录中。 - 在
myapp目录中按照指定内容创建Dockerfile。
构建 Docker 镜像
在这一步中,你将使用刚才编写的 Dockerfile 来创建镜像。
任务
- 构建一个名为
myapp的新镜像。
示例
以下是你应当完成的操作示例:
使用
docker build命令构建名为myapp的新镜像。docker build -t myapp .使用
docker images命令验证镜像是否构建成功。
要求
要完成此挑战,你需要:
- 在
/home/labex/project/myapp目录下执行docker build命令。 - 将镜像命名为
myapp。
运行 Docker 容器
在这一步中,你将使用构建好的 Docker 镜像来启动一个容器。
任务
- 使用
myapp镜像运行一个容器。容器应将内部的3000端口映射到宿主机的3030端口,然后通过浏览器访问该应用程序。
示例
以下是你应当完成的操作示例:
启动一个名为
my-app的新 Docker 容器。docker run --name my-app -p 3030:3000 myapp打开 Web 浏览器并访问
http://localhost:3030以查看运行中的应用程序。
要求
要完成此挑战,你需要:
- 运行容器时将其命名为
my-app。 - 将容器内部的
3000端口映射到宿主机的3030端口。
总结
在本挑战中,你学习了如何使用 Docker 多阶段构建来创建更小、更高效的 Docker 镜像。通过在 Dockerfile 中定义多个阶段,你可以有效地分离构建环境和运行时环境,从而显著减小最终镜像的体积。掌握了这些知识后,你就可以开始在自己的项目中使用多阶段构建来优化 Docker 镜像了。



