6-1. Docker 기본 이해
docker는 리눅스 컨테이너에서 시작한 기술. 따라서 리눅스 컨테이너에 대해 알면 도움이 됨.
LXC (Linux Containers)
- 리눅스 운영체제 상에서 다른 영역과 자원 할당(CPU, 메모리, 네트워크 등)을 분리하여 별도의 리눅스 시스템을 운영할 수 있는 커널 기술.
- 초기 docker는 리눅스 커널에 LXC를 사용해서,
- 리눅스 컨테이너(분리된 공간 - 맥 파티션 나누는 것처럼 다른 컴퓨터처럼 사용할 수가 있게 된다)를 만들고,
- 리눅스 컨테이너 상에 별도로 구성된 파일 시스템에 시스템 설정 및 응용 프로그램을 실행할 수 있도록 하는 방식으로 작동했다고 함. (최근에는 docker에서 별도 컨테이너 기술을 구현한다고 함)
Docker 주요 구성 요소
docker engine과 docker commands(명령어)
- docker는 서버/클라이언트 구조로 이루어짐
- 서버는 docker daemon process(데몬 프로세스) 형태로 동작
- daemon이란 계속 백그라운드 프로세스로 작동하는 프로그램을 의미함.
- docker는 REST API를 사용하여 docker daemon process에 통신/요청을 함.
- docker command(명령어)는 일종의 클라이언트 역할을 한다고 볼 수 있다.
- 예를들어
docker ps 를 입력하면, 내부적으로는 마치 다음 http 요청을 daemon에게 보내는 것과 같이 동작한다고 한다.
http GET ‘docker daemon process’/api-version/containers
docker image
- docker 컨테이너를 생성하기 위한 명령들을 가지고 있는 일종의 템플릿. 스크립트의 집합이라고 볼 수 있다.
- 여러 이미지들을 layer로 쌓아서 만들 수가 있다.
- e.g. ubuntu이미지에 apache 웹서버 이미지를 얹어서 원하는 웹서버 환경을 만든다던가
docker container
Containers are an abstraction at the app layer that packages code and dependencies together - https://www.docker.com/resources/what-container/

Containers vs. Virtual Machines
- docker image가 리눅스 컨테이너 형태로 실행한 상태(instance)를 의미한다.
- docker daemon에 있는 커널에서 LXC로 리눅스 컨테이너를 생성한 후, 해당 컨테이너에 docker image에 포함된 명령들을 실행하여 docker container를 만들고 실행하게 된다.
- docker container는 분리된 공간이므로, docker daemon process를 통해 접속할 수도 있고, 내부에 들어가서 코드 실행/수정 등도 가능하다.
6-2. Docker Image관련 주요 명령 익히기
도커 사용 방식
- 결국 큰 그림으로 봤을때, 다음과 같은 단계를 거쳐 도커를 사용하게 된다.
도커 설치
- docker image 생성/다운로드
- image를 바탕으로 container 실행