이번에 일을 하면서 개발 환경 구축을 하게 되었습니다.

 

보통 대부분의 프로젝트가 db를 이용할 것 입니다.

하지만 로컬에서 테스트를 해보기 위해 stage나 live 서버의 데이터를 조작하면 그 db로 테스트하고 있던 사람은 불편하겠죠.

 

그렇다고 새로운 프로젝트에 인원이 투입될 때마다, 로컬에 맞는 db를 만들면 시간이 매우 낭비됩니다.

 

이를 해결하기 위해서 DB 세팅(table, user, function, index 등)을 db에 올리고 테스트할 수 있도록 합니다.

 

보통 docker-compose를 이용하여 합니다.

version: '3.1'

services:
	db:
    	images:mysql
        ...
        ...
        volumes: ./test /docker-entrypoint-initdb.d/
        ...

하지만 db 관련 정보는 volume을 이용하기 때문에 이 컨테이너를 commit 해도 db 세팅했던 것들은 유지되지 않습니다.

 

물론 로컬에 마운트를 하면 백업 본이 생기지만, 다른 곳에서는 이미지를 가져와서 실행하면 백업 본도 못 봅니다.

 

 

이를 해결하기 위해서 직접 Dockerfile을 수정했습니다.

이는 github에서 손쉽게 구할 수 있습니다.

 

Dockerfile을 보면,

volume이 설정되어 있는데, 이를 지워주면 됩니다. 

그리고 아래를 보면 COPY ... 이 있는데 이 파일도 가져와야 합니다(git에 Dockerfile이랑 같이 있습니다).

 

ENV POSTGRES_USER <user name>

ENV POSTGRES_PASSWORD <password>

COPY <sql path> /docker-entrypoint-initdb.d/

그리고 이렇게 더 넣어줘야 합니다.

만약 db 세팅이 필요가 없다면 COPY 부분은 안 넣어도 됩니다.

 

아니면, /bin/bash에 들어가서 직접 table을 만드는 등 세팅을 해주시고

docker commit을 하면 됩니다.

 

 

이렇게 하면 이미지를 배포할 경우 다른 사용자들이 db를 그대로 활용할 수 있습니다.

데이터(row)도 유지할 수 있습니다.

 

 

 

이상하게도 저는 

이 부분에서 계속 general error가 발생했다고 합니다. 

 

링크를

keyserver.ubuntu.com

로 수정하니까 잘 되었습니다.

 

저도 그 이유는 잘 모르겠네요. 여기서 삽질을 엄청한 것 같습니다.

 

반응형

+ Recent posts