이번에 일을 하면서 개발 환경 구축을 하게 되었습니다.
보통 대부분의 프로젝트가 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
로 수정하니까 잘 되었습니다.
저도 그 이유는 잘 모르겠네요. 여기서 삽질을 엄청한 것 같습니다.
'BackEnd > 기타' 카테고리의 다른 글
[GCP] VPC (VM instance + cloud sql) 설정 (0) | 2024.07.21 |
---|---|
[NextStep] TDD, 클린 코드 with Java 18기 참여 후기 (1) | 2024.04.20 |
[우아한테크 프리코스 6기] 4주차 크리스마스 프로모션 회고 (1) | 2023.11.20 |
[우아한테크코스 프리코스 6기] 2주차 자동차 회고 (0) | 2023.11.05 |
[우아한테크코스 프리코스 6기] 1주차 숫자 야구 회고 (0) | 2023.10.26 |