티스토리 뷰
어플리케이션을 패키징 할 수 있는 tool
도커 :
application, 그에필요한 system tools, 환경설정, dependencies를 하나로 묶어 = 컨테이너 (하나의 작은 소프트웨어 유닛)
=>
다른 서버, 다른 PC
그 어떤것에도 쉽게 배포하고, 안정적으로 구동할 수 있게 도와주는 tool
테크놀로지가 복잡해짐에 따라서, 우리 어플리케이션 구동에는 꽤 많은 것들이 필요하다
node.js를 예로 들어보자, 우리의 소스파일(코드 친것) 만 서버에 배포하는것으로는
우리의 어플리케이션을 구동하는데 문제점이 있다.
nodejs, npm 여러 라이브러리를 사용한다면, 여러 dependencies, configs(환경설정) 하는 것
이 모든 것들을 설정 해줘야한다.
서버마다, 개발자들의 pc마다 이런 모든것들을 설치 하고 설정하는것은 꽤 번거롭고, 오류가 있을 수 있다.
내 pc에서 잘된다고 server에서 잘되지않을 수 있다. (버전이 달라서..)
도커안에는 그렇담 뭐뭐 포함 될 수 가 있을까?
소스코드 app.js + 정상적으로 작동하기위한 node.js + 환경설정 configuration + npm + 여러 라이브러리들의 dependencies + 어플리케이션에 필요한 다양한 resource들
도커를 사용하여, 어디에서든, 어떤 pc에서도 동일하게 구동할 수 있다.
도커의 container 그리고 vm?
vm은
하드웨어 Infrastructure위에 vmware나 virtualbox같은 hypervisor 소프트웨어을 이용하여, 각각의 가상의 머신을 만들 수 있다.
한 운영체제 위에서 동일한 어플리케이션을, 각각의 고립된 다른 환경에서 구동하기 위해서는
이 virtual machine을 이용해서 어플리케이션을 구동해야했는데
이 vm virtaul machine은 , 각각의 운영체제를 포함하고 있기 때문에
mac위에서 윈도우, 리눅스 동시에 구동 할 수 있다.
경량화된 컨셉!
반면 container는 하드웨어에 설치된 운영체제 Host OS에서 container engine 소프트웨어를 설치하면 개별적인 컨테이너를 만들어서 각각의 고립된 환경에서 구동되게 해준다.
차이점!
virtual machine 운영체제를 포함
운영체제를 포함 x, container engine을 포함한 운영체제를 공유한다.
container engine중에 도커를 가장 많이 사용한다
그럼이제 도커를 봐보자
도커의 3대 구성요소
1.만들고
2.배포하고
3.구동한다.
1. Building Container
Dockerfile을 만들고 Image를 만들어서 Container를 구동한다.
Dockerfile은 컨테이너를 어떻게 만들어야하는지 설명서. 레시피이다.
1.어플리케이션 구동위해 필요한 파일은 무엇인지
2.어떤것들을 설치해야하는지 dependencies
3.필요한 환경변수 설정
4. 어떻게 구동해야하는지 스크립트 포함
이렇게 작성한 dockerfile을 통해서 이미지를 만든다. => 필요한것들을 찰칵 snapshot해서 이미지파일로 만든다. = 변경불가 불변의 상태
container는 샌드박스처럼 어플리케이션의 이미지를 고립된 환경에서 실행할 수 있는것. 컨테이너안에서 우리의 파일이 동작한다고 볼 수 있다.
즉 conatiner는 이미지파일을 이용해서 구동하는것!
이미지를 class라고 생각한다. 청사진.
이미지를 이용해서 컨테이너를 만드는것 => 인스턴스
1.만들고
2.배포하고
3.구동한다.
2번째 방법인 배포
2. shippinig container
local machine에서 이미지를 만들어서,-> github와 같은 container registry에서 image를 push하고 내가 만든이미지를 pull해서 가져와서 사용하면된다.
docker와 같은 컨테이너 엔진이 꼭 필요하다!
public서비스 = docker hub
private서비스 = aws, google cloud, microsoft azure
우리가 사용하고있는 local machine에 도커를 설치하고, 서버에도 도커를 설치하고
1. build
2. image push하고
3. pull