[Docker] 도커 활용하기
도커를 활용하면 다양한 이점을 얻을 수 있다.
크게 세 가지로 나뉠 수 있는데, 예시를 통해 각 요소들을 살펴보자.
1.
회사에서 여러 프로젝트를 진행했고, 프로젝트들마다 개발 환경이 각자 달라서 여러 컴퓨터로 해당 프로젝트를 관리할 경우 각각의 컴퓨터에 프로젝트별로 개발 환경을 설정해 줘야 하는 불편함이 있다. 여기서 도커를 도입해보자.
A 프로젝트 : Java7 / MySQL / SpringBoot / Thymeleaf (SSR)
B 프로젝트 : (Backend) Java17 / MongoDB (Frontend) Vue.js / Quasar (CSR)
C 프로젝트 : Java11 / MariaDB
이런 식으로 프로젝트가 있으면, 한 컴퓨터에서 각각의 프로젝트를 유지보수 해 줄 때 마다 프로젝트별로 다른 개발환경을 설정해 줘야 한다.
도커를 통해 프로젝트를 컨테이너로 관리한다면 컨테이너에 구축된 인프라를 받아서 사용할 수 있어 개발 생산성이 향상된다. (애플리케이션 코드, 라이브러리, 환경변수 등이 컨테이너에 묶인다)
각각의 프로젝트들을 컨테이너에 담아서 실행하는 방식으로 사용한다. (주로 백그라운드로 실행한다)
A 프로젝트를 배포한다고 생각해보자.
로컬 환경에서 jar 파일을 추출하고 도커 파일을 작성해 이미지화한다.
이후 Container Registry에 이미지를 올리고, 서버에서 해당 이미지를 가져와 실행한다.
B 프로젝트를 배포한다고 생각해보자.
백엔드와 프론트엔드를 각각의 컨테이너로 따로 돌리고 서로 소통하도록 설계해야 한다.
나머지 부분은 A를 배포할 때와 동일하다.
2.
A 프로젝트는 모놀리식 아키텍처로 설계된 레거시 애플리케이션이다.
애플리케이션의 구조를 모놀리식 설계로 방치해도 컨테이너를 도입할 수는 있지만, 효과적이지는 않다.
도커는 애플리케이션을 기능별로 분할해 별도의 컨테이너에 배치할 때도 사용된다. 이를 통해 모놀리식 아키텍처를 MSA로 변환해 애플리케이션의 유지 보수를 더 간단하게 할 수 있다.
A 프로젝트 : Node.js / 사진 api를 JSON 형태로 제공함
B 프로젝트 : Python / 사진의 이름을 제공함
C 프로젝트 : Go / A와 B를 사용해서 사진을 png형태로 제공함
이렇게 세 가지 프로젝트를 각각 컨테이너에 넣고 작동시킬 시, C 프로젝트는 A와 B를 사용해야 한다.
컨테이너 간 통신이 필요한 경우는 도커 네트워크를 생성해서 진행할 수 있다. A B C 가 같은 네트워크를 사용한다면 C는 A와 B를 가져다가 사용할 수 있게 된다. (로컬 환경에서는 불필요)
멀티스테이지 빌드를 사용해 각자 다른 개발 환경인 애플리케이션들을 충돌 없이 실행시킬 수 있다.
3.
도커와 쿠버네티스 / 도커 스웜을 함께 사용하면 애플리케이션의 배포를 간단하게 진행할 수 있다.
애플리케이션이 죽었을 때 알아서 다시 돌아가도록 설정할 수 있어 매우 편하다.
꼭 위와 같은 예시가 아니여도, 도커가 제공하는 컨테이너를 응용하면 개발 생산성을 끌어올릴 수 있다.
Virtual Machine과 역할이 비슷해 보이지만, VM은 각 Machine 당 운영체제를 따로 설정해 줘야 해서 리소스가 낭비되지만, Container를 사용하면 운영체제를 포함하지 않고 호스트의 운영체제를 가져다 사용할 수 있어 가볍다. (필요한 부분은 도커 엔진으로 추가로 받아오는 방식을 사용한다)
도커의 컨테이너들은 OS 수준에서 격리되지만 같은 커널을 공유하기에 VM보다는 보안에 취약할 수 있으니.. 보안에 민감한 프로젝트를 다루는 경우 VM을 사용하거나 네트워크 보안, 이미지 보안 등 여러 보안 요소를 고려해서 도커를 사용하자.
'DevOps > Docker && Kubernetes' 카테고리의 다른 글
[Docker] Dockerfile 프로젝트 배포하기 (2) | 2023.12.06 |
---|---|
[Docker] Docker Compose (0) | 2023.03.24 |
[Docker] 도커 파일 시스템과 볼륨 (0) | 2023.03.09 |
[Docker] 도커와 컨테이너 기술 (0) | 2023.03.07 |
[Docker] 시스템 기초 지식 (0) | 2023.03.06 |
댓글
이 글 공유하기
다른 글
-
[Docker] Docker Compose
[Docker] Docker Compose
2023.03.24 -
[Docker] 도커 파일 시스템과 볼륨
[Docker] 도커 파일 시스템과 볼륨
2023.03.09 -
[Docker] 도커와 컨테이너 기술
[Docker] 도커와 컨테이너 기술
2023.03.07 -
[Docker] 시스템 기초 지식
[Docker] 시스템 기초 지식
2023.03.06