백엔드 컨테이너의 경우 로그관리와 컨테이너 상태, 의존성 파일이 저장되어야 합니다. 이를 위해 세 가지 볼륨을 추가해줍니다.(detached모드도 추가!)
docker run --name back -v my_backend_project_local_address:/app -v logs:/app/logs -v /app/node_modules --rm -d -p 80:80 --network test_net back_image
/app
폴더 전체를 바인딩 마운트하여 상태를 공유합니다./app/node_moules
는 익명 볼륨으로 저장해줍니다. 익명 볼륨은 볼륨 종류중 가장 우선 순위가 높기 때문에 node_modules
폴더는 따로 로컬호스트에 저장되지 않을 수 있습니다.앞 게시글에선 DB의 통신 주소를 하드코딩 했습니다. 이를 동적으로 처리할 수 있도록 설정합니다.
우선 Dockerfile에다가 환경변수로 할당하는 것입니다.
# [Dockerfile]
.
.
ENV MONGODB_USERNAME=admin
ENV MONGODB_PASSWORD=secret
.
이후 백엔드에서 DB통신 url을 다음과 같이 바꿔줍니다.
// js 문법으로 작성한 예시입니다.
`mongodb://${process.env.MONGODB_USERNAME}:${MONGODB_PASSWORD}@db:27017/my_api`
.dockerignore
에 추가해주도록 합시다!프론트엔드는 코드의 수정이 시각적으로 바로 확인되는 것이 중요하기 때문에 라이브 소스 코드 업데이트가 필요합니다. 즉, 바인드 마운트가 필요하다는 의미가 됩니다.
react를 기준으로 할 때, 프로젝트 전체를 바인딩 마운트할 필요는 없고 그 안에서 페이지 코드가 담긴 src
폴더를 바인딩 마운트를 해주면 됩니다.
docker run --name front -v my_src_dir_local_address:/app/src --rm -p 3000:3000 --network test_net -it front_image
컨테이너를 생성할 때 마다npm install
을 해주면 큰 용량의 의존성 파일들이 생성되고 바인딩 마운트를 해주면서 매번 로컬에 복사를 해주기 떄문입니다.
이를 해결하기 위해 .dockerignore
에 node_moules
같은 폴더를 추가해주면 node_modules을 추가하지 않기 때문에 속도가 빨라집니다.