制作 nginx node docker 镜像

在现代的软件开发中,使用 Docker 镜像进行部署已经成为一种常见的做法。通过 Docker,我们可以将应用程序及其环境打包成一个独立的容器,便于在不同的环境中运行。本文将介绍如何制作一个包含 Nginx 和 Node.js 的 Docker 镜像。

准备工作

在开始制作 Docker 镜像之前,我们需要先安装 Docker。可以根据官方文档进行安装:[Docker 官方文档](

接下来,我们需要准备一个简单的 Node.js 应用程序以及 Nginx 的配置文件。假设我们的 Node.js 应用程序代码如下:

// index.js
const http = require('http');

http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3000, '0.0.0.0');

console.log('Server running at 

Nginx 的配置文件 nginx.conf 如下:

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://node-app:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

制作 Docker 镜像

创建 Dockerfile

在项目根目录下创建一个名为 Dockerfile 的文件,用于定义 Docker 镜像的构建步骤。以下是一个示例 Dockerfile

# 使用官方 Node.js 镜像作为基础镜像
FROM node:14

# 设置工作目录
WORKDIR /app

# 将应用程序代码复制到镜像中
COPY package.json package-lock.json ./
RUN npm install
COPY . .

# 构建 Node.js 服务
EXPOSE 3000
CMD ["node", "index.js"]

编译镜像

在命令行中执行以下命令来构建 Docker 镜像:

docker build -t my-node-app .

创建 Docker 网络

docker network create my-network

启动 Node.js 服务

docker run -d --name node-app --network my-network my-node-app

创建 Nginx 配置文件

在项目根目录下创建一个名为 nginx.conf 的文件,内容为前文提到的 Nginx 配置。

创建 Nginx Dockerfile

# 使用官方 Nginx 镜像作为基础镜像
FROM nginx

# 将自定义的 Nginx 配置文件复制到镜像中
COPY nginx.conf /etc/nginx/nginx.conf

编译 Nginx 镜像

docker build -t my-nginx .

启动 Nginx 服务

docker run -d -p 80:80 --network my-network --name my-nginx my-nginx

总结

通过以上步骤,我们成功制作了一个包含 Nginx 和 Node.js 的 Docker 镜像,并成功将两个服务运行起来。Docker 镜像的使用使得应用程序的部署变得更加简单和便捷,同时也实现了应用程序与环境的隔离和一致性,为现代软件开发提供了更好的解决方案。

甘特图

gantt
    title 制作 nginx node docker 镜像甘特图
    section 准备工作
    安装Docker :done, des1, 2022-01-01, 2d
    准备应用程序代码 :done, des2, after des1, 2d
    准备Nginx配置文件 :done, des3, after des2, 1d

    section 制作Docker镜像
    创建Dockerfile :done, a1, 2022-01-04, 1d
    编译镜像 :done, a2, 2022-01-05, 1d
    创建Docker网络