Docker 간단 가이드
-
Upload
- -
Category
Technology
-
view
8.723 -
download
2
description
Transcript of Docker 간단 가이드
Docker 간단 가이드
with Django
docker
Docker?pack, ship and run any application as a lightweight container (http://docker.io)
애플리케이션 구동을 위한 일종의 (격리된) 가상 환경을 만들 수 있는 도구
docker
Requirementsif osx: open http://downloads.vagrantup.com/
Vagrant : 가상 환경(with VirtualBox / Parallels / VMware Fusion ...)
- 왜 Vagrant? docker가 리눅스에'만' 존재하는 lxc라는 기능을 사용하기 때문에...
docker
Docker 설치• 우분투 (≥13.04 64bit)
o http://docs.docker.io/en/latest/installation/ubuntulinux/#ubuntu-raring
• 우분투 (≤12.04 64bit)o http://docs.docker.io/en/latest/installation/ubuntulinux/
#ubuntu-precise
• 맥 리눅스 (with Vagrant)local:~$ git clone https://github.com/dotcloud/docker.gitlocal:~$ cd dockerlocal:~/docker$ vagrant up
docker
Docker 사용 (with 노가다) 1/3
local:~/docker$ vagrant uplocal:~/docker$ vagrant ssh
docker
Docker 사용 (with 노가다) 1/3
local:~/docker$ vagrant uplocal:~/docker$ vagrant ssh
로컬
Vagrant
docker
vagrant:~$ docker pull ubuntuvagrant:~$ docker run -i -t ubuntu /bin/bashroot:~$
Docker 사용 (with 노가다) 2/3
docker
vagrant:~$ docker pull ubuntuvagrant:~$ docker run -i -t ubuntu /bin/bashroot:~$
Docker 사용 (with 노가다) 2/3
Precise64 base Ubuntu + docker
거의 아무 것도 없음.
docker
vagrant:~$ docker pull ubuntuvagrant:~$ docker run -i -t ubuntu /bin/bashroot:~$
Docker 사용 (with 노가다) 2/3
Precise64 base Ubuntu + docker
거의 아무 것도 없음.
로컬
Vagrant
Docker
docker
Docker 사용 (with 노가다) 2/3
vagrant:~$ docker pull ubuntuvagrant:~$ docker run -i -t ubuntu /bin/bashroot@imageid:/# apt-get updateroot@imageid:/# apt-get install … (git, pip 등)root@imageid:/# git clone git://proj....root@imageid:/proj# pip install -r requirements.txtroot@imageid:/proj# python manage.py syncdbroot@imageid:/proj# python manage.py collectstatic
docker
Docker 사용 (with 노가다) 3/3
root@imageid:/proj# exitvagrant:~$ docker commit imageid namevagrant:~$ docker run -i -t -d -p 8080:8080 name \uwsgi --ini=/production/uwsgi.ini
로컬
가상 환경
Vagrant
웹 서버
Docker
docker
끝?
docker
끝?
이미지 만드는 데 대략 (익숙해지면) 30분…이 이미지를 ec2에서도 돌리고 싶다면?
docker
끝?
이미지 만드는 데 대략 (익숙해지면) 30분…이 이미지를 ec2에서도 돌리고 싶다면?
ec2에 접속하여 앞의 과정을 반복하세요…docker 왜 써?!
docker
Dockerfile 설정 1/3
<파일: notice/Dockerfile>FROM kencochrane/django-docker
RUN apt-get updateRUN apt-get install -y libmysqlclient-dev libldap2-dev libsasl2-dev libssl-devRUN pip install uwsgi
ADD ./requirements.txt /home/
WORKDIR /home/
RUN pip install -r requirements.txt
ADD . /home
EXPOSE 8080
CMD ["uwsgi", "--ini", "/home/production/uwsgi.ini"]
vagrant:~$ docker build -t=name .
docker
Dockerfile 설정 2/3
FROM kencochrane/django-docker
: 미리 만들어 둔 기본 이미지를 재활용할 수 있다.
RUN apt-get update: build 과정에서 해당 명령을 실행함. 보통 의존성 패키지 설치.
ADD . /home: docker 외부의 . 디렉터리를 » docker 내부의 /home으로 복사
docker
Dockerfile 설정 2/3
FROM kencochrane/django-docker
: 미리 만들어 둔 기본 이미지를 재활용할 수 있다.
RUN apt-get update: build 과정에서 해당 명령을 실행함. 보통 의존성 패키지 설치.
ADD . /home: docker 외부의 . 디렉터리를 » docker 내부의 /home으로 복사
Ubuntu
docker
Dockerfile 설정 2/3
FROM kencochrane/django-docker
: 미리 만들어 둔 기본 이미지를 재활용할 수 있다.
RUN apt-get update: build 과정에서 해당 명령을 실행함. 보통 의존성 패키지 설치.
ADD . /home: docker 외부의 . 디렉터리를 » docker 내부의 /home으로 복사
Ubuntu
Python 2.7
docker
Dockerfile 설정 2/3
FROM kencochrane/django-docker
: 미리 만들어 둔 기본 이미지를 재활용할 수 있다.
RUN apt-get update: build 과정에서 해당 명령을 실행함. 보통 의존성 패키지 설치.
ADD . /home: docker 외부의 . 디렉터리를 » docker 내부의 /home으로 복사
Ubuntu
Python 2.7
Django 1.6
docker
Dockerfile 설정 2/3
FROM kencochrane/django-docker
: 미리 만들어 둔 기본 이미지를 재활용할 수 있다.
RUN apt-get update: build 과정에서 해당 명령을 실행함. 보통 의존성 패키지 설치.
ADD . /home: docker 외부의 . 디렉터리를 » docker 내부의 /home으로 복사
Ubuntu
Python 2.7
Django 1.6
app 1
docker
Dockerfile 설정 2/3
FROM kencochrane/django-docker
: 미리 만들어 둔 기본 이미지를 재활용할 수 있다.
RUN apt-get update: build 과정에서 해당 명령을 실행함. 보통 의존성 패키지 설치.
ADD . /home: docker 외부의 . 디렉터리를 » docker 내부의 /home으로 복사
Ubuntu
Python 2.7
Django 1.6
app 1app 2
docker
Dockerfile 설정 2/3
FROM kencochrane/django-docker
: 미리 만들어 둔 기본 이미지를 재활용할 수 있다.
RUN apt-get update: build 과정에서 해당 명령을 실행함. 보통 의존성 패키지 설치.
ADD . /home: docker 외부의 . 디렉터리를 » docker 내부의 /home으로 복사
Ubuntu
Python 2.7
Django 1.6
app 1app 2
flask 0.10
app 3
docker
재활용할 수 있는 이미지들• https://index.docker.io에서 검색• mbkan/lamp
o CentOSo apache, mysql, php, phpmyadmin
• kencochrane/django-dockero ubuntu 12.10o django 구동에 필요한 기본 사항을 설치해 둔 이미지
• ruby, perl 등 다양한 환경이 존재함o 나만의 이미지를 만들 수도 있음
docker
Dockerfile 설정 2/3
FROM kencochrane/django-docker: 미리 만들어 둔 기본 이미지를 재활용할 수 있다.
RUN apt-get update: build 과정에서 해당 명령을 실행함. 보통 의존성 패키지 설치.
ADD . /home: docker 외부의 . 디렉터리를 » docker 내부의 /home으로 복사
docker
Dockerfile 설정 3/3
WORKDIR /home: 이후의 명령어가 실행될 디렉터리 지정
EXPOSE 8080: 내부의 8080 포트를 열어 둠
CMD ["uwsgi", "--ini", "/home/production/uwsgi.ini"]: docker run imageid 했을 때, 이 명령이 실행됨. Dockerfile 내에서 하나만!)(ENTRYPOINT도 비슷하나 run 명령 뒤의 인자를 받음. 역시 하나만 가능)
docker
노가다 Docker와 Dockerfile 비교
노가다 Docker Dockerfile
10+a개 10개
30분(익숙해지면)
10분
실수 가능 실수 줄어듦
docker
노가다 Docker와 Dockerfile 비교
EC2
Docker
EC2
Docker
- docker 이미지 생성- docker 이미지 접속- 의존성(apt-get) 설치- 최신 소스코드 받기- 의존성(pip) 설치- docker run
- docker build- docker run
docker
docker-registry근데 로컬에서 만든 이미지를 ec2에 어떻게 넣죠?ec2에서 직접 build하세요… oTL
• docker-registryo vagrant:~$ docker push raccoony/nameo ec2:~$ docker pull raccoony/nameo ec2:~$ docker run -i -t -d -p 8080:8080 …
https://index.docker.io에 가입한 ID
이미지 이름 (맘대로)
docker
현재까지 정리
노가다 Docker Dockerfile docker-registry
10+a개 10개 7개
30분(익숙해지면)
10분 4분
실수 가능 실수 줄어듦 실수 불가능(오타만 조심)
docker
Dockerfile과 docker-registry 비교
EC2
Docker
EC2
Docker
로컬에서 개발 후- docker build- docker run
잘 되면
- ec2 접속
- docker build- docker run
로컬에서 개발 후- docker build- docker run
잘 되면
- docker push- ec2 접속
- docker pull- docker run
로컬Vagrant
로컬Vagrant
중복(=나쁘다)
중복 삭제(=좋다)
docker
서비스 배포 과정 요약local:~$ vagrant uplocal:~$ vagrant sshvagrant:~$ git pullvagrant:~$ docker build -t=name .vagrant:~$ docker push raccoony/nameec2:~$ docker pull raccoony/nameec2:~$ docker run -i -t -d -p 8080:8080 name
docker
현재까지 느낀 장단점• 장점
o Dockerfile만 잘 만들어 두면, 서비스 올리고 내리는 일이 쉽다o 서비스 올리려고 서버를 배울 필요가 없다(대신 docker 명령을 배워...)
• 단점o docker 내부에 쌓이는 로그를 보기가 힘들다(중요 로그는 시스템 외부로)o 초기 개념 잡기가 조금 힘들다(여기서 설명하지 않은 image와 container의 관계)
o build 명령에 시간이 좀 걸리는데… -> dokku, deis 등으로 해결
docker
dokku
• dokkuo docker 전용 git 저장소 + 자동 빌드o local:~$ git remote add dokku.raccoony.kr/proj dokkuo local:~$ git push dokku mastero 알아서 빌드되고, 이미지 저장소에 등록되고, 새 이미지가 실행됨
실제 설정도 다 했는데…- 몇몇 패키지 설치 실패- buildpack이라는 일종의 리눅스 이미지에서 빌드- 기존 buildpack으로 안 되니, 나만의 buildpack을 만들까?- buildpack을 만드는 스크립트 = buildstep… 아... 지쳤다…- (주의) 단일 서버만 지원
docker
deis.io
• 멀티 서버 지원되는 dokku 같은 녀석o 그러나 사용해보지 않았음(지쳐서).
docker
dokku 도입 후의 모습
EC2
Docker
EC2
Docker
로컬에서 개발 후- docker build- docker run
잘 되면
- docker push- ec2 접속
- docker pull- docker run
로컬에서 개발 후잘 되면
- git push
알아서 업데이트
로컬Vagrant
로컬Vagrant
docker
dokku 도입 후 비교
노가다 Docker
Dockerfile docker-registry
deis
10+a개 10개 7개 1개(push)
30분(익숙해지면)
10분 4분 1분
실수 가능 실수 불가능(거의)
실수 불가능(오타만 조심)
자동화 천국!
docker
Docker 명령 간략 정리 1/3
• docker run -i -t -d -p 0:0 id 명령어o -i :Keep stdin open even if not attachedo -t :Allocate a pseudo-tty
o -d :데몬 형태로 실행o -p : 포트 포워딩 (외부 포트 -> 내부 포트)
o id : 이미지 id나 이름o 명령어 : Dockerfile에 있는 CMD 대신 실행하고 싶은 명령어
(혹은 ENTRYPOINT에 지정하려는 인자)
docker
Docker 명령 간략 정리 2/3
• docker build -t=name .o name : 저장하려는 이미지에 붙일 이름o . : 빌드하려는 대상 디렉터리
• docker commit ab12cd34 nameo ab12cd34 : 이미지의 고유 id
o name : 지정하고 싶은 이름
docker
Docker 명령 간략 정리 3/3
• docker imageso 이미지 목록을 보여줌
• docker pso 현재 실행 중인 이미지 목록을 보여줌(ps와 비슷)
• docker kill id (or name)o 실행 중인 이미지
• docker rmi id (or name)o 해당 이미지를 삭제
docker
더 읽을거리• docker.io의 개발자 kencocrane의 Docker Guide
Booko http://kencochrane.net/blog/2013/08/the-docker-guidebook/
• docker 공식 문서o http://docs.docker.io/en/latest/
• docker book (집필 중)o http://dockerbook.com/
Docker로서비스 배포를 편리하게!