Software Engineering Blog

컴퓨터공학부 3학년 재학 중인 학생입니다. 백엔드를 주로 공부하며 금융 분야에 관심이 많습니다.

카테고리 없음

Docker란 무엇인가?

잔망준형 2024. 9. 27. 20:43

Docker란 무엇인가?

간단하게 개발환경 일치를 위한 도구라고 생각하자.

 

좀 더 자세히는 리눅스 컨테이너 기술을 활용한 오픈소스 가상화 플랫폼이라고 생각하면 된다.

여기서 리눅스 컨테이너란 운영체제 위에 논리적인 영역을 구축하고 그 영역에 애플리케이션 실행에 필요한 프로그램들을 담아둔 공간이라고 생각하면 된다.

Docker를 찾게되는 배경

개발과정에서 발생하는 불편한 점을 생각해보자.

 

하나의 서비스를 개발할 때 그 서비스와 관련된 의존성들이 매우 많을 것이다.

간단하게 예를 들어보자면 하나의 웹 애플리케이션을 개발해도 java, nodejs, DBMS 등 여러가지의 프로그램이 애플리케이션 동작을 위해 필요하다.

 

그리고 나중에 나의 로컬환경에서의 개발이 끝나고 실제 서버에 배포를 해야하는 상황이 발생했다.

애플리케이션을 동작시키기 위해서는 해당 서버에도 java, nodejs, DBMS등이 설치되어야 할 것이고, 또한 설치만 한다고 끝나는 것이 아니라 버전 또한 일치해야 충돌없이 정상적으로 동작할 것이다.

 

그렇다면 일일이 내 개발환경에 설치된 프로그램들의 버전을 다 확인하고 똑같은 버전의 프로그램을 서버에서도 하나하나 찾고 검색해서 설치할 것인가? 

 

이게 소규모 프로젝트에서나 그래도 문제는 없겠지만 프로젝트 규모가 커지면 커질 수록 점점 귀찮아 지기도 하고 실수를 안한다는 보장도 없다. 그래서 이를 해결하기 위해서 우리 개발 환경 프로그램들을 버전과 함께 통으로 묶어서 이미지화를 시키고 해당 이미지를 서버에서 실행시켜 서버 가동에 필요한 의존성을 모두 담고 있는 환경 위에 서버를 실행시키는 것이 목적이다.

 

그렇게 이미지화가 된 도커 파일을 그냥 서버에서 다시 도커 이미지를 바탕으로 설치만 하면 개발환경에서 내가 쓰던 버전의 프로그램들이 전부 깔리게 되어 별도의 불필요한 과정없이 애플리케이션을 실행시킬 수 있다.

 

 

뭐 이렇게 배포환경에서의 사용도 있지만 또 다른 용도로는 개발자들 끼리의 개발환경 일치가 필요할 때도 도커를 사용할 수 있다. 

하나의 애플리케이션을 개발할 때 개발자들 끼리 버전이 다르면 그거는 정말 큰 문제를 초래할 수 있다.

그럴 때도 설계 단계에서 개발에 사용할 프로그램과 버전을 정의해두고 도커 이미지로 만들어 해당 이미지를 공유하여 개발자들이 개발을 시작하면 개발자들 끼리의 버전 충돌도 막을 수 있다.

 

추가

Docker가 상업적 용도에 대해 유료화로 바뀐 후에 요즘은 podman이라는 오픈소스가 Docker를 대체하고 있는 거 같다.