- 도커란 무엇인가
- 컨테이너 기반의 가상화 플랫폼
- 컨테이너를 사용하여 응용 프로그램을 더 쉽게 만들고, 배포하고, 실행할 수 있도록 설계된 도구
- 프로그램 설치 간편. 서버, 패키지 버전, 운영체제 등에 좀 덜 의존적임
- 컨테이너란 무엇인가
- 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스에 제공하여 프로그램의 이동,배포 및 관리를 단순하게 함
- 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨터 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어 표준 단위
- 도커 이미지란 무엇인가
- 도커에서 특정 프로세스를 실행하는데 필요한 모든 설정이나 종속성(소스 코드, 라이브러리, 컴파일 된 실행파일 등)을 묶은 형태
- 이미지를 이용해 컨테이너를 생성한다
- 도커 컨테이너란 무엇인가
- 이미지의 인스턴스로, 컨테이너를 이용해 프로그램을 실행한다.
- Docker run hello-world
- 도커 클라이언트 -> 도커 서버 (이미지 캐시 보관 장소에 이미지가 있나요? -> 캐시 보관 장소에 hello-world 가 없으면 도커 허브에서 가져오기) -> 도커 허브 (이미지들을 보관)
- 도커 사용 시 흐름
- 도커 CLI에 커맨드를 입력한다.
- 도커 서버(도커 Daemon)이 그 커맨드를 받아서 이에 따라 이미지가 있다면 컨테이너를 실행하고, 없다면 허브에서 가져와서 이미지를 생성하고 컨테이너를 실행한다.
- 도커와 기존의 가상화 기술과의 차이를 통한 컨테이너 이해
- 가상화 기술 나오기 전 : 한 대의 서버를 하나의 용도로만 사용 (하나의 OS, 하나의 프로그램)
- 하이퍼바이저 기반의 가상화 출현
- 논리적으로 공간을 분할하여 VM이라는 독립적인 가상 환경의 서버 이용 가능
- VM 내부에서 실행되는 모든 것은 호스트OS, 하이퍼바이저와 독립된다.
- 하이퍼 바이저 : 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 SW, 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자
- 호스트형 하이퍼 바이저 : 하드웨어 자원을 VM 내부의 게스트 OS에 에뮬레이트 하는 방식으로 오버헤드가 크나, 게스트 OS에 대한 제약이 없고 구현이 다소 쉽다.
- 도커 컨테이너와 가상머신
- 하이퍼바이저 방식과 달리 게스트 OS가 존재하지 않고, 동일한 커널을 공유하면서 리눅스 커널의 기능을 이용해 격리된 환경을 제공한다.
- 동일한 커널을 공유하여 프로세스를 호스트 OS에서 확인 가능하다.
- VM과 비교했을 때 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않고, 호스트 OS에 실행 패키지인 이미지만 배포하여 어플리케이션을 실행할 수 있어 더 가볍다.
- 컨테이너에서의 격리 기능은 ? 리눅스 커널 이용 (C Group, 네임스페이스)
- C group : 프로세스 그룹의 시스템 리소스 사용량을 관리(CPU, 메모리 사용 제한 등 사능)
- 네임 스페이스 : 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술. 별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술
- 이미지로 컨테이너 만들기
- 이미지 : 프로그램을 실행하는데 필요한 설정, 종속성 등 모든 것을 포함
- 시작 시 실행 될 명령어, 파일 스냅샷 (디렉토리나 파일 카피한 것)
- 이미지로 컨테이너 만드는 순서, 컨테이너에서 파일이 실행되는 순서
- 도커 클라이언트에서 docker run <이미지> 입력
- 파일 스냅샷을 하드디스크에 넣고 시작 시 실행 될 명령어를 넣어준다 -> 컨테이너가 실행될 때 실행 파일 시작 명령어가 실행된다-> 커널을 통해서 실행파일을 작동시킨다 -> 컨테이너 안에 실행파일이 동작한다
- 이미지 : 프로그램을 실행하는데 필요한 설정, 종속성 등 모든 것을 포함
- C group과 네임스페이스를 도커 환경에서 쓸 수 있는 이유
- 내부적으로는 아래와 같이 리눅스 VM이 설치되어 도커 클라이언트와 서버는 리눅스 환경에서 돌아간다
리눅스 커널 |
리눅스 VM |
맥 OS |
하드웨어 |
본 내용은 인프런 강의 ‘따라하면서 배우는 도커와 CI환경’ 을 듣고 정리한 내용입니다.
'Tech > Docker' 카테고리의 다른 글
Section 7. 간단한 어플을 실제로 배포해보기 (개발 환경 부분) (0) | 2022.01.02 |
---|---|
Section 6. Docker Compose (0) | 2022.01.02 |
Section 5. 도커를 이용한 간단한 Node.js 어플 만들기 (0) | 2022.01.02 |
Section 4. 직접 도커 이미지를 만들어 보기 (0) | 2022.01.02 |
Section 3. 기본적인 도커 클라이언트 명령어 알아보기 (0) | 2022.01.02 |