Docker
1. 개념
1) Docker
- 도커(Docker) : 리눅스 컨테이너(Linux Container) 기술을 기반으로 하는 오픈 소스 서비스
- 도커를 통해 애플리케이션 실행 환경을 코드로 작성할 수 있으며, OS를 격리화하여 관리
2) Linux Container
- Linux 기반의 기술 중 하나로, 필요한 라이브러리와 애플리케이션을 모아서 마치 별도의 서버처럼 구성한 것을 의미
- 컨테이너를 이루는 네트워크 설정, 환경 변수 등의 시스템 자원은 각 컨테이너가 독립적으로 소유
- 가상화와는 리소스 격리성 차원에서 다른 기술임
구획화
- 프로세스의 구획화
: 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스 가능
: 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없음
- 네트워크의 구획화
: 기본으로 컨테이너 하나에 IP 주소가 할당됨
- 파일 시스템의 구획화
: 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있기에 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있음
2. 특징
1) 환경 표준화
- 대표적인 운영 체제(OS) : Linux, Windows, MacOS로 구분
- 엔지니어는 자신이 개발하는 애플리케이션이 어떤 환경에서 구동될지 생각하고 개발해야 함
- 개발하려고 하는 여러 애플리케이션을 구동하는 운영체제가 서로 다르다면 환경에 따라 조금씩 변경할 부분이 발생
- 같은 Linux인 Ubuntu, CentOS, Debian은 서로 다른 환경이므로 여러 버전이 존재할 수도 있음
2) 리소스 격리성
- 실제로는 하나의 컴퓨터를 사용하지만, 여러 개의 컴퓨터를 이용하는 것처럼 하는 것
- 리소스 격리성을 제공하는 기술 : 가상 머신(Virtual Machine), 도커
- 가상 머신과 도커는 격리성을 제공하기 때문에 각 애플리케이션마다 다른 컴퓨터에서 실행되는 것처럼 IP나 Port 등을 다르게 설정할 수 있음
(1) 가상 머신
- VirtualBox, VMware이 대표적
- 개발 환경이나 사용 환경을 이미지로 저장하고, Host OS 위에 게스트 OS를 올리는 방식
(2) 도커
- 가상 머신만큼 견고한 격리성을 제공하지는 않음
- 도커는 리눅스의 컨테이너(Linux Container)를 이용한 기술로, OS 위에 다른 OS를 실행하는 것이 아니므로 가상 머신보다 좋은 성능을 낼 수 있음
- 애플리케이션에 대한 환경 격리성을 중심으로 한 VM과는 달리, 도커는 Container의 관점에서 개발자와 사용자 커뮤니티를 중심으로 혜택을 제공하는 데 있음
Docker Container Lifecycle
3. Docker CLI
- Ubuntu 운영체제로 실습을 진행하는 경우, 관리자 권한으로 Docker 명령어를 실행해야 함
*permission denied
메시지가 포함된 오류를 만난다면, sudo
를 명령어 앞에 붙여서 관리자 권한을 부여
설치
brew install docker
- homebrew로 설치한 docker는 서버가 아닌 client이기에 docker server로 설치를 해야 함
- Install Docker Desktop on Mac