[docker] 도커란 무엇인가? By starseat 2023-01-10 12:39:30 server/oss Post Tags # 도커란 무엇인가 ## 용어 정리 ### 도커(Docker) - `데이터 또는 프로그램을 격리시키는 기능` - 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능 제공 - 서버에서 사용되는 프로그램 - `리눅스 운영체제가 동작하는 것을 전재`로 하는 구조로 되어 있어 `리눅스 운영체제에서만 동작` 가능 - 즉, 리눅스 컴퓨터에 독립된 격리 환경을 만드는 것이며, 리눅스에서만 동작하고, 컨테이너에서 동작할 프로그램도 리눅스용 프로그램이어야 함. ### 컨테이너(container) - 작은 단위로 분할된 조립형 창고? - 컨테이너를 다루는 기능을 제공하는 소프트웨어가 도커임. - 용량이 허락하는 한 하나의 도커에서 여러 컨테이너 생성 가능. - 컨테이너를 만들기 위해서는 이미지가 필요함. - 다른 컨테이너와 완전히 분리된 환경. - 즉, 컨테이너 안에 들어있는 프로그램은 다른 프로그램과 격리된 상태 ### 도커 엔진 - 컨테이너를 생성하고 구동시키는 소프트웨어 ### 이미지 - 소프트웨어를 배포하기 위한 도커의 한 단위, - 담고 있는 소프트웨어의 종류에 따라 다양한 이미지 사용 - 컨테이너를 만드는데 사용 - 이미지로만 컨테이너를 만들 수 있는 것이 아니라 컨테이너로도 이미지를 만들 수 있음. - 컨테이너에 추가 작업하여 개조된 컨테이너 생성 ### WSL2 - Windows Subsystem for Linux 2 - 윈도우에서 리눅스 소프트웨어를 실행하기 위한 기능 - Window 10 이상 버전에서 사용. (1903/1909 이후 버전, 2020년 봄 쯤에 업데이트 됨., ) ## 서버 - 어떤 서비스(Service)를 제공(Serve) 하는 것 - `기능적 의미의 서버`, `물리적 컴퓨터로서의 서버` 두 가지 의미를 갖음. ## 가상화 - 가상의 물리 서버를 만드는 것 - 물리적인 대상을 소프트웨어로 대체 (메인보드, CPU, 메모리 등) - VirtualBox, VMware ## 제약 사항 - 리눅스 운영 체제 필요 - Windows 나 MacOS 에서도 도커를 구동할 수는 있지만 내부적으로는 리눅스가 사용 됨. - 컨테이너에서 동작시킬 프로그램도 리눅스용 프로그램이어야 함. # 도커 동작 원리 - 일반적인 서버라면 운영체제 위에 프로그램이 직접 올라가지만 - 도커를 사용하는 경우에는 **운영체제 위에 도커 엔진이 동작하고 그 위에 컨테이너가 동작 함.** - 물리 서버(서버 컴퓨터) -> 서버 운영체제(리눅스 운영체제) -> 도커 소프트웨어(도커 엔진) -> 컨테이너 -> 리눅스 운영체제 비슷한 OS(커널을 제외한 주변 부분 기능만 존재) -> 프로그램 - `운영체제(OS)`: 소프트웨어나 프로그램의 명령을 하드웨어에 전달 # 도커 허브 - 도커 이미지 배포 서비스 - 공개된 컨테이너 이미지가 모여 있는 곳. - [https://hub.docker.com](https://hub.docker.com) ## 안전한 컨테이너 이미지를 고르는 법 ### 공식 이미지 사용 - 도커에서 직접 배포하거나 해당 소프트웨어를 개발 및 관리하는 기업이나 조직에서 제공하는 것 사용 ### 커스텀 이미지 직접 생성 - 필요한 최소한의 요소가 담긴 이미지에 필요한 소프트웨어를 추가로 설치해 커스텀 이미지 생성 - 운영체제가 포함된 이미지에 소프트웨어를 넣는 정도는 크게 어렵지 않음. - 공식 이미지가 아니더라도 선량한 사용자들이 만든 안전한 이미지도 많음 - 경험이 쌓이기 전까진 섣불리 판단하지 말고 신중히 이미지를 선택해 사용해야 함. ## 도커 컨테이너의 생애주기 - 컨테이너는 '쓰고 버리는' 일회용품 같은 것임. - 새로운 버전이 나오면 새로운 컨테이너 사용 - `컨테이너의 생애주기`: **컨테이너 생성 > 실행 > 종료 > 폐기** 하는 과정 ## 데이터 저장 - 컨테이너를 폐기하면 해당 컨테이너 안에 저장 및 편집된 파일은 (당연히) 사라짐. - 보통은 도커가 설치된 **물리 서버(호스트)의 디스크를 마운트하여 저장**. - 마운트: 디스크를 연결해 데이터를 기록할 수 있도록 한 상태 # 출처 - [그림과 실습으로 배우는 도커 & 쿠버네티스](https://wikibook.co.kr/dkkb/) Previous Post [nginx] yum 설치 Next Post [docker] 도커 명령어