将应用程序容器化
在本指南的其余部分中,您将使用在 Node.js 上运行的简单待办事项列表管理器。如果您不熟悉 Node.js,请不要担心。本指南不需要任何 JavaScript 经验。
先决条件
- 您已安装最新版本的 Docker Desktop。
- 您已经安装了 Git 客户端。
- 您可以使用 IDE 或文本编辑器来编辑文件。 Docker 建议使用 Visual Studio Code。
- Code。
下载这个软件
在运行应用程序之前,您需要将应用程序源代码获取到您的计算机上。
-
使用以下命令克隆 getting-started-app 存储库:
$ git clone https://github.com/docker/getting-started-app.git
-
查看克隆存储库的内容。您应该看到以下文件和子目录。
├── getting-started-app/ │ ├── package.json │ ├── README.md │ ├── spec/ │ ├── src/ │ └── yarn.lock
构建应用程序的映像
要构建映像,您需要使用 Dockerfile。 Dockerfile 只是一个基于文本的文件,没有文件扩展名,但包含指令脚本。 Docker 使用此脚本构建容器映像。
-
在该
getting-started-app
目录中与该文件相同的位置package.json
,创建一个名为Dockerfile
.您可以使用以下命令根据您的操作系统创建 Dockerfile。Mac / Linux / Windows (Git Bash) Windows(命令提示符) Windows(PowerShell)
在终端中,运行以下命令。
确保您位于该
getting-started-app
目录中。替换/path/to/getting-started-app
为您的目录的路径getting-started-app
。$ cd /path/to/getting-started-app
创建一个名为 的空文件
Dockerfile
。$ touch Dockerfile
-
使用文本编辑器或代码编辑器,将以下内容添加到 Dockerfile 中:
# syntax=docker/dockerfile:1FROM node:18-alpine WORKDIR /app COPY . . RUN yarn install --production CMD ["node", "src/index.js"] EXPOSE 3000
-
使用以下命令构建图像:
在终端中,确保您位于
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:18-alpine
映像开始。但是,由于您的计算机上没有该镜像,因此 Docker 需要下载该镜像。Docker 下载映像后,Dockerfile 中的指令会复制到您的应用程序中并用于
yarn
安装应用程序的依赖项。该CMD
指令指定从此映像启动容器时要运行的默认命令。最后,
-t
旗帜标记您的图像。将此视为最终图像的人类可读名称。由于您命名了该镜像getting-started
,因此您可以在运行容器时引用该镜像。命令末尾
.
的告诉 Docker 它应该在当前目录中docker build
查找。
启动应用程序容器
现在您已经有了映像,您可以使用docker run
命令在容器中运行应用程序。
-
使用以下命令运行容器
docker run
并指定刚刚创建的映像的名称:$ docker run -dp 127.0.0.1:3000:3000 getting-started
该
-d
标志( 的缩写--detach
)在后台运行容器。这意味着 Docker 启动您的容器并将您返回到终端提示符。您可以通过在Containers下的 Docker Dashboard 中查看容器或docker ps
在终端中运行来验证容器是否正在运行。该
-p
标志( 的缩写--publish
)在主机和容器之间创建端口映射。该-p
标志采用 格式的字符串值HOST:CONTAINER
,其中HOST
是主机上的地址,CONTAINER
是容器上的端口。该命令将容器的端口 3000 发布到 主机上的127.0.0.1:3000
( )。localhost:3000
如果没有端口映射,您将无法从主机访问应用程序。 -
几秒钟后,打开 Web 浏览器访问 http://localhost:3000。您应该会看到您的应用程序。
-
添加一两个项目,看看它是否按您的预期工作。您可以将项目标记为完成并将其删除。您的前端已成功将项目存储在后端。
此时,您已经有一个正在运行的待办事项列表管理器,其中包含一些项目。
如果您快速查看一下容器,您应该会看到至少有一个容器正在使用该getting-started
映像并在 port 上运行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
概括
在本部分中,您学习了有关创建 Dockerfile 来构建映像的基础知识。构建镜像后,您启动了一个容器并看到正在运行的应用程序。
相关信息:
- Dockerfile 参考
- docker CLI 参考
- 使用 Docker 构建指南