안녕하세요. 이상한 프로그래머, 야매 프로그래머 입니다.
어플리케이션 개발에 아주 유용하게 사용 하고 있는 Docker를 소개 하려고 합니다. 오늘은 간단한 개요 정도의 내용으로 Docker가 무엇인지를 소개 하고 차근차근 설치방법, 사용방법 들을 소개해 나가려고 합니다.
개요
Docker가 등장 한지 딱 10년 되었네요. 2013년에 등장을 했고 제가 사용하기 시작 한 것은 2~3년 정도 된 것 같습니다. 개발환경을 준비하고 테스트 하는데 주로 사용 하고 있습니다. Docker를 사용하기 전에는 가상화 도구인 VirtualBox를 주로 이용 했습니다.
데스크탑에 개발환경을 준비하는 작업은 생각보다 시간도 많이 걸리고 복잡한 일이죠. 게다가 1개의 프로젝트만 진행을 한다면 행복 하겠지만 우리에게 결코 그런 일은 일어나지 않습니다. 여러 프로젝트를 준비 하다 보면 이 복잡한 의존성 관계에 데스크탑의 개발환경 자체가 스파게티처럼 엉키기 마련이죠.
이렇게 만만치 않은 개발환경 세팅이기 때문에, 그동안 언어 레벨, 패키지 관리자, 가상화 기술 까지, 오롯이 개발에만 집중하기 위해 환경 세팅을 쉽고 빠르게 준비하고 공유할 수 있는 방법을 많이들 고민 하였습니다. 제 경우에는 보통 가상화 도구인 VirtualBox를 이용하여 이런 개발 환경을 만들고 공유 했습니다. 하지만 완전이 만족 스럽지는 못했습니다. 가상머신의 특성상 무겁고, 용량이 커지는 경우가 많아서 작업자 간의 환경 공유도 쉽지 않았습니다. 그리고 시간이 지나면서 분산 환경 형태의 프로그램을 작성 해야 하는 경우가 많아 졌는데, 이런 환경에 대응하기도 편하지 않았습니다.
이런 불만 사항을 해소 시켜 줄 수 있는 장점이 있다는 Docker 에는 항상 눈길이 갔지만, 쉽게 적용 할 수는 없었죠. 혼자 일을 한다면 모르겠지만 협업하는 환경에서는 고려 해야 할 사항이 많았습니다. 그러던 중 종례에 의견이 일치되어 개발 환경을 Docker 로 꾸미는 것이 결정 되어 사용하게 되었습니다.
Docker
Docker 공식 문서의 소개를 보자면, 애플리케이션 개발, 배포, 실행 을 위한 오픈 소스 플랫폼이라고 설명 하고 있습니다. 이 설명대로 현재 Docker는 여러 클라우드 호스팅 서비스에서 서비스 배포 자동화를 위한 도구로 적용 되어 있습니다. 개발 → 서비스 배포 → 서비스 진행 까지 자동화 할 수 있는 도구 입니다.
Docker는 가상화 도구 이기도 한데, 기존의 가상화 도구와는 다릅니다. 기존의 가상화를 ‘전가상화’, 반가상화’ Docker의 가상화를 ‘OS레벨 가상화’ 라고도 이야기 하는데, 주요 차이점은 하드웨어 레벨에서 지원하는 가상화 인가 OS레벨의 가상화 인가 에 따른 차이점으로 볼 수 도 있습니다.
Docker는 리눅스 커널의 프로세스 격리 기술을 이용하여 만들어 졌습니다. 그래서 사실 Docker는 리눅스 용입니다. Docker에서는 생성 된 가상머신을 컨테이너라 부르는데, 가상머신과는 개념이 다르기 도 하고 사용 방식과 구조 때문에 이런 이름으로 부르기도 합니다. 물론 Windows Container를 사용 못하는 것은 아니지만 메인은 리눅스 입니다. 이런 차이점이 있기 때문에 기존의 가상화 기술을 완전히 대체하는 개념은 아닙니다.
그렇다면 이런 구조는 어떤 장점을 가져 왔을까요? 우선 ‘전가상화’ 의 경우에는 VM간 리소스가 격리 되기 때문에 VM의 성능이 생각보다 좋지 못합니다. ‘전가상화’ ‘반가상화’ 모두 호스트 (메인 OS) 와 격리 되기 때문에 VM에 맞는 별도의 하드웨어 드라이버들이 존재 하는데 지원이 원활하지 않은 경우도 있기에 관리가 쉽지만은 않습니다. 그리고 결정적으로 VM들은 오롯이 독립 된 별도의 시스템 형식으로 작동 되기 때문에 생각 보다 무겁고 용량이 큽니다. 물론 이 독립 된 구조가 장점이 되기도 하지만 개발환경에서 무겁고, 초기 작동 준비에 긴 시간이 드는 것은 별로 아름다운 상황은 아닙니다.
Docker의 컨테이너는 완벽히 격리되는 구조가 아니기 때문에 보안 취약점이 있지만, 개발 환경구성에서는 얻는 이득이 더욱 많습니다.
- 상대적으로 작은 용량과 공유가 쉽다.
- 컨테이너 재활용 가능한 구조로 한번 만들어 놓은 컨테이너는 사골을 끓일 수 있다.
- 잘 쪼개 놓은 컨테이너는 여러 개발환경을 변주를 주어 커버 할 수 있다.
- 위와 같은 이유로 분산 환경 개발을 꾸미는데 아주 편리하다.
- 의존성 있는 프로그램들의 버전변경 시 호환 테스트를 하기도 좋다.
- 개발 환경과 배포 까지의 자동화 지원이 잘 되어 있어, 잘 구성 하다면 원터치로 개발에서 서비스 배포까지 한방에 해결 할 수 있다.
이런 장점들이 존재 하기 때문에 개발환경의 구성과 협업 진행 할 때 환경의 공유를 목적으로 할 때 아주 좋은 선택이 될 수 있습니다. 제 경험상 실제 Docker를 많이 사용하는 분들은 Linux 라는 특성 때문에 서버 프로그래머, Web 프로그래머, 분산 서비스 개발자, 서비스 관리자 등과 같은 분들이 주로 이용을 합니다만, 기타 애플리케이션을 작업하시는 분들도 테스트를 위한 목적 등으로 유용하게 수 있는 좋은 도구라고 생각합니다.
오늘은 간단하게 Docker가 무엇인지 소개하는 정도의 내용으로 정리를 하겠습니다. 다음에는 Windows 에서 Docker 설치하고 사용하는 기본적인 방법을 보도록 하겠습니다.
오늘은 여기 까지, 좋은 하루 보내시구요. 채널에 관심이 있으시다면 구독 하시고 자주 찾아와 주세요. :)
안녕하세요. 이상한 프로그래머, 야매 프로그래머 입니다.
어플리케이션 개발에 아주 유용하게 사용 하고 있는 Docker를 소개 하려고 합니다. 오늘은 간단한 개요 정도의 내용으로 Docker가 무엇인지를 소개 하고 차근차근 설치방법, 사용방법 들을 소개해 나가려고 합니다.
개요
Docker가 등장 한지 딱 10년 되었네요. 2013년에 등장을 했고 제가 사용하기 시작 한 것은 2~3년 정도 된 것 같습니다. 개발환경을 준비하고 테스트 하는데 주로 사용 하고 있습니다. Docker를 사용하기 전에는 가상화 도구인 VirtualBox를 주로 이용 했습니다.
데스크탑에 개발환경을 준비하는 작업은 생각보다 시간도 많이 걸리고 복잡한 일이죠. 게다가 1개의 프로젝트만 진행을 한다면 행복 하겠지만 우리에게 결코 그런 일은 일어나지 않습니다. 여러 프로젝트를 준비 하다 보면 이 복잡한 의존성 관계에 데스크탑의 개발환경 자체가 스파게티처럼 엉키기 마련이죠.
이렇게 만만치 않은 개발환경 세팅이기 때문에, 그동안 언어 레벨, 패키지 관리자, 가상화 기술 까지, 오롯이 개발에만 집중하기 위해 환경 세팅을 쉽고 빠르게 준비하고 공유할 수 있는 방법을 많이들 고민 하였습니다. 제 경우에는 보통 가상화 도구인 VirtualBox를 이용하여 이런 개발 환경을 만들고 공유 했습니다. 하지만 완전이 만족 스럽지는 못했습니다. 가상머신의 특성상 무겁고, 용량이 커지는 경우가 많아서 작업자 간의 환경 공유도 쉽지 않았습니다. 그리고 시간이 지나면서 분산 환경 형태의 프로그램을 작성 해야 하는 경우가 많아 졌는데, 이런 환경에 대응하기도 편하지 않았습니다.
이런 불만 사항을 해소 시켜 줄 수 있는 장점이 있다는 Docker 에는 항상 눈길이 갔지만, 쉽게 적용 할 수는 없었죠. 혼자 일을 한다면 모르겠지만 협업하는 환경에서는 고려 해야 할 사항이 많았습니다. 그러던 중 종례에 의견이 일치되어 개발 환경을 Docker 로 꾸미는 것이 결정 되어 사용하게 되었습니다.
Docker
Docker 공식 문서의 소개를 보자면, 애플리케이션 개발, 배포, 실행 을 위한 오픈 소스 플랫폼이라고 설명 하고 있습니다. 이 설명대로 현재 Docker는 여러 클라우드 호스팅 서비스에서 서비스 배포 자동화를 위한 도구로 적용 되어 있습니다. 개발 → 서비스 배포 → 서비스 진행 까지 자동화 할 수 있는 도구 입니다.
Docker는 가상화 도구 이기도 한데, 기존의 가상화 도구와는 다릅니다. 기존의 가상화를 ‘전가상화’, 반가상화’ Docker의 가상화를 ‘OS레벨 가상화’ 라고도 이야기 하는데, 주요 차이점은 하드웨어 레벨에서 지원하는 가상화 인가 OS레벨의 가상화 인가 에 따른 차이점으로 볼 수 도 있습니다.
Docker는 리눅스 커널의 프로세스 격리 기술을 이용하여 만들어 졌습니다. 그래서 사실 Docker는 리눅스 용입니다. Docker에서는 생성 된 가상머신을 컨테이너라 부르는데, 가상머신과는 개념이 다르기 도 하고 사용 방식과 구조 때문에 이런 이름으로 부르기도 합니다. 물론 Windows Container를 사용 못하는 것은 아니지만 메인은 리눅스 입니다. 이런 차이점이 있기 때문에 기존의 가상화 기술을 완전히 대체하는 개념은 아닙니다.
그렇다면 이런 구조는 어떤 장점을 가져 왔을까요? 우선 ‘전가상화’ 의 경우에는 VM간 리소스가 격리 되기 때문에 VM의 성능이 생각보다 좋지 못합니다. ‘전가상화’ ‘반가상화’ 모두 호스트 (메인 OS) 와 격리 되기 때문에 VM에 맞는 별도의 하드웨어 드라이버들이 존재 하는데 지원이 원활하지 않은 경우도 있기에 관리가 쉽지만은 않습니다. 그리고 결정적으로 VM들은 오롯이 독립 된 별도의 시스템 형식으로 작동 되기 때문에 생각 보다 무겁고 용량이 큽니다. 물론 이 독립 된 구조가 장점이 되기도 하지만 개발환경에서 무겁고, 초기 작동 준비에 긴 시간이 드는 것은 별로 아름다운 상황은 아닙니다.
Docker의 컨테이너는 완벽히 격리되는 구조가 아니기 때문에 보안 취약점이 있지만, 개발 환경구성에서는 얻는 이득이 더욱 많습니다.
- 상대적으로 작은 용량과 공유가 쉽다.
- 컨테이너 재활용 가능한 구조로 한번 만들어 놓은 컨테이너는 사골을 끓일 수 있다.
- 잘 쪼개 놓은 컨테이너는 여러 개발환경을 변주를 주어 커버 할 수 있다.
- 위와 같은 이유로 분산 환경 개발을 꾸미는데 아주 편리하다.
- 의존성 있는 프로그램들의 버전변경 시 호환 테스트를 하기도 좋다.
- 개발 환경과 배포 까지의 자동화 지원이 잘 되어 있어, 잘 구성 하다면 원터치로 개발에서 서비스 배포까지 한방에 해결 할 수 있다.
이런 장점들이 존재 하기 때문에 개발환경의 구성과 협업 진행 할 때 환경의 공유를 목적으로 할 때 아주 좋은 선택이 될 수 있습니다. 제 경험상 실제 Docker를 많이 사용하는 분들은 Linux 라는 특성 때문에 서버 프로그래머, Web 프로그래머, 분산 서비스 개발자, 서비스 관리자 등과 같은 분들이 주로 이용을 합니다만, 기타 애플리케이션을 작업하시는 분들도 테스트를 위한 목적 등으로 유용하게 수 있는 좋은 도구라고 생각합니다.
오늘은 간단하게 Docker가 무엇인지 소개하는 정도의 내용으로 정리를 하겠습니다. 다음에는 Windows 에서 Docker 설치하고 사용하는 기본적인 방법을 보도록 하겠습니다.
오늘은 여기 까지, 좋은 하루 보내시구요. 채널에 관심이 있으시다면 구독 하시고 자주 찾아와 주세요. :)
'야매 개발실 > Docker' 카테고리의 다른 글
Docker mulit container와 docker compose (0) | 2023.11.13 |
---|---|
Docker 데이터 유지를 위한 volume 사용법 [Part5,6] (0) | 2023.11.08 |
Docker 앱 업데이트와 이미지 공유 Part 3 ~ 4 (0) | 2023.10.31 |
Docker 개념과 기본 사용법 Part. 1~2 (0) | 2023.10.30 |
Docker 설치 (0) | 2023.10.23 |