이전 프로젝트 I'm Fine Apple에서는 github actions를 통해 CICD를 진행했었지만,
get-moim 프로젝트는 jenkins를 통해 CICD를 진행하였다.
여기서 문제가 생긴게 jenkins컨테이너 안에서 docker-compose 를 통해 도커를 올렸는데
Host를 H로 나타내고
H에서 돌고있는 젠킨스 컨테이너를 J,
J에서 올릴 nginx 컨테이너를 N이라고 하면,
계속 시도했던 docker-compose.yml 파일은 다음과 같았다
conf
version: "3.7"
services:
nginx:
image: "nginx:latest"
container_name: get-moim-vue
volumes:
- ./conf: /etc/nginx/conf.d
- ./dist: /etc/share/html
...skip
볼륨을 [J]:[N]으로 마운트 하려고 했던건데,
처음에는 꽤 합리적이라고 생각했다.
docker-compose up 스크립트는 jenkins 컨테이너 안에서 실행되는 거고 jenkins container에서 docker-compose.yml과 conf, dist 디렉토리는 같은 위치에 있기 때문에
volumes:
- ./conf: /etc/nginx/conf.d
- ./dist: /etc/share/html
라고 표기하면 될 것이라고 생각 했다.
하지만 아무리 docker-compose up으로 container를 올려도 제대로 nginx가 구동이 안되었는데
docker exec -it <NginxContainerId> /bin/bash
로 들어가서 확인했을때 conf.d 폴더와 html가 빈 폴더형식으로 나타난걸 확인했다.
그래서 이때 조금 고민을 많이 했는데...
생각해보니 jenkins는 docker in docker로 host와 docker가 연결되어 있었고
Docker in Docker cannot mount volume
에서 확인한 결과 [H]:[N]으로 연결해 주어야 한다는 것을 확인하고
version: "3.7"
services:
nginx:
image: "nginx:latest"
container_name: get-moim-vue
volumes:
- /hostpath/conf: /etc/nginx/conf.d
- /hostpath/dist: /etc/share/html
...skip
로 변경하자 제대로 nginx컨테이너가 구동되는 것을 확인 할 수 있었다.