• 리눅스 컨테이너에 여러기능을 추가
• 애플리케이션을 컨테이너로 좀더 쉽게 사용할 수 있게 만든 오픈소스 프로젝트
• 2013년 3월 dotCloud 창업자 Solomon Hykes 가 Pycon Conference 에서 발표
• Go 언어로 작성 된 "The future of linux Containers"
• 가상 머신과 달리 성능손실이 거의 없는 차세대 클라우드 솔루션으로 주목
로컬머신 : IDC
가상머신 : vmware, utm
컨테이너 : aws

가상머신
• 한이퍼바이저를 통한 상화로 성능 손실이 발생
• 완벽한 독립적 공간을 생성 하나, 이미지 용량이 크고 가상머신 배포에 부담
도커 컨테이너
• 리눅스 Chroot, 네임스페이스, Cgroup 를 사용한 프로세스 단위 격리 환경 구성
• 애플리케이션 구동을 위한 라이브러리만 포함한 이미지생성, 용량이 작음

• 하이퍼바이저와 게스트 OS가 없기 때문에 경량화 되었다.
• 경량이기 때문에, 이미지 복제, 이관, 배포가 쉽고 효율적이다
• 게스트 OS를 부팅하지 않기 때문에 container 수행 시간이 빠르다
• 한정된 하드웨어 자원안에서 vm보다 더 많은 container를 실행할 수
있어서 효율적이다.
• 가상머신 생성시 사용하는 ISO 와 비슷한 개념의 이미지
• 여러 개의 층으로 된 바이너리 파일로 존재
• 컨테이너 생성시 읽기 전용으로 사용됨
• 도커 명령어로 레지스트리로 부터 다운로드 가능
luckyprice/ubuntu: 14.04
• 저장소 이름 : 이미지가 저장된 장소, 이름이 없으면 도커 허브(Docker Hub)로 인식
• 이미지 이름 : 이미지의 역할을 나타낼 이름, 생략 불가능
• 이미지 버전 : 이미지 버전정보, 생략하면 latest 로 인식

• 도커 이미지로 부터 생성됨
• 격리된 파일시스템, 시스템 자원, 네트워크를 사용할 수 있는 독립공간 생성
• 도커 이미지 목적에 맞게 컨테이너를 생성하는 것이 일반적 - 예) 웹 서버 도커 이미지로 부터 여러개의 컨테이너 생성 = 개수만큼의 웹서버
• 이미지를 읽기 전용으로 사용, 이미지 변경 데이터는 컨테이너 계층에 저장
• 컨테이너의 애플리케이션 설치/삭제는 다른 컨테이너에 영향이 없음 - 예) 우분투 이미지로 별도의 컨테이너 생성 후 Apache Mysal 설치/삭제 가능

• run: 컨테이너 실행
• -i : 컨테이너와 상호 입출력 가능 옵션
• -t : 셀을 사용할 수 있는 tty 활성화

• exit 또는 Ctl+D : 컨테이너 빠져나오면서, 컨테이너 정지
• CtltP,Q : 컨테이너 정지 하지 않고 빠져 나오기



0 ps: 현재 실행중인 목록 출력
o ps-a : 모든 컨테이너 목록 출력



실수로 port를 안 열고 container 를 실행 시켰다면!
1) 기존의 container를 stop시키고, 다시 -p 옵션으로 run한다.
2) 이미 container 내부에서 추가 작업이 많았다면, 해당 container를
image
화 한다. (docker commit) 그리고, 다시 -p 옵션으로 run한다.




• 컨테이너로 이미지 생성 방법
1. 기본 OS 이미지로 컨테이너 생성
2. 애플리케이션 설치 및 환경설정, 소스코드 복제
3. 컨테이너 이미지 커밋(Commit)

✓ 애플리케이션 설치, 환경구성 변경 등을 직접 수작업
✓ 애플리케이션 구동 이미지로 커밋하기 때문에 이미지 동작을 보장
• Dockerfile로 이미지 생성 방법
1. 매뉴얼 작업을 기록한 Dockerfile 생성
2. 빌드 명령어가 Dockerfile 을 읽어 이미지를 생성

✓ 이미지를 직접 생성 또는 커밋 하지 않아도 됨
✓ 애플리케이션 빌드를 자동화
✓ 도커 허브의 신뢰할 수 있는 이미지를 바탕으로 쉽게 이미지 배포 가능
✓ Text 파일을 배포하므로, 경량화