环境
- linux centos 7.6
- Docker version 24.0.5, build ced0996
- docker-compose version v2.20.2
需求
使用 Dockerfile 构建 nginx 镜像,访问静态资源
目标结构
[root@node2 offlinemap]# tree
.
├── Dockerfile
├── docker-run.sh
├── docker-stop.sh
├── Makefile
├── roadmap
│   └── index.html
└── scripts
    └── nginx
        └── api_proxy.conf
index.html
roadmap/index.html
hello nginx roadmap !!!api_proxy.conf
nginx 配置文件
scripts/nginx/api_proxy.conf
server {
  listen 80; #监听容器内的端口
  server_name cert-view-web;
  client_max_body_size 10m;
  # 配置前端静态文件目录
  location / {
    index index.html index.htm;
    root /usr/share/nginx/html;
    try_files $uri $uri/ /index.html;
  }
  # 配置后台go服务api接口服务 代理到8081端口
}Dockerfile
FROM nginx:1.16.1
MAINTAINER wanghaima
# 复制配置文件
COPY scripts/nginx/api_proxy.conf /etc/nginx/conf.d/api_proxy.conf
# 复制宿主机当前路径上的roadmap目录,到容器/usr/share/nginx/目录中,并改名为html
COPY roadmap /usr/share/nginx/html
EXPOSE 88
# 防止主程序退出后,nginx容器也就退出了
CMD ["nginx", "-g", "daemon off;"]
Makefile
.PHONY: build run deploy check
check:
    @revive ./...
build:
    # docker build offlinemap_api image
    @docker build -t 192.168.2.103/public/offlinemap:main-V1.0.0 .
    @echo "offlinemap_api image build successful"
run:
    # docker run offlinemap_api container
    @if [ $(shell docker ps -aq --filter name=offlinemap_api --filter publish=88) ]; then docker rm -f offlinemap_api; fi
    # 这里注意-v挂载的宿主机的地址写部署时的实际决对路径
    @docker run --name=offlinemap_api -p 88:80 -v /data/docker/offlinemap/scripts/nginx/api_proxy.conf:/etc/nginx/conf.d/api_proxy.conf -d --restart=always 192.168.2.103/public/offlinemap:main-V1.0.0
    @docker image prune -f
    @echo "offlinemap_api api service is running successful"
stop:
    # docker delete offlinemap_api container
    @if [ $(shell docker ps -aq --filter name=offlinemap_api --filter publish=88) ]; then docker rm -f offlinemap_api; fi
    @echo "go-admin stop success"
docker-up:
    # docker-compose up -d run offlinemap_api container
    @if [ $(shell docker ps -aq --filter name=offlinemap_api --filter publish=88) ]; then docker-compose down; fi
    @docker-compose up -d
    @docker image prune -f
    @echo "offlinemap_api api service is running successful"
docker-down:
    # docker-compose down stop offlinemap_api container
    @docker-compose down
    @echo "offlinemap_api api service is down successful"
deploy:
    # @git checkout main
    # @git pull origin main
    make build
    make run
docker-compose.yml
docker-compose.yml
version: '3.8'
services:
  offline-map-api:
    container_name: offlinemap
    image: 192.168.2.103/public/offlinemap:main-V1.0.0
    privileged: true
    restart: always
    ports:
      - 88:80
    volumes:
      # 宿主机的地址:容器内的地址
      - ./scripts/nginx/api_proxy.conf:/etc/nginx/conf.d/api_proxy.conf
    #network_mode: host # 使用network_mode:host模式,上面的ports端口映射会失效 访问端口将以nginx中配置的为准
    networks:
      - myweb
networks:
  myweb:
    driver: bridge
docker-run.sh
#!/bin/bash
docker-compose up -ddocker-stop.sh
#!/bin/bash
docker-compose down启动
以下任选一条命令执行即可
- docker-compose up -d
- make docker-up
- sh docker-stop.sh
- make docker run
测试服务
[root@node2 offlinemap]# curl 192.168.2.102:88
hello nginx roadmap !!!停止
以下任选一条命令执行即可
- docker-compose down
- make docker-donw
- sh docker-stop.sh
- make docker stop
作者:海马  创建时间:2023-08-27 09:09
最后编辑:海马 更新时间:2025-08-02 13:25
最后编辑:海马 更新时间:2025-08-02 13:25
