tech

Docker

Siyoon Jeon 2021. 8. 13. 21:37

Docker 란?

리눅스 컨테이너(Linux Container) 기술을 기반으로 하는 오픈 소스 서비스

앱 실행 환경을 코드로 작성할 수 있고, OS를 격리화해서 관리한다.

 

🔽 Docker Download 

더보기

https://docs.docker.com/docker-for-mac/install/

* mac M1 사용자는 Rosetta 2

docker --version 명령어로 확인하여 버전이 잘 뜬다면 설치 완료 ! 다운받은 도커를 실행시키고 CLI에 명령어를 입력하면 된다.

Linux Container 란?

리눅스 기반의 기술 중 하나로, 필요한 라이브러리와 앱을 모아서 마치 별도의 서버처럼 구성한 것을 말한다. 각 컨테이너에는 네트워크 설정, 환경 변수 등의 시스템 자원을 독립적으로 소유하고 있다.

 

1. 프로세스의 구획화

  • 해당 컨테이너 안에서만 엑세스 할 수 있다.

2. 네트워크 구획화

  • 기본으로 컨테이너 당 IP 주소가 할당되어 있다.

3. 파일 시스템의 구축화

  • 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있다.
  • 따라서, 해당 컨테이너에서 명령이나 파일 등의 엑세스를 제한할 수 있다.

 

그럼, case 1부터 Docker가 어떤 문제를 해결할 수 있을지 알아보자.

 

case 1 - 환경 표준화

대표적인 OS Linux, Window, MacOS로 구분할 수 있다. 수 많은 환경에서 다른 코드들은 수작업으로 맞추는 일은 쉬운 일이 아니다. 각각 다른 환경에서 애플리케이션이 돌아가도록 빌드하고 테스크한다면 많은 시간과 노력이 필요하다.

 

case 2 - 수작업으로 일치시키는 환경 구성

모든 애플리케이션이 동일한 OS 환경에서 구동한다면, 환경 구성은 빨라질까?

어느 정도는 빨라질 수 있디만, 같은 OS라도 사용자에 따라 달라지는 환경 변수 구성이 존재한다. 홈 디렉토리에 따라, 컴퓨터 환경에 맞게 변경해야 하는 부분이 존재한다. 이런 상황에서는 OS를 포맷하고 다시 설치하는 고전적인 방법이 존재한다.

 

그렇다면 개발과 실행 시 환경 설정이 코드로 정해져 있다면, 조금 더 수월한 개발이 가능하지 않을까?

 

case 3 - 리소스 격리성

실제로 컴퓨터는 하나지만, 여러 대의 컴퓨터를 이용하는 것처럼 할 수 없을까?

바로 그 방법을 '리소스 격리성'이라고 한다. 가산 머싱, 도커 등이 제공하는 기술이다. OS도 일치시키고, 환경도 일치시키기 위해 가상 머신을 이용하는 것은 좋은 방법이다. 가상 머신은 개발 환경이나 사용 환경을 이미지로 저장하고, Host OS 위에 게스트 OS를 올리는 방식을 사용한다.

 

즉, 가상 머신이나 도커는 격리성을 제공하기 때문에, 각 앱마다 다른 컴퓨터에서 실행되는 것처럼 IP, Port 등을 다르게 설정할 수 있다.

 

그렇다면 도커와 가상머신의 차이는 무엇일까?

 

  1. 도커는 (가상 머신만큼) 견고한 격리성을 제공하지 않는다.
  2. 도커는 리눅스의 컨테이너를 이용한 기술, OS 위에 다른 OS를 실행하는 것이 아니므로 가상 머신보다 좋은 성능을 낼 수 있다.
  3. 애플리케이션에 대한 환경 격리성을 중심으로 한 VM과는 달리, 도커는 Container의 관점에서 개발자와 사용자 커뮤니티를 중심으로 혜택을 제공한다.

 

Docker Container Lifecycle