# Docker를 이용해 DB 셋팅하기 - postgresql

2020. 8. 13. 23:51 개발 이야기/오픈소스

 

안녕하세요 해커의 개발일기 입니다.

 

오늘은 지난번에 다루었던 Dockerfile을 이용해 임시 빌드 환경 구성하기

 

# Dockerfile로 임시 빌드 환경 구성하기(Dockerfile 응용하기)

안녕하세요. 해커의 개발일기입니다. 오늘은 별도의 빌드환경에서만 빌드가 되는 경우 Docker를 사용해서 임시로 build 환경을 구성하고 빌드된 바이너리만 가지고 새로운 Docker 이미지에 넣는 것��

bourbonkk.tistory.com

 

이어서 DB 셋팅하기 입니다.

 

제가 자주 사용하는 postgresql을 이용해서 만들어 볼텐데요.

 

계속해서 유지해야하는 데이터가 없는 경우에는 그냥 스키마를 구성하는 DDL만 실행을 시키셔두 되고

 

디폴트로 적용되어야하는 데이터가 있는 경우에는 INSERT까지 있는 DML을 실행시켜주시면 될것 같습니다.

 

상황에 맞게 사용하시면 됩니다 ~~!

먼저 우분투 환경에서 진행을 하고 postgresql-9.3을 설치해줍니다.

그리고 디폴트 포트인 5432 포트를 열어주는데까지 적용을 시켜줍니다.

# created by mskim

# Set the base image to Ubuntu
FROM ubuntu:14.04

################## BEGIN INSTALLATION ######################
# Postgres with Postgis
# Install wget
RUN apt-get install wget -y

# Setup Postgres repository
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

# Add Postgres repository
RUN sh -c "echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" >> /etc/apt/sources.list.d/postgresql.list"

# Update repository
RUN apt-get update -y

# Install Postgres with Postgis
RUN apt-get install postgresql-9.3-postgis-2.1 -y

EXPOSE 5432

 

 

그리고나서는 사용하게 될 postgres 계정의 비밀번호를 설정해주고

 

postgres에서 외부에서 접속이 가능하도록 postgresql.conf 파일과

pg_hba.conf 파일을 수정해줍니다.

RUN echo "postgres:postgres" | chpasswd

RUN chown postgres:postgres /usr/bin/psql
RUN chown postgres:postgres /etc/init.d/postgresql

WORKDIR /etc/postgresql/9.3/main
RUN sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" postgresql.conf
RUN echo "host all all 0.0.0.0/0 password" >> pg_hba.conf

ADD . /var/lib/postgresql/9.3/main
WORKDIR /var/lib/postgresql/9.3/main

RUN chown postgres:postgres *
RUN chmod 774 /usr/bin/psql /etc/init.d/postgresql
USER postgres
RUN chmod +x /etc/init.d/postgresql
RUN ls -l
RUN /etc/init.d/postgresql start  && /usr/bin/psql -c "ALTER USER postgres WITH PASSWORD 'postgres'" \
            &&/usr/bin/psql -d postgres -f tpcc_postgres_insert_ddl.psql && \
            /usr/bin/psql -d postgres -f bmsql_district_bmsql_config_warehouse.sql &&\
            /usr/bin/psql -d postgres -f bmsql_item.sql &&\
            /usr/bin/psql -d postgres -f bmsql_customer.sql &&\
            /usr/bin/psql -d postgres -f bmsql_stock.sql

CMD service postgresql start

 ADD를 이용해서 .sql 확장자를 가진 파일들을 모두 옮겨줍니다.

psql -d [DB 명] -f [파일명]

명령어를 통해 sql 파일들을 실행해 스키마를 구성해주고 데이터를 넣어줍니다.

여기서 중요한 것이 있습니다!

 

제가 /etc/init.d/postgresql start를 하고 && and 연산을 통해 psql 명령어를 이어붙인 것을 볼 수 있습니다.

RUN /etc/init.d/postgresql start  && /usr/bin/psql -c "ALTER USER postgres WITH PASSWORD 'postgres'" \
            &&/usr/bin/psql -d postgres -f tpcc_postgres_insert_ddl.psql && \
            /usr/bin/psql -d postgres -f bmsql_district_bmsql_config_warehouse.sql &&\
            /usr/bin/psql -d postgres -f bmsql_item.sql &&\
            /usr/bin/psql -d postgres -f bmsql_customer.sql &&\
            /usr/bin/psql -d postgres -f bmsql_stock.sql

 

이렇게 && 연산으로 붙여주지 않으면 postgresql이 계속 꺼져있는 것을 알 수있습니다.

 

RUN은 1회성 명령어인 것 같습니다.

 

저는 이부분 때문에  몇시간을 날린지 모르겠습니다.

 

전체 Dockerfile 입니다.

# created by mskim

# Set the base image to Ubuntu
FROM ubuntu:14.04

# Update the repository sources list
RUN apt-get update -y

################## BEGIN INSTALLATION ######################
# Postgres with Postgis
# Install wget
RUN apt-get install wget -y

# Setup Postgres repository
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

# Add Postgres repository
RUN sh -c "echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" >> /etc/apt/sources.list.d/postgresql.list"

# Update repository
RUN apt-get update -y

# Install Postgres with Postgis
RUN apt-get install postgresql-9.3-postgis-2.1 -y

EXPOSE 5432

RUN echo "postgres:postgres" | chpasswd

RUN chown postgres:postgres /usr/bin/psql
RUN chown postgres:postgres /etc/init.d/postgresql

WORKDIR /etc/postgresql/9.3/main
RUN sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" postgresql.conf
RUN echo "host all all 0.0.0.0/0 password" >> pg_hba.conf

ADD . /var/lib/postgresql/9.3/main
WORKDIR /var/lib/postgresql/9.3/main

RUN chown postgres:postgres *
RUN chmod 774 /usr/bin/psql /etc/init.d/postgresql
USER postgres
RUN chmod +x /etc/init.d/postgresql
RUN ls -l
RUN /etc/init.d/postgresql start  && /usr/bin/psql -c "ALTER USER postgres WITH PASSWORD 'postgres'" \
            &&/usr/bin/psql -d postgres -f tpcc_postgres_insert_ddl.psql && \
            /usr/bin/psql -d postgres -f bmsql_district_bmsql_config_warehouse.sql &&\
            /usr/bin/psql -d postgres -f bmsql_item.sql &&\
            /usr/bin/psql -d postgres -f bmsql_customer.sql &&\
            /usr/bin/psql -d postgres -f bmsql_stock.sql

CMD service postgresql start

 

 

Docker를 이용해 DB를 구성중이시라면 꼭 참고하시길 바랍니다!