Skip to content

容器化应用程序

原文:https://docs.docker.com/get-started/02_our_app/

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

先决条件

获取应用程序

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

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

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

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

构建应用程序的镜像

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

  1. getting-started-app 目录中,与 package.json 文件同一位置,创建一个名为 Dockerfile 的文件。你可以使用以下命令根据你的操作系统创建 Dockerfile。

    在终端中运行以下命令。

    确保你在 getting-started-app 目录中。将 /path/to/getting-started-app 替换为你的 getting-started-app 目录的路径。

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

    创建一个名为 Dockerfile 的空文件。

    console
    touch Dockerfile
  2. 使用文本编辑器或代码编辑器,将以下内容添加到 Dockerfile 中:

    dockerfile
    # syntax=docker/dockerfile:1
    
    FROM node:18-alpine
    WORKDIR /app
    COPY . .
    RUN yarn install --production
    CMD ["node", "src/index.js"]
    EXPOSE 3000
  3. 使用以下命令构建镜像:

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

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

    构建镜像。

    console
    docker build -t getting-started .

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

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

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

    docker build 命令末尾的 . 告诉 Docker 在当前目录中寻找 Dockerfile

启动应用程序容器

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

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

    console
    docker run -dp 127.0.0.1:3000:3000 getting-started

    -d 标志(简称 --detach)在后台运行容器。 这意味着 Docker 启动你的容器并返回你到终端 提示符。你可以通过在 Docker Dashboard 下的 Containers 查看或在终端运行 docker ps 来验证容器是否在运行。

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

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

    空的待办事项列表

  3. 添加一两个项目并查看它是否按照你的期望工作。你可以标记项目为完成并删除它们。你的前端成功地在后端存储了项目。

此时,你有一个运行中的待办事项列表管理器,并有一些项目。

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

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

console
docker ps

输出类似以下内容应该出现。

console
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

总结

在这一节中,你学习了关于创建 Dockerfile 以构建镜像的基础知识。构建完镜像后,你启动了一个容器并看到了运行中的应用程序。

相关信息: