Docker 多阶段构建挑战

DockerIntermediate
立即练习

简介

Docker 多阶段构建(Multi-stage Build)是一项允许你在 Dockerfile 中使用多个阶段来创建最终 Docker 镜像的功能。在本挑战中,你将学习如何利用这一功能来构建更小、更高效的 Docker 镜像。

创建支持多阶段构建的 Dockerfile

在本节中,你将创建一个使用多阶段构建的 Dockerfile

任务

  • 创建一个包含两个阶段的 Dockerfile。第一阶段通过安装必要的依赖项并运行构建脚本来构建应用程序;第二阶段通过从第一阶段复制编译后的代码、仅安装生产环境所需的依赖项并暴露必要的端口,来创建最终的镜像。

示例

以下是你将要执行的操作示例:

  1. 创建一个名为 myapp 的新目录并进入该目录。

    mkdir myapp
    cd myapp
    
  2. 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
    
  3. 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 的新镜像。

示例

以下是你应该能够完成的操作示例:

  1. 使用 docker build 命令构建一个名为 myapp 的新镜像。

    docker build -t myapp .
    
  2. 使用 docker images 验证镜像是否构建成功。

要求

要完成此挑战,你需要:

  • /home/labex/project/myapp 目录下执行 docker build 命令。
  • 将镜像命名为 myapp

运行 Docker 容器

在这一步中,你将使用该 Docker 镜像来运行一个容器。

任务

  • 使用 myapp 镜像运行一个容器。该容器应将容器内的 3000 端口映射到主机的 3030 端口,然后你可以在浏览器中访问该应用程序。

示例

以下是你应该能够完成的操作示例:

  1. 启动一个名为 my-app 的新 Docker 容器。

    docker run --name my-app -p 3030:3000 myapp
    
  2. 打开 Web 浏览器并访问 http://localhost:3030 以访问正在运行的应用程序。

要求

要完成此挑战,你需要:

  • 运行容器并将其命名为 my-app
  • 将容器内的 3000 端口映射到主机的 3030 端口。

总结

在本挑战中,你学习了如何使用 Docker 多阶段构建来创建更小、更高效的 Docker 镜像。通过在 Dockerfile 中使用多个阶段,你可以分离构建环境和运行环境,从而减小最终 Docker 镜像的体积。掌握这些知识后,你现在可以开始使用多阶段构建来构建自己的 Docker 镜像了。

✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习