容器化应用程序

在本指南的其余部分,你将使用一个运行在 Node.js 上的简单待办事项列表管理器。如果你不熟悉 Node.js,请不用担心。本指南不需要任何 JavaScript 的先验知识。

前提条件

获取应用

在运行应用程序之前,你需要将应用程序源代码获取到你的机器上。

  1. 使用以下命令克隆 getting-started-app 仓库

    $ git clone https://github.com/docker/getting-started-app.git
    
  2. 查看克隆仓库的内容。你应该看到以下文件和子目录。

    ├── getting-started-app/
    │ ├── .dockerignore
    │ ├── package.json
    │ ├── README.md
    │ ├── spec/
    │ ├── src/
    │ └── yarn.lock

构建应用镜像

要构建镜像,你需要使用 Dockerfile。Dockerfile 只是一个没有文件扩展名的纯文本文件,其中包含一系列指令脚本。Docker 使用此脚本来构建容器镜像。

  1. 在 `getting-started-app` 目录中,即 `package.json` 文件所在的同一位置,创建一个名为 `Dockerfile` 的文件,内容如下:

    # syntax=docker/dockerfile:1
    
    FROM node:lts-alpine
    WORKDIR /app
    COPY . .
    RUN yarn install --production
    CMD ["node", "src/index.js"]
    EXPOSE 3000

    此 Dockerfile 从 `node:lts-alpine` 基础镜像开始,这是一个预装了 Node.js 和 Yarn 包管理器的轻量级 Linux 镜像。它将所有源代码复制到镜像中,安装必要的依赖项,并启动应用程序。

  2. 使用以下命令构建镜像

    在终端中,确保你位于 `getting-started-app` 目录中。将 `/path/to/getting-started-app` 替换为你的 `getting-started-app` 目录的路径。

    $ cd /path/to/getting-started-app
    

    构建镜像。

    $ docker build -t getting-started .
    

    `docker build` 命令使用 Dockerfile 来构建新镜像。你可能已经注意到 Docker 下载了很多“层”。这是因为你指示构建器要从 `node:lts-alpine` 镜像开始。但由于你的机器上没有该镜像,Docker 需要下载它。

    在 Docker 下载镜像后,Dockerfile 中的指令会将你的应用程序复制进来,并使用 `yarn` 安装应用程序的依赖项。`CMD` 指令指定了从该镜像启动容器时要运行的默认命令。

    最后,`-t` 标志为你的镜像打上标签。你可以将此视为最终镜像的一个人类可读的名称。由于你将镜像命名为 `getting-started`,因此在运行容器时可以引用该镜像。

    `docker build` 命令末尾的 `.` 告诉 Docker 应该在当前目录中查找 `Dockerfile`。

启动应用容器

现在你已经有了一个镜像,可以使用 `docker run` 命令在容器中运行应用程序了。

  1. 使用 `docker run` 命令运行你的容器,并指定你刚创建的镜像名称

    $ docker run -d -p 127.0.0.1:3000:3000 getting-started
    

    `-d` 标志(`--detach` 的缩写)在后台运行容器。这意味着 Docker 会启动你的容器并返回终端提示符。此外,它不会在终端中显示日志。

    `-p` 标志(`--publish` 的缩写)创建主机和容器之间的端口映射。`-p` 标志接受一个格式为 `HOST:CONTAINER` 的字符串值,其中 `HOST` 是主机上的地址,`CONTAINER` 是容器上的端口。该命令将容器的端口 3000 发布到主机上的 `127.0.0.1:3000` (`localhost:3000`)。如果没有端口映射,你将无法从主机访问应用程序。

  2. 几秒钟后,打开你的 Web 浏览器访问 http://localhost:3000。你应该会看到你的应用。

    Empty todo list
  3. 添加一两个条目,看看它是否按预期工作。你可以将条目标记为已完成并移除它们。你的前端已成功将条目存储在后端。

至此,你已拥有一个运行中的待办事项列表管理器,其中包含一些条目。

快速查看你的容器,你应该会看到至少一个正在运行的容器,它正在使用 `getting-started` 镜像并在端口 `3000` 上运行。要查看你的容器,可以使用 CLI 或 Docker Desktop 的图形界面。


在终端中运行 `docker ps` 命令以列出你的容器。

$ docker ps

应该会出现类似于以下的输出。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
df784548666d        getting-started     "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        127.0.0.1:3000->3000/tcp   priceless_mcclintock

在 Docker Desktop 中,选择容器选项卡以查看容器列表。

Docker Desktop with get-started container running

总结

在本节中,你学习了创建 Dockerfile 来构建镜像的基础知识。构建镜像后,你启动了一个容器并看到了正在运行的应用。

相关信息

下一步

接下来,你将对应用进行修改,并学习如何使用新镜像更新正在运行的应用程序。在此过程中,你还会学习一些其他有用的命令。

页面选项