完整实现步骤(Dockerfile + 配置 + 网页)

1. 准备项目目录结构

在服务器上创建一个专门的构建目录,结构如下:

Plaintext

my-game/
├── Dockerfile
├── default.conf
└── huangjinkuanggong/
    └── index.html

2. 准备 Nginx 配置文件 default.conf

Nginx

server {
    listen       80;
    server_name  _;

    root   /usr/share/nginx/html/huangjinkuanggong;
    index  index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

3. 准备 Dockerfile

基于官方极简的 nginx:alpine 镜像来构建:

Dockerfile

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
     apk update && \
     apk add nginx && \
     rm -rf /var/cache/ rm -f /usr/share/nginx/*  && \
     mkdir -pv /usr/share/nginx/html/huangjinkuanggong  && \
     mkdir -pv /usr/share/nginx/html/killbird

# ADD指令会将tar包的内容自动解压到容器的指定路径,相当于: "tar oldboyedu-huangjinkuanggong.tar.gz -C /usr/share/nginx/html/huangjinkuanggong"
# 可以理解为先拷贝文件到容器中,然后在解压,最后删除源文件。
ADD huangjinkuanggong.tar.gz /usr/share/nginx/html/

# 将本地文件拷贝到容器的指定路径并覆盖原有的文件内容
COPY game.conf /etc/nginx/http.d/default.conf

# 暴露 80 端口
EXPOSE 80

# 指定容器的启动命令
CMD ["nginx","-g","daemon off;"]

4. 构建并启动容器

在 my-game 目录下执行构建:

Bash

# 构建镜像,命名为 my-game:v1
docker build -t my-game:v1 .

验证方法:执行 docker images | grep my-game,能看到镜像大小约只有几十 MB。

启动容器并映射到宿主机端口(注意避开已被 NPM 占用的 80 端口,例如映射为 8082):

Bash

docker run -d \
  --name web-game \
  --restart unless-stopped \
  -p 8082:80 \
  my-game:v1

验证方法:

  1. 执行 docker ps | grep web-game,状态显示为 Up。

  2. 终端执行 curl [http://127.0.0.1:8082](http://127.0.0.1:8082),能正确输出 index.html 的 HTML 内容。

5. 两种对外访问方式

  • 方式 A(直接端口访问): 在云服务器安全组放行 8082 端口,浏览器直接访问 http://你的公网IP:8082。

  • 方式 B(通过现有的 NPM 绑定域名访问,无需放行 8082): 把这个容器接入你现有的 Docker 网络(比如加入 NPM 所在的网络),在 NPM 面板中添加一个 Proxy Host:

    • Domain Names:填你的域名(如 game.yourdomain.com)

    • Forward Hostname / IP:填容器名 web-game

    • Forward Port:填 80

    • 勾选 SSL 证书后直接以标准 HTTPS 域名访问。