도커와 컨테이너에 대해 좀 더 자세히 알아보자
- 물리 서버 안에서 어떤 형태로 자리 잡는가?
- 컨테이너는 어떻게 만들어지는가?
- 잘 사용하기 위해 알고 있어야 하는 지식과 노하우
Section1. 도커의 동작 원리
도커의 구조
운영체제 위에 도커 엔진, 그 위에 컨테이너
컨테이너 내부에는 리눅스 운영체제 비슷한 무언가가 들어있음
(※ 실제 운영체제는 아님!)

운영체제?
소프트웨어나 프로그램의 명령을 하드웨어에 전달하는 역할
운영체제 = 커널 + 주변 부분
(ex. 입력/출력 처리 장치, 명령을 프로그램에 전달하는 역할)
도커는 운영체제 전체를 사용하는 게 아니라 커널만 공유
⇒ 가볍고 효율적
리눅스, MacOS, Windows
대부분 도커는 리눅스를 기반으로 동작
그러나 MacOS, Windows에서도 도커 사용 가능


Section2. 도커 허브와 이미지, 그리고 컨테이너
이미지: 붕어빵 틀
컨테이너: 붕어빵 (이미지를 실행한 결과)


- 이미지를 통해 컨테이너를 생성
- 컨테이너에 새로운 기능을 추가 후 다시 이미지로 만들 수도 있음
도커 허브와 도커 이미지
도커 허브 = 이미지 저장소
hub.docker.com
공개된 컨테이너 이미지가 모여 있는 곳
(GitHub와 비슷한 개념)
이미지 예시
- 운영체제만 포함
- 단일 소프트웨어 포함
- 여러 소프트웨어 포함
안전한 이미지 고르는 방법
- 공식 이미지 사용
- 커스텀 이미지 직접 생성
다양한 형태로 조합 가능한 컨테이너
도커의 원칙: 한 컨테이너에 하나의 프로그램
- 보안 및 유지 관리에 유리

Section3. 도커 컨테이너의 생애주기와 데이터 저장
도커 컨테이너는 일회용품에 가깝다

- 일반적으로 여러 개의 컨테이너를 동시에 가동함
- 그렇다면 데이터는?

데이터 저장
컨테이너가 삭제되면 데이터도 함께 삭제됨
⇒ 영속적인 데이터 저장을 위해서는 호스트 디스크에 마운트 필요
Section4. 도커의 장점과 단점

장점
- 한 대의 물리 서버에 여러 대의 서버를 실행 가능
- 서버 관리가 쉬움
- 사용법이 간단함
- 보안 측면에서 유리함
단점
- 리눅스 기반 지식 필요 (러닝 커브)
- 호스트 서버에 문제가 생기면 모든 컨테이너가 영향 받음
- 컨테이너를 장기 운영 시 장점 감소
- 컨테이너 1개만 쓰면 오히려 오버헤드
도커의 용도
- 팀원 모두에게 동일한 개발 환경 제공
- 새로운 버전 테스트 환경 구성
- 동일한 서버가 여러 대 필요한 상황에 적합