Docker란?
도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.
![https://ko.wikipedia.org/wiki/%EB%8F%84%EC%BB%A4(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)](https://ko.wikipedia.org/wiki/%EB%8F%84%EC%BB%A4(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4))
컨테이너
어떤 환경에서나 서비스를 실행하기 위해 필요한 모든 요소를 포함한 소프트웨어 패키지.
컨테이너는 서비스를 실행하기 위한 코드파일 등 뿐 아니라, 이를 실행하기 위해 필요한 특정 버전의 프로그래밍 언어, 런타임 및 라이브러리와 같은 종속 항목까지 함께 포함하고 있습니다.
서비스를 실행하기 위한 모든 것을 가지고 있으므로, 서비스를 실행할 하드웨어만 있다면 OS 종류를 가리지 않고 어느 환경에서나 원하는 서비스를 실행시킬 수 있습니다.
애플리케이션을 관련 종속 항목과 함께 패키지로 묶어 소프트웨어 서비스 구동을 위한 격리 환경을 마련하고 격리된 환경을 만들어준다는 점에서 VM과 비슷하지만, 하드웨어 수준에서 가상화를 하면서 여러 개의 커널을 구동하는 VM과는 달리, 컨테이너는 OS 수준에서 가상화되고, 하나의 운영 체제 커널을 공유하기 때문에 VM보다 훨씬 적은 메모리를 사용한다는 강점이 있습니다.
운영체제 수준에서 가상화되므로 컨테이너 간 리눅스 커널을 공유할 수 있습니다. 이 때문에 하드웨어 수준에서 격리되는 VM보다 실행 속도가 빠르고, 성능 상 손실이 적게 됩니다.
더욱 자세한 설명은 아래 링크를 참고해주세요.
레드햇의 컨테이너와 VM에 대한 설명
구글 클라우드의 컨테이너에 대한 설명
프로세스 격리 기술
Process Isolation
운영체제(OS) 의 한 프로세스를 다른 프로세스로부터 보호하도록 설계된 하드웨어, 소프트웨어 기술을 의미합니다.
예를 들어 프로세스 A가 프로세스 B에 쓰는 것을 방지하는 그런 것이죠.
프로세스 격리 기술은 가상 주소 공간(Visual address space)을 통해 프로세스 A의 주소 공간을 프로세스 B의 주소 공간과 격리함으로써 구현합니다.
이렇게 격리된 프로세스 간에 상호작용이 필요할 경우엔 IPC(프로세스 간 통신) 채널을 통하면 됩니다. IPC는 (1)공유 메모리 (2)로컬 소켓 또는 인터넷 소켓 등이 있습니다.
-wikipedia : process isolation 중
한 프로세스가 다른 프로세스를 방해하지 않도록 각자의 저장 공간을 격리하고 별도의 런타임 환경을 만들어 프로세스를 실행시키는 기술입니다. 대표적으로는 컨테이너, 가상머신이 있고, 파이썬의 가상환경 기술도 이에 합당하다고 생각합니다.
여러 소규모 작업들을 묶어 하나의 대규모 서비스를 할 때를 가정해 생각해봅시다. A라는 작업은 의존 라이브러리 등의 사유로 파이썬 3.9 버전을 사용해야 합니다. 그리고 B라는 작업은 3.5 버전을 사용해야하죠. 이럴 때에는 같은 환경에서 작업이 실행될 수가 없습니다. 두 서비스를 동시에 실행하기 위해 서로 영향을 미치지 않도록 가상환경 기술을 이용할 수 있습니다.
오케스트레이션
컴퓨터 시스템과 애플리케이션, 서비스의 자동화된 구성, 관리, 조정을 의미합니다. 쉽게 말해 어떤 결과를 달성하기 위해 여러 프로세스나 서비스, 인프라, 리소스 등 구성 요소들의 실행을 원활하게 작동할 수 있도록 하는 작업입니다.
Docker Compose란?
도커를 한 번에 묶어 서비스 컨테이너를 생성하는 역할을 합니다.
서비스에 대한 내용, 여러 컨테이너 간의 통신 방법 등을 yaml 파일에 사전에 설정해둬, 여러 컨테이너를 한꺼번에 실행하거나 연계하여 사용하는 환경에서 효과적입니다.
Reference
도커 설명 : https://ko.wikipedia.org/wiki/%EB%8F%84%EC%BB%A4_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)
우분투 설치 : 코스모스팜 블로그 : 우분투 18.04 도커 설치 방법
도커 컴포즈 커맨드 사용법 : https://www.daleseo.com/docker-compose/
도커 설치 확인 : https://gptjs409.github.io/infra/2019/10/27/docker-install.html
컨테이너에 대한 설명 : https://cloud.google.com/learn/what-are-containers?hl=ko
컨테이너와 VM의 작동 방법 : https://www.redhat.com/ko/topics/containers/containers-vs-vms
하이퍼바이저 : https://www.redhat.com/ko/topics/virtualization/what-is-a-hypervisor
도커의 -t 옵션 : https://ajdkfl6445.gitbook.io/study/devops/docker/make-image
도커 명령어 : https://javacan.tistory.com/entry/docker-start-7-create-image-using-dockerfile
도커 명령어 : https://velog.io/@zero-black/Docker-docker-compose-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC
도커 명령어 : https://velog.io/@kyy00n/docker-compose.yml-%EC%9E%91%EC%84%B1
프로세스 격리 기술 : https://en.wikipedia.org/wiki/Process_isolation
오케스트레이션 : https://www.databricks.com/kr/glossary/orchestration
도커 컴포즈 설치 : https://skstp35.tistory.com/378
컨테이너 설명 : 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 (조훈, 심근우, 문성주 저)