为自己的应用创建 Docker 镜像

未匹配的标注

本教程将通过一个最简单的、使用 JavaScript 开发的待办事项管理 Web 应用程序贯穿始终,下文简称为:todo-app。这个应用程序的代码已经写好并提供了源码的下载地址,所以如果你不太熟悉 JavaScript 和 Node.js 也完全没有任何关系,依旧可以很轻松的学习本教程,因为我们的学习重点是 Docker,所以放心的继续往下看吧。

此时,你只是想开发一个最小可行产品(MVP)来证明自己的想法,展示它的工作原理和功能,暂时无需考虑其他复杂因素。

Todo List Manager Screenshot

获取 todo-app 源码

在运行 todo-app 之前,需要将它的源代码下载到自己的计算机上。在实际工作中开发的项目,通常是去公司的代码仓库克隆。但是,针对本教程,我们创建好了一个包含应用程序源码的 ZIP 压缩文件。

  1. 点击这里下载 并解压,解压之后默认文件夹名称是 app, 非必要的情况下,不要修改文件夹名称,因为保存名称一致,有利于后续文档的说明。
  2. 使用你喜欢的编辑器打开,下图使用的是 Visual Studio Code 编辑器作为演示,你可以使用任何自己喜欢的编辑器打开它,打开之后会看到 package.json 文件、 yarn.lock 文件和两个子目录 srcspec
    Screenshot of Visual Studio Code opened with the app loaded

todo-app 创建镜像

需要一个 Dockerfile 文件来为我们的应用程序创建 Docker 容器镜像。Dockerfile 文件就是一个文本文件,文本的内容描述着如何一步步构建出我们需要的镜像。

  1. 创建一个名为 Dockerfile 的文件,与 package.json 文件同一层级,内容如下:

    FROM node:12-alpine
    WORKDIR /app
    COPY . .
    RUN yarn install --production
    CMD ["node", "src/index.js"]

    这个 Dockerfile 的每一行都代表着告诉 Docker 镜像构造器每一步该怎么做:

    • 我们的镜像要基于 node: 12-alpine 镜像
    • 指定镜像的工作目录是 /app
    • 接着将主机上当前项目目录下的所有内容(即:app 目录下的所有内容)复制到镜像中的当前工作目录(即:/app 目录下)
    • 接着执行 yarn install --production 命令为 todo-app 安装依赖
    • 最后一步通过 CMD 指定镜像被启动时默认要执行的命令,即通过 node 真正启动我们的 todo-app Web 应用程序。

    备注:确保刚刚创建的 Dockerfile 文件没有文件扩展名,有些编辑器可能会自动附加文件扩展名。

  2. 打开命令行并进入到 Dockerfile 文件所在的 app 目录,执行如下命令:

    docker build -t todo-app .

    这条命令就是使用刚刚创建的 Dockerfile 文件构建出一个新的容器镜像。从这条命令的输出结果中,你应该已经注意到有很多步骤,对应着 Dockerfile 文件的每一行。
    -t 标志代表为我们的镜像打标签,可以简单地理解成为镜像取一个易于理解的名称。由于我们将镜像命名为 todo-app 因此可以在运行容器时引用这个镜像名称。docker build 命令最后的 . 代表告诉 Docker 在当前目录下查找 Dockerfile 文件。

用刚创建的镜像启动容器

现在已经为我们的 todo-app 应用创建了一个名字为 todo-app 的 Docker 镜像,看看如何使用它:

  1. 使用 docker run 命令启动一个新容器,并指定使用我们刚刚创建的镜像:

    docker run -dp 3000:3000 todo-app

    还记得 -d-p 标记吗?
    -d - 让容器保持在后台运行;
    -p 3000:3000 - 将容器中的 3000 端口映射到本机的 3000 端口。
    因此,通过这条命令,我们使用自己创建的 todo-app 镜像启动了一个新容器。在容器中的 3000 端口上启动着我们自己的 todo-app Web 应用程序,并将容器中的 3000 端口映射到本机的 3000 端口。

  2. 在本机上访问 http://localhost:3000 就可以看到我们自己的应用了:
    Empty Todo List

此时,一个由我们自己亲手创建的 todo-app 应用已经运行在 Docker 上了。

回顾

在这一小节中,我们学习了有关构建容器镜像的基础知识,并创建了一个 Dockerfile 来完成此操作。构建镜像完成之后,我们使用该镜像启动了一个新容器并看到了正在运行的、我们自己的 todo-app 应用。

接下来,将对我们的应用程序进行修改。在此过程中,进一步学习 Docker 的其他知识。

原始资料:Our Application

配套视频
www.bilibili.com/video/BV1d5411A7h...

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~