mongodb
는 항상 docker 이미지로 설치를 해서 사용하고 있다. 최근에 새로 svelte
프로젝트를 개발하면서 mongodb
도 필요해서 새로운 7버전 docker 이미지로 설치를 했는데, 애용하는 oh-my-zsh
설치가 정상적으로 안되는 문제가 있었다. 분명 Dockerfile
안에 설치스크립트를 넣었지만 이미지를 실행해 들어가보면 전혀 셋팅이 안되어 있는 현상이었다.
Dockerfile 살펴보기
기존 mongo docker 이미지를 가지고 내 설정이 포함된 최종 Docker 이미지를 만들기 위해서, 한번 더 Dockerfile
을 만들어 다시 빌드를 하고 있다. 보다시피 oh-my-zsh
를 설치하기 위한 스크립트는 다 갖춰져 있다. 아무리봐도 스크립트엔 문제가 없고, 설치 당시 로그에서도 오류가 난적이 없다.
FROM mongo:7-jammy
RUN apt-get update; \
apt-get install -y zsh curl; \
sh -c "$(curl -fsSL https://raw.githubusercontent.com/
ohmyzsh/ohmyzsh/master/tools/install.sh)"
근데 하나 이상한점이 있었다. 보통 mongo 이미지를 설치하고 cd ~
으로 홈디렉토리를 옮기면 보통 /root
로 이동되었었지만, 이상하게도 /data/db
로 이동되는 것이었다. 이건 내가 한 설정이 아니기에, 원래 mongo 이미지의 Dockerfile 을 살펴볼 필요가 있었다.
6111b0f55fcd# cd ~
6111b0f55fcd# pwd
/data/db
Dockerfile 은 Docker Official Images 깃허브에 공개되어 있다. 그 중 7.0 버전 Dockerfile 을 확인해보니 왜 /data/db 폴더가 홈디렉토리가 되었는지 알게되었다. ENV HOME /data/db
이 스크립트가 이전엔 없었는데 새로 생긴거 같다.
# https://github.com/docker-library/mongo/blob/master/7.0/Dockerfile
FROM ubuntu:jammy
...(중략)...
# ensure that if running as custom user that "mongosh" has a valid "HOME"
# https://github.com/docker-library/mongo/issues/524
ENV HOME /data/db
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 27017
CMD ["mongod"]
내가 docker run 할때, /data/db 를 내 로컬 폴더에 연결해서 사용하기 때문에, docker 이미지가 만들어질때까지는 설치가 되었겠지만, 볼륨연결을 하는 순간 설치된 파일들이 없어져버리는 효과(?)가 된 것이었다.
Dockerfile 의 HOME 설정 추가
홈디렉토리를 변경한 이유가 있겠지만, oh-my-zsh 를 설치하고픈 나에겐, 홈디렉토리를 root 폴더로 바꾸고 사용하는 수밖에는 없어보였다. 아래처럼 홈디렉토리를 원래대로 변경해놓고, 설치를 진행시켰다.
FROM mongo:7-jammy
# 홈디렉토리 변경
ENV HOME /root
RUN apt-get update; \
apt-get install -y zsh curl;
sh -c "$(curl -fsSL https://raw.githubusercontent.com/
ohmyzsh/ohmyzsh/master/tools/install.sh)"
그랬더니, 정확히 내가 원하는 테마의 zsh 가 실행되었다. 왜 /data/db
로 홈디렉토리를 변경하게 되었는지는 github 이슈를 조금 확인해봐야겠다.