Docker 下开发 Node.js 应用

Docker 下开发 Node.js 应用

Flying
2019-12-28 / 0 评论 / 198 阅读 / 正在检测是否收录...

就在最近,我不得不使用 Docker 来开发我的 Node.js web 应用程序。在这里,我想简要介绍一下如何实现这一目标。首先,我们需要一个 Node.js 应用程序。要么使用你自己的 Node.js 应用程序,要么使用这个最小的 Node.js 应用程序,或者这个带有 Express 的最小 Node.js 应用程序。在本 Docker 教程中,我们稍后将使用后者在浏览器中访问我们的输出。

docker-node.svg

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 应用。

1

评论 (0)

取消