묶어서 실행
할 수 있음하나로 통일
하여 효율적으로 관리
할 수 있음공유
컨테이너는 가상화보다 훨씬 가벼운 기술
컴퓨터 안에서 컴퓨터를 만들어내기 위한 시도, 1960년 때에 가상화 개념이 처음 등장
가상 공간
을 만들지만 실행 파일을 호스트에서 직접 실행
cgroups
와 namespaces
가 제공하는 기술도커는 게스트 OS를 설치하지 않음
도커는 이미지 생성
과 배포
에 특화
이미지 버전 관리
또 제공하고 중앙 저장소
에 이미지를 올리고 받을 수 있음
(push/pull)
github 와 비슷한 형태로 도커 이미지를 공유하는 Docker Hub
제공
다양한 API
를 제공하여 원하는 만큼 자동화
가 가능하여 개발과 서버 운용에 매우 유용
도커는 하드웨어 가상화 계층이 없음
이미지는 서비스 운영에 필요한 서버 프로그램, 소스 코드, 컴파일된 실행 파일을 묶은 형태
저장소에 올리고 받는 건 이미지
(push/pull)
컨테이너는 이미지를 실행한 상태
이미지로 여러 개의 컨테이너를 만들 수 있음
운영체제로 치면 이미지는 실행파일
이고 컨테이너는 프로세스
유니온 파일 시스템 형식(aufs, btrfs, devicemapper)
도커는 베이스 이미지에서 바뀐 부분만 이미지로 생성
컨테이너로 실행할 때는 베이스 이미지와 바뀐 부분을 합쳐서 실행
docker hub 및 개인 저장소에서 이미지를 공유할 때 바뀐 부분만 주고 받음
가상화가 발전하면서 클라우드
환경으로 변화
가상 서버를 임대
하여 사용한 만큼만 요금 지불
Imuutable Infrastructure
라는 패러다임이 나옴
호스트 OS
와 서비스 운영 환경
(서버 프로그램, 소스 코드, 컴파일 된 바이너리)을 분리
한 번 설정한 운영 환경은 변경하지 않는다(Immutable)
는 개념
서비스 운영 환경을 이미지로 생성
한 뒤 서버에 배포하여 실행
서비스가 업데이트되면
운영 환경 자체를 변경하지 않고, 이미지를 새로 생성하여 배포
편리한 관리
이미지만 관리
하면 됨체계적인 배포와 관리
버전 관리 시스템 활용
확장
서버를 계속 찍어낼 수 있음
자동 확장(Auto Scaling)
기능과 연동하여 손쉽게 서비스 확장
테스트
동일한 환경이 구성됨
간편
가볍다
분리
하여 가볍고(Lightweight) 어디서든 실행 가능한(Portable) 환경
제공도커는 Immutable Infrastructure 를 구현한 프로젝트
고래는 서버에서 여러 개의 컨테이너(이미지)를 실행
하고 이미지 저장과 배포(운반)
을 의미
도커(Docker)는 부두 노동자
를 뜻함. 컨테이너를 다루는
도커의 기능과 비슷함
도커는 서비스 운영 환경을 묶어서 손쉽게 배포하고 실행하는 경량 컨테이너 기술
docker <명령>
형식
docker search <이미지 이름>
docker run <옵션> <이미지 이름> <실행할 파일>
sudo docker run -i -t --name hello ubuntu /bin/bash
/bin/bash
를 실행
docker ps
sudo docker ps -a
docker exec <컨테이너 이름> <명령> <매개 변수>
/bin/bash
로 실행된 상태sudo docker exec hello echo "Hello World"
정지된 상태에서는 사용할 수 없음
docker stop <컨테이너 이름>
이미지 설정 파일
먼저 example 디렉터리를 생성한 뒤 example 디렉터리로 이동하기
mkdir example cd example
FROM ubuntu:14.04 MAINTAINER Foo Bar <foo@bar.com> RUN apt-get update RUN apt-get install -y nginx RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf RUN chown -R www-data:www-data /var/lib/nginx VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"] WORKDIR /etc/nginx CMD ["nginx"] EXPOSE 80 EXPOSE 443
docker build <옵션> <Dockerfile 경로>
sudo docker build --tag hello:0.1
앞에서 생성한 이미지를 실행해보기
sudo docker run --name hello-nginx -d -p 80:80 -v /root/data:/data hello:0.1
-d
옵션은 컨테이너를 백그라운드로 실행-p 80:80
옵션으로 호스트의 80번 포트와 컨테이너의 80번 포트를 연결하고 외부에 노출만약 Boot2Docker 를 사용한다면, boot2Docker 는 가상 머신 안에 도커를 실행한 것이므로 호스트 IP 는 ngnix에 바로 접속할 수 없다.