로컬 호스트에서 Docker의 PostgreSQL 연결

전제 조건


  • 도커
  • Docker Compose(선택 사항)

  • 설치하지 않은 경우 이미 다음 링크를 확인하세요.
  • Install Docker
  • Install Docker Compose

  • 다음을 통해 확인할 수 있습니다.

    $ docker -v
    Docker version 19.03.13, build 4484c46d9d
    
    $ docker-compose -v
    docker-compose version 1.23.2, build 1110ad01
    


    컨테이너 빌드



    아래 명령을 실행하여 PostgreSQL 컨테이너를 생성합니다.

    $ docker run -d -p 5432:5432 --name localpostgres -e POSTGRES_PASSWORD=secretpassword postgres:11.6
    


    이 명령은 Docker Postgre Hub 에서 Postgres 11.6을 다운로드합니다.

    자세히 살펴보면 다음과 같습니다.
  • -d : 분리 모드에서 실행을 의미합니다.
  • --name : 컨테이너에 이름을 부여합니다 : localpostgres,
  • -e : 환경 변수;
  • postgres:11.6 : 컨테이너를 생성하는 기본 이미지입니다
  • .

    INFO

    I use PostgreSQL version 11.6 since I have it already but you can use whatever version you want.

    Also if you leave tag blank docker will fetch the latest version.

    However I definitely don't recommend that since it may break your software stack.



    컨테이너에 들어가기



    컨테이너를 만든 후 호스트에서 액세스할 수 있습니다.

    $ docker exec -it localpostgres bash
    
    root@6542951f176a:/# psql -U postgres
    psql (11.6 (Debian 11.6-1.pgdg90+1))
    Type "help" for help.
    
    postgres=#
    


    컨테이너 사용



    데이터베이스 생성

    PostgreSQL 컨테이너 내부에 데이터베이스를 생성합니다.

    root@cb9222b1f718:/# psql -U postgres
    psql (11.6 (Debian 11.6-1.pgdg90+1))
    Type "help" for help.
    
    postgres=# CREATE DATABASE testdb;
    CREATE DATABASE
    postgres=#
    


    테이블 생성

    testdb 내부에 예제 테이블을 생성해 보겠습니다.

    postgres=# CREATE TABLE accounts (
     user_id serial PRIMARY KEY,
     username VARCHAR ( 50 ) UNIQUE NOT NULL,
     password VARCHAR ( 50 ) NOT NULL,
     email VARCHAR ( 255 ) UNIQUE NOT NULL,
     created_on TIMESTAMP NOT NULL,
            last_login TIMESTAMP
    );
    CREATE TABLE
    


    테이블/관계 확인

    테이블을 확인하려면:

    postgres=# \dt
              List of relations
     Schema |   Name   | Type  |  Owner
    --------+----------+-------+----------
     public | accounts | table | postgres
    (1 row)
    
    postgres=#
    


    Docker Compose 사용



    원시 docker 명령 대신 docker compose를 사용하여 PostgreSQL 데이터베이스를 만들고 액세스할 수 있습니다.

    아래 코드를 사용하여 docker-compose.yml라는 파일을 만듭니다.

    version: '3.5'
    
    volumes:
      local_postgres_data: {}
    
    services:
      postgres:
        build: ./
        image: postgres:11.6
        container_name: localpostgres
        environment:
          POSTGRES_DB: ${POSTGRES_DB:-testdb}
          POSTGRES_USER: ${POSTGRES_USER:-debug}
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-debug}
          POSTGRES_PORT: ${POSTGRES_PORT:-5432}
          POSTGRES_HOST: ${POSTGRES_HOST:-postgres}
        volumes:
          - local_postgres_data:/var/lib/postgresql/data
        ports:
          - "127.0.0.1:5432:5432"
    


    컨테이너 회전:

    $ docker-compose up -d
    
    Creating localpostgres ... done
    


    이 명령은 서비스의 컨테이너를 빌드, (재)생성, 시작 및 연결합니다.

    이제 데이터베이스 - testdb 를 사용자 - debug 와 직접 연결할 수 있습니다.

    $ docker exec it localpostgres psql -U debug -d testdb
    
    psql (11.6 (Debian 11.6-1.pgdg90+1))
    Type "help" for help.
    
    testdb=#
    


    모두 완료되었습니다!

    좋은 웹페이지 즐겨찾기