就在最近,我不得不使用 Docker 来开发我的 Node.js web 应用程序。在这里,我想简要介绍一下如何实现这一目标。首先,我们需要一个 Node.js 应用程序。要么使用你自己的 Node.js 应用程序,要么使用这个最小的 Node.js 应用程序,或者这个带有 Express 的最小 Node.js 应用程序。在本 Docker 教程中,我们稍后将使用后者在浏览器中访问我们的输出。
git clone git@github.com:rwieruch/node-express-server.git
cd node-express-server
npm install
npm start
克隆并安装 Node.js 项目后,访问 http://localhost:3000 查看打印出来的Hello World。一切都应该按预期工作。现在,我们将使用 Docker 映像将这个 Node 应用程序装载到 Docker 容器中。首先,创建一个所谓的 Dockerfile:
touch Dockerfile
然后在 Dockerfile 中输入以下内容:
# Docker Image which is used as foundation to create
# a custom Docker Image with this Dockerfile
FROM node:10
# A directory within the virtualized Docker environment
# Becomes more relevant when using Docker Compose later
WORKDIR /usr/src/app
# Copies package.json and package-lock.json to Docker environment
COPY package*.json ./
# Installs all node packages
RUN npm install
# Copies everything over to Docker environment
COPY . .
# Uses port which is used by the actual application
EXPOSE 3000
# Finally runs the application
CMD [ "npm", "start" ]
Dockerfile 中的所有内容都由 Docker 解释器逐行读取。最后,它是创建适合您的应用程序的自定义 Docker Image 的蓝图。我们在这里使用的基本映像(这里是 FROM)确保所有 Node/npm 命令都可以在 Dockerfile 中使用。否则,如果使用不相关的 Node 映像,则需要在使用特定于 Node 的命令之前在 Dockerfile 中自己安装 Node。
可以选择创建一个 .dockerignore 文件来排除 Docker 进程中的文件夹和文件。例如,node_modules 不需要包含在 Docker 镜像中,因为它们将在 npm install
进程中安装(参见 Dockerfile)。因此,.dockerignore 文件的内容可以是:node_modules
接下来,在官方 Docker Hub 上创建一个帐户。之后,你应该有一个 Docker Hub 用户名,可以用来构建你的第一个 Docker 映像:
docker build -t <username>/node-express-server .
如果命令后的输出显示 Cannot connect to the Docker daemon at unix:///var/run/ Docker .sock. bat。Docker 守护进程在运行吗 ?您需要确保与 Docker 相关的一切都已设置并正常运行。即使它在使用 Docker -machine ls
打印所有 Docker 引擎时正常运行,您可能需要再次为 Docker 引擎设置环境变量。
如果 Docker 映像的构建运行成功,您应该能够使用以下命令列出您的映像:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<username>/node-express-server latest 036d38e931e4 5 minutes ago 153MB
node alpine 532fd65ecacd 9 days ago 113MB
hello-world
这个 Docker 映像是在 Docker 容器中运行 Docker 应用程序所需的一切。一个 Docker 映像可以用来启动多个 Docker 容器,这有助于水平扩展应用程序的大小,或者运行具有不同容器配置的应用程序。现在,我们只运行一个基于 Docker 映像的 Docker 容器:
docker run --name node-express-server -p 4680:3000 -d <username>/node-express-server
这个命令创建并运行一个具有特定名称的 Docker 容器、两个端口的映射和一个 Docker 映像。即使 Dockerfile 定义了一个特定的端口,我们也可以将其重定向到这个特定 Docker 容器的自定义端口。在基于 Docker 映像创建并运行 Docker 容器之后,我们应该能够列出所有 Docker 容器:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab03066fb631 <username>/node-express-server "docker-entrypoint.s…" 9 minutes ago Up 9 minutes 0.0.0.0:4680->3000/tcp/tcp node-express-server
Before we can visit our application in the browser, we need to find out the IP address of our running Docker engine:
在我们在浏览器中访问应用程序之前,我们需要找到正在运行的 Docker 引擎的 IP 地址:
docker-machine ip default
-> 192.168.99.100
最后,您应该可以访问 http://192.168.99.100:4680
。注意您的 IP 地址和端口可能会有所不同。恭喜你,你已经在 Docker 容器中发布了你的第一个 Node.js web 应用。
- 本教程是本系列教程的第 2 部分。
- 如何在 MacOS 上安装 Docker。
评论 (0)