Mongo Docker 이미지에 oh-my-zsh 설치

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 이슈를 조금 확인해봐야겠다.


더 보면 좋을 글들