[Docker] 도커의 동작 원리
[1. 도커의 구조]
1. 운영체제
- 소프트웨어나 프로그램의 명령을 하드웨어에 전달하는 역할
- kernel과 그 외의 부분으로 이루어짐
- kernel : 하드웨어를 다룸
- 그 외의 부분 : 프로그램의 명령 내용을 kernel에 전달
2. 컨테이너 속 리눅스 비슷한 무언가
- 컨테이너는 완전히 독립된 공간이므로, 컨테이너 속 프로그램의 명령을 전달받을 수 없음
- 컨테이너 속 명령을 전달받기 위해 kernel을 제외한 운영체제의 '그 외 부분'을 컨테이너 안에 넣고, kernel은 빌려 사용
- 이로 인해 컨테이너의 가벼움을 유지할 수 있음 → 컨테이너의 정보를 내보내기가 쉬워짐 → 컨테이너를 다른 곳에서 복원하기가 쉬워짐
[2. 도커 허브와 이미지, 컨테이너]
1. 이미지
- 이미지는 컨테이너의 설계도 역할이다
- 컨테이너를 만드는데에 사용할 뿐 개발자가 이미지 자체를 사용하지는 않는다
- 하나의 이미지로 여러 개의 컨테이너를 구축할 수 있다
- 이미지를 통해서 컨테이너를 생성하지만, 반대로 컨테이너를 통해서 이미지를 생성할 수 있다
※ 컨테이너를 통해 이미지를 생성 가능함으로써 오는 장점은, 변경사항이 있을 때 복제된 컨테이너를 일일히 수정할 필요가 없다는 것이다. 개조된 컨테이너로부터 이미지를 다시 만들면 다수의 서버에 배포하는 과정이 매우 간단해진다.
- 도커 엔진 간 이동이 가능하다. 이로 인해 컨테이너 자체가 이동하는 것이 아니지만 결국 그와 가은 효과를 얻는다
2. 도커 허브
- 안전한 이미지를 만들기 위해서는, 공식 사이트의 이미지를 사용하는 것이 좋다
- 도커 이미지를 배포하는 서비스 사이트
- 컨테이너 이미지가 모여있는 곳으로, 원하는 컨테이너 이미지를 다운받을 수 있다
- 예시로, javascript로 구성된 프로그램을 배포하기 위해서는 javascript의 실행기인 node.js의 환경이 필요한데, 아래 사진처럼 다양하게 제공하고 있음을 확인할 수 있다
[3. 도커 컨테이너의 생애주기와 데이터 저장]
1. 컨테이너의 사용 방식
- 컨테이너는 한 번 사용하고 버리는 일회용품과 같다
- 서비스의 유지보수 과정을 거칠 때마다 컨테이너를 수정하는 것은 번거로우므로, 새로운 컨테이너를 생성하는 것이 바람직하다
- 따라서, 컨테이너의 생애주기는 아래와 같이 표현할 수 있다
2. 데이터의 저장
- 컨테이너가 폐기되면 그 내부에 있던 데이터 또한 사라지게 된다
- 이때 데이터가 완전히 삭제되는 것을 방지하기 위해 도커가 설치된 물리적 서버의 디스크를 마운트한다
- 마운트 : 디스크를 연결해 데이터를 기록할 수 있도록 한 상태
- 즉 '마운트한다'라는 것은 도커 컨테이너에 컴퓨터의 HDD 또는 SSD를 연결하여 데이터를 컴퓨터에도 기록하는 것이다
- 이렇게 데이터를 컨테이너 외부에 저장함으로써 오는 장점은 다른 컨테이너와 데이터를 공유할 수 있다는 것이다
- 결론적으로 컨테이너가 생애주기를 거치는동안 데이터는 컨테이너 외부에 저장하면서 계속 활용하는 것이다
[4. 도커의 장단점]
1. 도커의 구조와 성질, 그리고 장단점
2. 도커의 주 용도
- 동일한 환경을 여러개 생성 : 개발환경에서 모든 사람들에게 동일한 개발환경을 제공할 수 있다
- 격리된 환경 이용 : 개발환경에서 테스트한 후 운영환경에 적용할 수 있고, 컨테이너를 유지하는 한 도커엔진이 구동을 보장하므로 변경된 환경에 대한 테스트에 용이하다
- 컨테이너 밖과 독립된 성질 : 하나의 물리 서버를 여러개의 컨테이너가 동시에 사용할 수 있으므로 비용이 절약되며 소프트웨어를 여러번 설치하는 반복 업무를 줄일 수 있다