openstack nova + docker (진행중)
# 설치환경
OS X Yosemite (ver. 10.10.5)
Intel core i5(2.7GHz)
8GB RAM
Ubuntu 14.04 (Virtual Box)
DevStack (Kilo)
# 설치진행
* docker는 기본적으로 Host OS위에 새로운 OS를 생성하지 않고 Host OS의 자원을 system call을 사용하여 사용하기 때문에(cgroups, namespace) root 권한이 필요
1. Virtual Machine 생성
- Ubuntu 14.04
- 2 cpus
- 2GB ram
- network
net 1 : NAT
net 2 : bridge network
2. 설치 후 기본설정
: 네트워크 ip, 패키지다운로드 및 파이썬 모듈을 사용하기 위한 패키지 설치 등등
$ apt-get update
$ sudo apt-get -y install git git-review python-pip python-dev
$ sudo apt-get -y upgrade
3. Docker 설치
> GPG Key 및 docker repo 추가
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
* 한번씩 서버가 죽는 거 같아 한번은 다른 서버찾아서 했는데.. 잘 모르겠음....
$ sudo vi /etc/apt/sources.list.d/docker.list
deb https://apt.dockerproject.org/repo ubuntu-trusty main ; on Ubuntu Trusty 14.04 (LTS)
$ sudo apt-get update
> docker 설치 사전 확인 조치
$ sudo apt-get purge lxc-docker
$ apt-cache policy docker-engine
> 추가 권장
대상 : Ubuntu 14.04 Trusty (LTS), 15.04 Vivid, 15.10 Wily
내용 : "linux-image-extra" kernel package 설치
이유 : "aufs" storage driver 지원
*aufs 참고 url : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/12/docker/aufs
$ sudo apt-get install linux-image-extra-$(uname -r)
> docker 설치 진행
$ sudo apt-get install docker-engine
> 확인
$ sudo service docker start
$ sudo docker run hello-world
$ sudo service docker restart
> 옵션 사항
$ sudo usermod -aG docker user
* docker daemon은 TCP port 대신에 UNIX socket에 바인드 함
UNIX Socket은 sudo 권한을 가져야 하기때문에 docker daemon은 항상 root 권한으로 실행되어야 함
> docker 커맨드에서 sudo를 사용하지 않기 위해서 "docker"라는 Unix Group과 user를 등록.
docker daemon이 실행될 때, docker group에 Unix의 R/W 가능한 권한을 부여함
$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="cgroup_enale=memory swapaccount=1"
* WARNING: Your kernel does not support cgroup swap limit. WARNING: Your
kernel does not support swap limit capabilities. Limitation discarded.
이런 메시지가 나온 경우, 메모리 스왑부분 설정
$ sudo update-grub
$ sudo reboot now
> docker 설치 확인
$ docker --version
4. OpenStack(Devstack, nova-docker plusgin) 설치
> nova-docker plugin 설치 진행
$ git clone -b stable/kilo https://github.com/stackforge/nova-docker.git
$ cd nova-docker
/nova-docker$ sudo pip install .
> nova-docker plugin 설치 확인
$ sudo pip list | grep nova-docker
> OpenStack Devstack 설치
$ git clone -b stable/kilo https://github.com/openstack-dev/devstack.git
$ cd devstack
/devstack$ vi local.conf
* local.conf는 여기서 복사해서 사용했음.
https://github.com/smakam/openstack/blob/master/docker/local.conf_novadocker
* novnc 기능의 사용을 위해 "enable_service n-novnc"를 추가
* public network gateway 지정하기
/devstack$ ./stack.sh
> 설치완료
> nova rootwrap filter 설정
$ sudo cp nova-docker/etc/nova/rootwrap.d/docker.filters /etc/nova/rootwrap.d/
* openstack rootwrap : https://wiki.openstack.org/wiki/Rootwrap
5. nova with docker
> Openstack 사용권한
$ cd devstack
/devstack $ . openrc admin
* demo는 . openrc demo
=> . openrc admin를 수했했는데, glance 이미지랑 인스턴스가 demo tenant로 생성되길래 환경변수 뿌려보니..
tenant name이 demo 였음
OS_TENANT_NAME="demo"
OS_USERNAME="admin"
> docker 이미지 생성
$ docker pull nginx ; 받아오기
* 검색 : docker search ubuntu
$ docker images ; 확인
$ docker save nginx | glance image-create --is-public=True --container-format=docker --disk-format=raw --name nginx ; glance image로 등록
$ glance image-list ; 확인
$ nova boot --flavor m1.small --image nginx nginxtest ; 인스턴스 생성
$ docker ps ; docker 동작 process 확인
$ nova list ; instacne 확인
6. dashboard
# Ubuntu 컨테이너 기반의 인스턴스 생성
> search 명령어 사용
> ubuntu 이미지 pulling
* 버전 명시는 저런식으로 가능
> docker 이미지 저장 후 glance 이미지로 등록
> Dashboard 확인
> 인스턴스 생성
vnc 접속이 안되서 해당 옵션 주고 다시 시도...
devstack은 서비스가 아닌 screen기반이라고 함(정확히 뭔지는 모르겠지만)
nova.conf를 수정한 후 screen update를 수행해 적용할 수 있음
네트워크 설정해야함