Docker Compose를 사용하여 MariaDB 서비스를 배포한 후 서비스를 실행하려면

depends_ondocker-compose.yml 키는 MariaDB 서비스를 시작한 후 Node.js 서비스를 시작하는 것과 같이 각 서비스 실행을 시작하는 순서를 설정할 수 있습니다. 그러나 아래 그림의 NG 사례와 같이 종속 서비스를 배포한 후 서비스 실행 순서를 제어할 수 없습니다. 예를 들어 MariaDB(MySQL과 유사한 데이터베이스)를 사용하는 경우 Docker는 depends_on 키만 설정하면 테이블 만들기와 같은 MariaDB 초기화가 완료될 때까지 기다리지 않고 모든 서비스를 실행한다는 의미입니다.
이 문서에서는 Docker Compose를 사용하여 종속 서비스를 배포한 후 서비스를 실행하는 예제로 MariaDB 서비스를 배포한 후 Node.js 서비스를 실행하는 방법을 보여줍니다.
다음 그림은 depends_on 키만 사용하는 것과 이 문서의 방법 사이의 실행 중인 서비스 순서를 비교한 것입니다.


소스 코드



본 샘플 소스코드는 snowcait에서 the Discussion of this original article (written in Japanese)이 알려준 소스코드를 기반으로 제작되었습니다. 이 아이디어를 주신 snowcait에게 감사드립니다.
Node를 실행하기 전에 /docker-entrypoint-initdb.d에서 스크립트를 실행하기 위해 Docker가 완료될 때까지 기다려야 하는 경우 healthcheck 키의 테스트 명령에 /docker-entrypoint-initdb.d에서 초기화된 사용자 이름과 암호를 입력해야 합니다. js. 다른 사용자를 만들지 않고 일부 테이블만 만들면 /docker-entrypoint-initdb.d 스크립트에서 만든 새 테이블에 액세스하는 코드를 만드는 것이 좋습니다.

.github/workflows/test.yml



name: Actions Test

on:
  push:
    branches:
      - dev-*

jobs:
  sandbag_test:
    runs-on: ubuntu-20.04
    timeout-minutes: 5
    env:
      MARIADB_ROOT_PASSWORD: ${{secrets.MARIADB_ROOT_PASSWORD}}
      MARIADB_DATABASE: ${{secrets.MARIADB_DATABASE}}
      MARIADB_WEB_USER: ${{secrets.MARIADB_WEB_USER}}
      MARIADB_WEB_PASSWORD: ${{secrets.MARIADB_WEB_PASSWORD}}
      MARIADB_API_USER: ${{secrets.MARIADB_API_USER}}
      MARIADB_API_PASSWORD: ${{secrets.MARIADB_API_PASSWORD}}
      MARIADB_PORT: ${{secrets.MARIADB_PORT}}
      DB_HOST: ${{secrets.DB_HOST}}
      WEB_PORT: ${{secrets.WEB_PORT}}

    steps:
      - uses: actions/checkout@v2

      - name: Shutdown MariaDB
        run: sudo service mysql stop

      - name: Run docker-compose
        shell: bash
        run: |
          touch .env
          docker-compose -v
          docker-compose up --build --abort-on-container-exit
        working-directory: ./

docker-compose.yml



version: '3'
services:
  mariadb:
    image: mariadb:10.7
    container_name: sandbag_mariadb
    environment:
      - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
      - MARIADB_DATABASE=${MARIADB_DATABASE}
      - MARIADB_USER=${MARIADB_WEB_USER}
      - MARIADB_PASSWORD=${MARIADB_WEB_PASSWORD}
      - MARIADB_API_USER=${MARIADB_API_USER}
      - MARIADB_API_PASSWORD=${MARIADB_API_PASSWORD}
      - MARIADB_HOST=%
    tty: true
    volumes:
      - ./sql:/docker-entrypoint-initdb.d
    networks:
      - datastream
    healthcheck:
      test: ["CMD", "mariadb", "-u${MARIADB_API_USER}", "-p${MARIADB_API_PASSWORD}", "-e", "use ${MARIADB_DATABASE}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 5s
  web:
    env_file:
      - .env
    build:
      context: ./web/.
      dockerfile: "Dockerfile"
    ports:
      - ${WEB_PORT}:${WEB_PORT}
    depends_on:
      mariadb:
        condition: service_healthy
    command: ["npm", "test"]
    volumes:
      - ./volume/log/web:/usr/src/logger/web
    networks:
      - datastream
networks:
  datastream:

소스 코드의 실행 결과



이 소스 코드의 실행 결과는 다음 URL에서 확인할 수 있습니다.

https://github.com/KASHIHARAAkira/actions-playground/runs/6634973345?check_suite_focus=true

승인



이전에 언급했듯이 snowcaitthe Discussion of this original article (written in Japanese)에서 이 소스 코드의 대부분을 제공했습니다. 이 아이디어를 주신 snowcait에게 감사드립니다.

이 원본 기사는 내가 쓴 다음과 같습니다. 이것은 이 원본 기사의 일부를 일본어에서 영어로 번역한 것입니다.





docker compose로MariaDB의 이동을 待chiNode.js를 이동하는




zenn.dev

좋은 웹페이지 즐겨찾기