다중 컨테이너 애플리케이션 구축
데이터베이스 컨테이너, 백엔드 서버 컨테이너, 프론트엔드 컨테이너 ~ 일반적으로 웹 애플리케이션을 만드는 방법
데이터베이스 컨테이너 : 컨테이너가 변경되더라도 담겨있는 내용은 보존되어야 한다 ~ Mongo 이미지는 로그인 방식을 지원하기 때문에 이를 이용해 데이터를 보존 할 수 있다.
백엔드 컨테이너 : 마찬가지로 로그 데이터 등이 보존되어야 한다. = 컨테이너는 계속 동작해야 하기 때문에 호스트 머신에서 리팩토링하는 소스 코드가 즉시 컨테이너에 반영되는 방식을 취한다.
프론트엔드 컨테이너 : 컨테이너 재실행 없이 코드의 즉시 반영
1. 데이터베이스 도커화
- MongoDB의 경우 27017 포트를 디폴트로 제공한다.
2. 백엔드 도커화
: 포트 넘버 노출에 유의하기
3. 프론트엔드 도커화
- 리액트는 코드를 노드에 따라 정리할 수 있다.
- 요청을 입력해 상호작용이 가능하도록 하려면 -it
4. 컨테이너로 도커화 한 후 중요한 것 : 데이터에 영속성 부여, 다중 컨테이너 통신 확립
이미지를 만들고 난 후에는 꼭 해당 폴더에 터미널이 위치할 필요는 없다.
cf) react의 경우 네트워크가 아닌 로컬 호스트와 통신해야 한다. 이유는 추후 더 공부하기.
- 네트워크로 다중 컨테이너 통신 확립
- 볼륨 추가로 데이터 영속성 부여 : 데이터 베이스 컨테이너에 명명된 볼륨 연결하기
- 데이터 무결성 확보를 위한 권한 설정 ~ mongoDB의 경우 환경변수를 활용한 로그인 방식 지원
- 데이터베이스에 권한을 설정한 경우 서버에서 연결을 위한 보안 정보를 입력해야한다.
5. 바인드 마운트 & 폴리싱
- 바인드 마운트가 효과가 있으려면 노드의 경우 이미 실행 중인 서버에도 변경된 코드가 반영이 되어야 하는데, 그 경우 사용하는 써드파티 패키지가 nodemon이다.
- 만약에 백엔드 도커파일에 환경변수로 지정한 보안 키와 데이터베이스 보안 키의 정보가 다르다면, 백엔드 컨테이너를 생성할 때 -e를 사용해 재설정해줄 수 있다.
- 폴리싱 : .dockerignore
6. 프론트엔드에 바인드 마운트로 라이브 소스 코드 업데이트 적용
cf) 리액트에는 nodemon이 필요하지 않음
- Windows의 경우 리액트 오토 리로드가 되지 않는 경우 : Wsl2를 사용할 때 Windows 파일 시스템이 아니라 Linux 파일 시스템을 사용해야 한다.
~ 쉽고 간단한 방법 : 노드 - package.json에서 {"scripts" : "nodemon -L server.js"} 리액트 - 컨테이너 생성 시 환경 변수 설정 ~ -e CHOKIDAR_USEPOLLING=true
~ 대략 내가 스스로 변경하는 모드로 바꾸겠다는 의미로 보인다.
- 이미지 빌딩 프로세스 개선 리팩토링 : node_modules 폴더를 docker ignore하여 종속성 문제 발생 예방
해결할 이슈 :
- 컨테이너 생성 명령문이 너무 길고 복잡해졌다. 각 컨테이너마다 명령을 각각 내려야 한다. ~ 하나의 명령어로 이 모든 것을 다 해낼 수 있도록 개선할 수 있다.
- 서버에 컨테이너를 두면 안된다.
'개발공부 > Docker & Kubernetes 실전 가이드 강의' 카테고리의 다른 글
Udemy : Docker & Kubernetes 실전 가이드 (7) (0) | 2023.04.12 |
---|---|
Udemy : Docker & Kubernetes 실전 가이드 (6) (0) | 2023.04.11 |
Udemy : Docker & Kubernetes 실전 가이드 (4) (0) | 2023.04.10 |
Udemy : Docker & Kubernetes 실전 가이드 (3) (0) | 2023.04.08 |
Udemy : Docker & Kubernetes 실전 가이드 (2) (0) | 2023.04.08 |