簡體   English   中英

使用 docker-compose 同時運行多個 Docker 容器

[英]Run multiple Docker containers at once using docker-compose

問題

目前我已經創建了一個Dockerfile和一個Dockerfile docker-compose.yml來使用docker-compose up運行我的 rest-api 和數據庫。

我現在想做的是添加另一個容器,即 web 應用程序(使用 React 構建)。 我對如何做到這一點有點困惑,因為我兩天前才開始學習 Docker。

文件夾結構

這是我當前的文件夾結構

  • 文件夾: rest-api (NodeJS)
    • 文件
    • dockercompose.yml

問題

最后,我希望能夠運行docker-compose up來啟動rest-apiweb-app

我是否需要在每個文件夾中創建一個單獨的Dockerfile並創建一個“全局” docker-compose.yml來將所有內容鏈接在一起?

新文件夾結構:

  • dockercompose.yml
  • 文件夾: rest-api (NodeJS)
    • 文件
  • 文件夾: web-app (React)
    • 文件

我當前的設置來運行 rest-api 和數據庫

文件

FROM node:13.10

# The destination of the app in the container
WORKDIR /usr/src/app

# Moves the package.json, package-loc.json and tsconfig.json to the specified workdir
COPY package*.json ./
COPY tsconfig.json ./

# Create user and postgres
ENV POSTGRES_USER root
ENV POSTGRES_PASSWORD 12345
ENV POSTGRES_DB postgres
ENV POSTGRES_URI 'postgres://postgres:12345@postgres:5432/postgres'

RUN npm install

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

docker-compose.yml

version: '3'
services:
  node:
    container_name: rest-api
    restart: always 
    build: . 
    environment:
      PORT: 3000
    ports:
      - '80:3000'
    links:
      - postgres
  postgres:
    container_name: postgres-database
    image: postgres
    environment:
      POSTGRES_URI: 'postgres://postgres:12345@postgres-database:5432/postgres'
      POSTGRES_PASSWORD: 12345 
    ports:
      - '5432:5432'

好的 - 所以有很多方法可以解決這個問題,它或多或少取決於您的喜好。

如果你想使用你建議的文件夾結構(這很好),你可以這樣做:

在每個應用程序的根目錄中有一個Dockerfile ,它將構建特定的應用程序(正如您已經建議的那樣)將您docker-compose.yml文件放在兩個應用程序的父文件夾中(正如您已經提出的那樣),然后只需制作一些更改您的 docker-compose.yml (我只留下了必要的部分。注意不再需要鏈接 - 內部網絡會將服務名稱解析為相應的服務 IP 地址)

version: '3'
services:
  node:
    build:
      context: rest-api
    environment:
      PORT: 3000
    ports:
      - '3000:3000'
  web:
    image: web-app
    build:
      context: web-app
    ports:
      - 80:80
  postgres:
    image: postgres
    environment:
      POSTGRES_URI: 'postgres://postgres:12345@postgres-database:5432/postgres'
      POSTGRES_PASSWORD: 12345 
    ports:
      - '5432:5432'

因此, context告訴 docker 您正在構建的內容實際上位於不同的目錄中,並且在 Dockerfile 中執行的所有命令都將與該文件夾相關

我還更改了端口映射,因為您可能希望通過 HTTP 端口訪問您的 Web 應用程序。 請注意,只要節點服務綁定到 0.0.0.0:3000(不是 127.0.0.1:3000),web-app 就能夠使用node主機名與 rest-api 容器通信

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM