简介
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 镜像的体积。掌握这些知识后,你现在可以开始使用多阶段构建来构建自己的 Docker 镜像了。



