본문 바로가기

개발공부/Docker & Kubernetes 실전 가이드 강의

Udemy : Docker & Kubernetes 실전 가이드 (5)

728x90

다중 컨테이너 애플리케이션 구축

데이터베이스 컨테이너, 백엔드 서버 컨테이너, 프론트엔드 컨테이너 ~ 일반적으로 웹 애플리케이션을 만드는 방법

데이터베이스 컨테이너 : 컨테이너가 변경되더라도 담겨있는 내용은 보존되어야 한다 ~ 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하여 종속성 문제 발생 예방

해결할 이슈 :

- 컨테이너 생성 명령문이 너무 길고 복잡해졌다. 각 컨테이너마다 명령을 각각 내려야 한다. ~ 하나의 명령어로 이 모든 것을 다 해낼 수 있도록 개선할 수 있다.

- 서버에 컨테이너를 두면 안된다.

728x90