Why & What
- Why: 프로그램 설치를 쉽게 하기 위해
- What: “컨테이너”를 생성하고 실행하기 위한 플랫폼, 혹은 생태계
- Image: 하나의 파일. 모든 디펜던시와 컨피그를 포함함.
- Container: 이미지의 인스턴스
Hello, World!
docker run hello-world
- Docker Client가 해당 커맨드를 받음.
- Docker Server가 처리함.
- hello-world라는 이미지에 대한 컨테이너를 실행하려고 함.
- 이미지가 로컬에 있는지 확인. (Image Cache)
- 없으므로, Docker Hub에 접속해서 hello-world 이미지 확인.
- 이미지를 다운 받아서, 캐시에 저장
- 실행
Container?
- OS에는 커널이라는 것이 존재한다.
- 하드웨어와 프로그램 사이를 관장하는 역할
- 프로그램은 커널과 상호작용하기 위해 시스템 콜을 사용함.
- 만약 서로 다른 두 프로그램이 같은 디펜던시이지만 다른 버전을 사용해야 한다면 어떨까?
- 나이브한 솔루션: 하드디스크에 네임스페이스를 두 개를 두어서 사용
- 네임스페이싱: 프로세스 별로 자원을 격리시키는 것.
- Control Groups: 프로세스 별로 자원의 양을 제한하는 것.
- 따라서 컨테이너란?: 어떤 프로그램을 실행하기 위해 자원을 격리하고, 그루핑한 프로세스
Linux VM
- Docker를 설치하고 실행한다는 것은, 리눅스의 VM을 실행하는 것과 같음.