Docker 多阶段构建挑战

DockerBeginner
立即练习

介绍

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 镜像了。

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