docker-compose를 사용한 Postgres 환경

6294 단어 devopspostgresdocker
새로운 개발 환경을 빠르게 시작하는 방법을 찾고 계십니까? 이 경우 이 문서가 도움이 될 수 있습니다.

Wikipedia 정의를 요약하면 환경은 소프트웨어 솔루션을 실행할 수 있는 리소스 집합입니다. 일반적으로 각각 특정 목표를 가진 많은 환경을 가질 수 있습니다. 예를 들어 개발(dev), 시스템 통합 테스트(sit), 엔드 투 엔드 테스트(e2e), 사용자 수용 테스트(uat) 및 프로덕션(prod). 이들 모두는 서로 완전히 격리되어야 합니다. 예를 들어 sit의 프런트 엔드가 e2e의 데이터베이스에 연결할 수 없도록 해야 합니다. 그러기 위해서는 네트워크 시스템과 스토리지 시스템이 우발적으로 발생하더라도 겹치지 않도록 설계해야 하고 환경이 많을 경우 어려운 작업이 될 수 있습니다.

Docker-compose는 솔루션을 실행하기 위한 모든 컴퓨팅 리소스뿐만 아니라 필요한 격리를 보장할 준비가 된 네트워킹 및 스토리지와 같은 인프라 리소스를 생성하는 환경을 시작하는 훌륭한 도구입니다. 이를 증명하기 위해 다음을 기반으로 솔루션을 시작할 수 있는 docker-compose yaml 파일을 작성했습니다.

  • Postgres , 데이터베이스 서버로

  • Pgadmin , postgres 관리 도구로

  • NGinx , 리버스 프록시

  • 다음으로 일부 환경 매개변수가 포함된 .env 속성 파일을 사용하여 작성기 yaml을 매개변수화했습니다.

    ENV_NAME=<<environment-name>>
    NGINX_RELEASE=1.21
    NGINX_HOSTPORT=8081
    POSTGRES_RELEASE=12
    POSTGRES_USER=<<postgres-user>>
    POSTGRES_PASSWORD=<<postgres-password>>
    PGADMIN_RELEASE=latest
    PGADMIN_EMAIL=<<pgadmin-user>>
    PGADMIN_PASSWORD=<<pgadmin-password>>
    


    그 중 가장 중요한 것은 네트워크, 볼륨 및 컨테이너의 범위를 식별하는 데 사용되는 첫 번째 ENV_NAME입니다. 사용 방법의 예는 다음과 같습니다.

    # Use postgres/example user/password credentials
    version: '3.7'
    
    services:
      proxy:
        image: nginx:${NGINX_RELEASE}
        container_name: ${ENV_NAME}_nginx
        restart: unless-stopped
        environment:
          NGINX_HOST: ${ENV_NAME}
          NGINX_PORT: ${NGINX_HOSTPORT}
        networks:
          - frontend
        volumes:
          - ./config/templates:/etc/nginx/templates
          - ./config/certs:/etc/nginx/certs
        ports:
          - ${NGINX_HOSTPORT}:${NGINX_HOSTPORT}
          - 443:443
    
      pgadmin:
        image: dpage/pgadmin4:${PGADMIN_RELEASE}
        container_name: ${ENV_NAME}_pgadmin
        depends_on:
          - postgres
        environment:
          PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL}
          PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD}
        networks:
          - frontend
          - backend
        volumes:
          - pga_data:/var/lib/pgadmin
    
      postgres:
        image: postgres:${POSTGRES_RELEASE}
        container_name: ${ENV_NAME}_postgres
        restart: always
        environment:
          POSTGRES_USER: ${POSTGRES_USER}
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
        volumes:
          - ps_data:/var/lib/postgresql/data
        networks:
          - backend     
    
    volumes:
      ps_data:
        name: ${ENV_NAME}_postgres
      pga_data:
        name: ${ENV_NAME}_pgadmin
    
    networks:
      frontend:
        name: ${ENV_NAME}_frontend
      backend:
        name: ${ENV_NAME}_backend
    


    예를 들어 ENV_NAME이 demo_dev이면 다음과 같은 결과가 나타납니다.



    네트워크에서 볼 수 있듯이 볼륨과 컨테이너 이름이 사용자 정의되었으므로 다른 환경 매개변수로 작성기를 다시 시작하면 이전 환경과 분리된 새로운 환경을 갖게 됩니다.

    코드는 내github 저장소에서 사용할 수 있습니다.

    좋은 웹페이지 즐겨찾기