본문 바로가기
Docker

[Docker] 도커의 동작 원리

by 상똥 2024. 7. 25.

[1. 도커의 구조]

 

1. 운영체제

- 소프트웨어나 프로그램의 명령을 하드웨어에 전달하는 역할

- kernel과 그 외의 부분으로 이루어짐

- kernel : 하드웨어를 다룸

- 그 외의 부분 : 프로그램의 명령 내용을 kernel에 전달

 

2. 컨테이너 속 리눅스 비슷한 무언가

- 컨테이너는 완전히 독립된 공간이므로, 컨테이너 속 프로그램의 명령을 전달받을 수 없음

- 컨테이너 속 명령을 전달받기 위해 kernel을 제외한 운영체제의 '그 외 부분'을 컨테이너 안에 넣고, kernel은 빌려 사용

- 이로 인해 컨테이너의 가벼움을 유지할 수 있음 → 컨테이너의 정보를 내보내기가 쉬워짐 → 컨테이너를 다른 곳에서 복원하기가 쉬워짐

 


[2. 도커 허브와 이미지, 컨테이너]

1. 이미지

- 이미지는 컨테이너의 설계도 역할이다

- 컨테이너를 만드는데에 사용할 뿐 개발자가 이미지 자체를 사용하지는 않는다

- 하나의 이미지로 여러 개의 컨테이너를 구축할 수 있다

- 이미지를 통해서 컨테이너를 생성하지만, 반대로 컨테이너를 통해서 이미지를 생성할 수 있다

※ 컨테이너를 통해 이미지를 생성 가능함으로써 오는 장점은, 변경사항이 있을 때 복제된 컨테이너를 일일히 수정할 필요가 없다는 것이다. 개조된 컨테이너로부터 이미지를 다시 만들면 다수의 서버에 배포하는 과정이 매우 간단해진다.

- 도커 엔진 간 이동이 가능하다. 이로 인해 컨테이너 자체가 이동하는 것이 아니지만 결국 그와 가은 효과를 얻는다

 

2. 도커 허브

- 안전한 이미지를 만들기 위해서는, 공식 사이트의 이미지를 사용하는 것이 좋다

- 도커 이미지를 배포하는 서비스 사이트

- http://hub.docker.com

- 컨테이너 이미지가 모여있는 곳으로, 원하는 컨테이너 이미지를 다운받을 수 있다

- 예시로, javascript로 구성된 프로그램을 배포하기 위해서는 javascript의 실행기인 node.js의 환경이 필요한데, 아래 사진처럼 다양하게 제공하고 있음을 확인할 수 있다

 

 


[3. 도커 컨테이너의 생애주기와 데이터 저장]

1. 컨테이너의 사용 방식

- 컨테이너는 한 번 사용하고 버리는 일회용품과 같다

- 서비스의 유지보수 과정을 거칠 때마다 컨테이너를 수정하는 것은 번거로우므로, 새로운 컨테이너를 생성하는 것이 바람직하다

- 따라서, 컨테이너의 생애주기는 아래와 같이 표현할 수 있다

 

2. 데이터의 저장

- 컨테이너가 폐기되면 그 내부에 있던 데이터 또한 사라지게 된다

- 이때 데이터가 완전히 삭제되는 것을 방지하기 위해 도커가 설치된 물리적 서버의 디스크를 마운트한다

- 마운트 : 디스크를 연결해 데이터를 기록할 수 있도록 한 상태

- 즉 '마운트한다'라는 것은 도커 컨테이너에 컴퓨터의 HDD 또는 SSD를 연결하여 데이터를 컴퓨터에도 기록하는 것이다

- 이렇게 데이터를 컨테이너 외부에 저장함으로써 오는 장점은 다른 컨테이너와 데이터를 공유할 수 있다는 것이다

- 결론적으로 컨테이너가 생애주기를 거치는동안 데이터는 컨테이너 외부에 저장하면서 계속 활용하는 것이다

 


[4. 도커의 장단점]

1. 도커의 구조와 성질, 그리고 장단점

 

 

2. 도커의 주 용도

- 동일한 환경을 여러개 생성 : 개발환경에서 모든 사람들에게 동일한 개발환경을 제공할 수 있다

- 격리된 환경 이용 : 개발환경에서 테스트한 후 운영환경에 적용할 수 있고, 컨테이너를 유지하는 한 도커엔진이 구동을 보장하므로 변경된 환경에 대한 테스트에 용이하다

- 컨테이너 밖과 독립된 성질 : 하나의 물리 서버를 여러개의 컨테이너가 동시에 사용할 수 있으므로 비용이 절약되며 소프트웨어를 여러번 설치하는 반복 업무를 줄일 수 있다