도커의 동작 원리
1. 도커의 구조
- 도커 사용 X
- 도커를 사용하지 않는 일반 서버의 구조로 물리 서버가 있고, 물리 서버에서 동작하는 운영체제가 있으며, 운영체제 위에 프로그램이나 데이터가 올라갑니다.
- 물리 서버 | 운영체제 | 프로그램 or 데이터
- 도커 사용 O
- 도커를 사용하는 경우, 물리 서버에서 동작하는 리눅스 운영체제가 존재하며, 운영체제 위에서 도커 엔진이 동작하고 그 위에는 컨테이너가 존재합니다. ( 데이터나 프로그램은 컨테이너 내부에 위치합니다. )
- 물리 서버 | 리눅스 운영체제 | 도커 엔진 | 컨테이너 ( 프로그램 or 데이터 )
- 컨테이너의 구조
- 리눅스 운영체제에서 커널을 제외한 나머지 부분이 들어있습니다.
( 커널 : 하드웨어를 다루는 부분 / 나머지 : 명령을 전달받거나 커널이 실행한 결과를 프로그램에 다시 전달 ) - 즉, 커널은 가장 밑바탕이 되는 리눅스 운영체제의 커널을 공유하여 도커가 '가볍다'는 특징을 가질 수 있습니다.
- scratch 이미지를 사용하는 경우 텅 빈 컨테이너를 만들 수 있습니다.
- 도커는 밑바탕에서 리눅스 운영체제가 동작하는 것을 전제로 하는 구조이므로 리눅스 운영체제에서만 동작할 수 있다.
- 리눅스 운영체제에서 커널을 제외한 나머지 부분이 들어있습니다.
2. 도커 허브 / 이미지 / 컨테이너
- 이미지는 컨테이너를 생성하기 위한 빵틀같은 역할을 합니다.
- 하나의 이미지로부터 여러 개의 컨테이너를 생성할 수 있습니다.
- 반대로 컨테이너를 바탕으로 이미지를 생성할 수도 있습다다. ( 이미지 익스포트 )
- 도커 허브는 도커 이미지를 배포하는 서비스의 이름입니다. ( https://hub.docker.com )
- 한 컨테이너의 한 프로그램
- 도커를 사용하는 원칙 중 하나
- 유지보수와 보안 측면에서 유리함.
3. 도커 컨테이너의 생애주기와 데이터 저장
- 컨테이너 생명주기
- 컨테이너는 도커 허브와 이미지를 사용하면 쉽게 생성 가능합니다. 따라서, 기존의 컨테이너를 업데이트 하는 것보다, 오래된 컨테이너를 버리고 새로운 이미지로부터 새로운 컨테이너를 만들어 갈아타는 방식을 사용합니다.
- 생성 > 실행 > 종료 > 폐기
- 데이터 저장
- 컨테이너를 폐기하면 컨테이너 안의 데이터( 파일 등 )는 전부 삭제됩니다. 따라서, 보통 컨테이너 외부에 데이터를 저장합니다.
- 보통 도커가 설치된 물리적 서버( 호스트 )의 디스크를 마운트해 해당 디스크에 데이터를 저장합니다.
( 외부에 데이터 저장 ) - 마운트 : 디스크를 연결해 데이터를 기록할 수 있도록 한 상태
4. 도커의 장점과 단점
도커의 핵심 성질
- 환경을 격리할 수 있다.
- 독립된 환경으로 여러 개의 컨테이너를 띄울 수 있고, 똑같은 애플리케이션을 여러 개 띄울 수 있다.
- 이미지를 만들 수 있고, 도커 허브를 이용하여 배포할 수 있다.
- 이미지를 처음부터 만들지 않아도 내려받기만 하면 컨테이너를 사용할 수 있다.
- 컨테이너 구축이 간단하므로 교체가 쉽고, 업데이트가 쉽다.
- 이동성이 좋다. ( 환경 이동이나 개발환경 구축이 쉽다 )
- 컨테이너에 커널을 포함시킬 필요가 없다.
- 컨테이너에는 커널을 포함시키지 않아도 되기 때문에 가볍다.
도커의 장점
- 한 대의 물리 서버에 여러 대의 서버를 띄울 수 있다.
- 도커를 통해 격리된 환경으로 여러 가지 기능을 안전한 상태로 띄울 수 있으며, 같은 소프트웨어를 여러 개 띄울 수도 있다.
- 컨테이너에는 커널이 포함되지 않으므로 소프트웨어적으로 하드웨어를 재현하는 가상화 기술에 비해 가볍다.
- 서버 관리가 용이하다.
- 업데이트가 간단하기 때문에 최신 상태로 소프트웨어를 유지하기 쉽다.
- 컨테이너 교체나 수정이 쉽기 떄문에 환경 이전이 간단하다. ( 생성 및 폐기가 간단함 )
- 다루기 쉽다.
- 명령 한 줄로 서버 구축이 끝난다.
도커의 단점
- 리눅스용 소프트웨어밖에 지원하지 않는다.
- 호스트 서버에 문제가 생기면 모든 컨테이너에 영향을 미친다.
- 컨테이너 여러 개를 사용하는 형태를 가정하므로 컨테이너 하나만을 사용하면 이점을 누릴 수 없다.
( 오히려 도커 엔진으로 인해 오버헤드가 발생함 )
도커의 주 용도
- 팀원 모두에게 동일한 개발환경 제공하기 ( 동일한 환경 여러 개 만들기 )
- 새로운 버전 테스트 ( 격리된 환경을 이용 )
- 동일한 서버가 여러 대 필요한 경우( 컨테이너 밖과 독립된 성질을 이용 )
'Docker' 카테고리의 다른 글
Docker & Kubernetes [ 1 ] (1) | 2023.12.04 |
---|---|
12月 Wanted Free Onboarding BE Challenge [ 1. 사전 과제 ] (1) | 2023.12.04 |