Docker 容器和 nginx 作为反向代理

时间:2021-03-03 22:20:49

标签: java docker nginx

我创建了多模块应用程序,每个模块都是一个 Web 服务实现,并部署在一个 docker 容器中。目前,我正在将容器 8080 端口绑定到 8081-8083 并访问以下每个 WS: 本地主机:8081,本地主机:8082,本地主机:8083。

我想要实现的是在 localhost:8080 下提供所有 3 个容器 例如。本地主机:8080/soap/..., 本地主机:8080/rest/..., 本地主机:8080/graphql/....

Dockerfile(每个模块几乎相同):

FROM centos

RUN yum install -y java
ADD /target/rest_m-0.0.1-SNAPSHOT.jar rest_m.jar
RUN sh -c 'touch /rest_m.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/rest_m.jar"]

这是我的 docker-compose:

version: "3"
services:
  database:
    image: mysql:5.7
    container_name: database
    volumes:
      - D:/docker_vol/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: letmein
      MYSQL_DATABASE: employeemanager
      MYSQL_PASSWORD: letmein
    ports:
      - "33061:3306"
  nginx:
    image: nginx:latest
    container_name: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - "80:80"
      - "443:443"
    links:
      - rest
      - soap
      - graphql
    depends_on:
      - rest
      - soap
      - graphql
  soap:
    container_name: soap
    build: ./soap_m
    environment:
      DB_SERVER: database
      MYSQL_DB: employeemanager
      MYSQL_USER: root
      MYSQL_PASSWORD: letmein
    ports:
#      - "8081:8080"
      - "8080"
    links:
      - database
    depends_on:
      - database
  graphql:
    container_name: graphql
    build: ./graphql_m
    environment:
      DB_SERVER: database
      MYSQL_DB: employeemanager
      MYSQL_USER: root
      MYSQL_PASSWORD: letmein
    ports:
#      - "8082:8080"
      - "8080"
    links:
      - database
    depends_on:
      - database
  rest:
      container_name: rest
      build: ./rest_m
      environment:
        DB_SERVER: database
        MYSQL_DB: employeemanager
        MYSQL_USER: root
        MYSQL_PASSWORD: letmein
      ports:
#        - "8083:8080"
        - "8080"
      links:
        - database
      depends_on:
        - database

和当前的 nginx.conf:

    events {}
             http {
            server {
                    listen 80;
                 server_name localhost;

              location /rest/ {
                proxy_pass http://rest:8083;
              }

              location /soap/ {
                proxy_pass http://soap:8081;
              }

               location /graphql/ {
                proxy_pass http://graphql:8082;
              }
            }
}

0 个答案:

没有答案