Docker 기본 정리
Docker란 무엇인가?
Container Engeine 중에서 가장많이 쓰이는 녀석이다.
그럼 컨테이너(Container)란 무엇인가?
컨테이너는 하나의 리눅스 프로세스가 마치 전용 서버에서 동작하고 있는 것 같은 분리 상태를 만들어 낸다.
컨테이너와 비교되는 것이 가상 서버인데
가상서버는 가상화 소프트웨어(ex : VMware, VirtualBox , Hyper -V 등)를 사용하여 마치 한대의 전용 서버가 있는 것처럼 이용해줄 수 있게 해준다.
한대의 머신에서도 여러 대의 가상 서버를 가동할 수 있어 하드웨어 구입이나 설치 관리 비용을 줄일 수 있다.
이러한 가상화 소프트웨어를 하이퍼바이저(HyperVisor)라 부른다.
그런데 도커는 이런 가상서버를 보다 효율적으로 운영할 수 있는 것이라고 볼 수 있다.
위 그림에서 처럼
가상서버를 사용할 경우 각 서버마다 OS가 설치되어야한다. 따라서 리소스를 많이 잡아 먹고 무겁다.
하지만 Container를 사용하면 Container 엔진하나만 설치하면 각 서버마다 OS가 설치될 필요가 없는
즉 각 컨테이너가 하나의 컨테이너 엔진에서 각각 독립성을 유지하여 하나의 전용서버처럼 돌아 갈 수 있다.
이러한 컨테이너 엔진으로 가장 많이 쓰이는 것이 바로 Docker이다.
컨테이너를 만들기 위해서는 DockFile을 만들어야하고
DockerFile을 이용해서 Image를 만든 다음 컨테이너를 구동할 수 있다.
1. dockerFile ( 레시피 같은 녀석 )
- 앱을 구동하기 위해 필요한 파일
- 필요한 dependency
- 필요한 환경변수
- 어떻게 구동해야하는지 스크립트
등을 작성한다.
2. 이미지
도커파일에서 명시한 대로 앱을 구동하는데 필요한 파일, dependency, 환경변수, 등을 이미지화, 즉
스냅샷을 찍어서 이미지로 만들어 둔다고 볼 수 있다.
이렇게 만들어진 이미지는 변경이 불가능한 상태로 볼 수 있다.
3. 컨테이너
sendBox처럼 이미지를 고립된 환경에서 개별적인 파일시스템안에서 실행할 수 있는 것을 말한다.
컨터이너안에서 우리 어플리케이션이 동작한다고 볼 수 있다.
객체지향에 익숙하다면 이미지를 하나의 클래스라고 보면 편하다.
즉 하나의 이미지가 존재하면 이를 이용해서 각각의 여러개 컨테이너를 만들 수 있다.
그래서 각각 컨테이너에서 각각 동작하는 파일들은 수정될 수 있는 상태이다.
4. 배포하는 방법
로컬에서 이미지를 만들어서 Container Registry에 push하고 필요한 서버나 다른 pc에서 그걸 pull해서 가져옴
이때 이미지를 정상적으로 실행하기 위해서는 docker같은 컨테이너 엔진이 필요한 것이다.
이미지를 업로드할 수 있는 Container Registry에는 public과 private이 존재한다.
그 중에서 docker hub가 많이 사용되고 있다고 한다.
회사에서는 보안적인 이유로 private을 사용한다.
개발하고 있는 Local Machine과 Server 각각 도커를 설치한다. (설치할건 도커 하나뿐! )
먼저 로컬 머신에서 DockerFile을 작성해서 빌드하여 이미지를 만들고 만들어진 이미지를 Container Registry에 업로드한다. 업로드된 이미지를 다운받아서 실행하면된다.