사이드킥 모델(Sidekick model)

Work & Study/TechTalk 2015/03/31 15:21 posted by k16wire

CoreOS에서 fleet으로 Docker 컨테이너를 실행하면 클러스터에 들어있는 호스트 리소스를 스케쥴링하여 최적 호스트에 컨테이너를 실행해줍니다. 그런데 이렇게 실행된 서비스에 대한 접근 정보(IP와 포트)를 알수 없다는 이슈가 생깁니다. 


이를 위한 대표적인 해결책이 사이드킥 모델(Sidekick model) 입니다. 이 모델은 서비스가 실행되면 자동으로 동반 실행되는 서비스를 하나 더 등록합니다. 이 동반 서비스는 해당 서비스가 실행되고 나면 서비스의 IP와 포트 정보를 etcd에 저장합니다. 서비스가 종료되면 etcd에서 해당 서비스의 키를 삭제합니다.


다음은 nginx 서비스를 fleet으로 실행했을때 ip와 port 정보를 구하는 사이드킥 서비스 예입니다.

[Unit]
Description=Announce nginx1.service
# Binds this unit and nginx1 together. When nginx1 is stopped, this unit will be stopped too.
BindsTo=nginx1.service

[Service]
ExecStart=/bin/sh -c "while true; do etcdctl set /services/website/nginx1 '{ \"host\": \"%H\", \"port\": 8080,
 \"version\": \"52c7248a14\" }' --ttl 60;sleep 45;done" ExecStop=/usr/bin/etcdctl delete /services/website/nginx1 [X-Fleet] # This unit will always be colocated with nginx1.service MachineOf=nginx1.service


참고자료



저작자 표시 비영리 변경 금지

'Work & Study > TechTalk' 카테고리의 다른 글

사이드킥 모델(Sidekick model)  (0) 2015/03/31
VirtualBox 네트워크 이해  (0) 2015/03/29
Docker 리모트 API로 포트 바인딩  (0) 2015/03/17
Docke 발표자료  (0) 2015/03/14
Panamax 설치  (0) 2015/03/03
도커 이미지 크기를 줄이는 방법  (0) 2015/02/12

VirtualBox 네트워크 이해

Work & Study/TechTalk 2015/03/29 03:22 posted by k16wire

네트워크 구성을 테스트하다보니 버추얼박스를 많이 사용합니다. 버추얼박스 네트워크에 대한 이해가 필요해서 검색하다 찾았습니다.


출처: http://solatech.tistory.com/277

버추얼박스 네트워크 이해 및 완벽 가이드.pdf




저작자 표시 비영리 변경 금지

'Work & Study > TechTalk' 카테고리의 다른 글

사이드킥 모델(Sidekick model)  (0) 2015/03/31
VirtualBox 네트워크 이해  (0) 2015/03/29
Docker 리모트 API로 포트 바인딩  (0) 2015/03/17
Docke 발표자료  (0) 2015/03/14
Panamax 설치  (0) 2015/03/03
도커 이미지 크기를 줄이는 방법  (0) 2015/02/12

도커는 리모트 API가 잘되어 있습니다. 이를 이용하면 원격에서 도커 호스트를 관리할수 있는데요. 컨테이너를 만들때 포트를 호스트 포트와 바인딩하는게 좀 헷갈려서 정리해봤습니다.


3306포트를 기본으로 하는 MySQL을 컨테이너로 실행한다고 했을때

컨테이너에서 실행되는 MySQL의 3306포트를 호스트의 49153 포트로 바인딩해보겠습니다.


컨테이너를 생성할때 ExposedPorts에 아래와 같이 오픈할 포트를 명시합니다.

POST /containers/create
{
"Image": mysql,
"ExposedPorts": {
"3306/tcp": {}
}
}

컨테이너가 생성되었다면 이제 컨테이너를 실행할 차례입니다.

만들어진 컨테이어 ID와 바인딩 시킬 호스트의 포트를 아래처럼 PortBindings 키값으로 명시해줍니다.

POST /containers/(id)/start
{
"id": id,
"PortBindings": {
"container_port/tcp": [
{
"HostIp": "127.0.0.1", // Strings, not numbers here
"HostPort": "49153"
}
]
}
}

그러면 아래처럼 3306포트와 49153 포트가 바인딩된 컨테이너가 만들어집니다.
043d2366695c mysql:latest "/entrypoint.sh mysq 12 seconds ago

Up 11 seconds 0.0.0.0:49153->3306/tcp mysql_myhome

간단하지만 Docker Remote API 스펙에 자세하게 나오지 않은 부분이라 정리해봤습니다.


참고자료

https://medium.com/@kevanahlquist/docker-remote-api-port-bindings-example-b55bc5194e20

https://docs.docker.com/reference/api/docker_remote_api/



저작자 표시 비영리 변경 금지

'Work & Study > TechTalk' 카테고리의 다른 글

사이드킥 모델(Sidekick model)  (0) 2015/03/31
VirtualBox 네트워크 이해  (0) 2015/03/29
Docker 리모트 API로 포트 바인딩  (0) 2015/03/17
Docke 발표자료  (0) 2015/03/14
Panamax 설치  (0) 2015/03/03
도커 이미지 크기를 줄이는 방법  (0) 2015/02/12

Docke 발표자료

Work & Study/TechTalk 2015/03/14 09:04 posted by k16wire

지난 IBM 후원 개발자 세미나에서 발표했던 Docker 설명 자료입니다.




저작자 표시 비영리 변경 금지

'Work & Study > TechTalk' 카테고리의 다른 글

VirtualBox 네트워크 이해  (0) 2015/03/29
Docker 리모트 API로 포트 바인딩  (0) 2015/03/17
Docke 발표자료  (0) 2015/03/14
Panamax 설치  (0) 2015/03/03
도커 이미지 크기를 줄이는 방법  (0) 2015/02/12
Docker로 만드는 냐옹냐옹  (0) 2015/02/06

사랑가

Life & Culture/일상다반사 2015/03/04 09:18 posted by k16wire

이런 멋진 콜라보가 있다니 놀랍네요.


https://www.youtube.com/watch?v=yXSkm9xowLc




저작자 표시 비영리 변경 금지

'Life & Culture > 일상다반사' 카테고리의 다른 글

사랑가  (0) 2015/03/04
Beyond the Universe  (2) 2015/01/31
기름 유출 피해를 경고하는 광고  (0) 2014/08/11
운전중 휴대폰 사용을 경고하는 광고  (0) 2014/06/15
아이유 50cm  (0) 2014/06/07
친일인명사전 앱을 선물합니다.  (7) 2014/06/02

Panamax 설치

Work & Study/TechTalk 2015/03/03 17:20 posted by k16wire

Docker 컨테이너 관리도구 Panamax 를 설치합니다. Panamax는 크게 두개 모듈로 이루어져있습니다. Panamax-API, Panamax-UI


CoreOS를 Vagrant로 설치

git clone https://github.com/coreos/coreos-vagrant.git

cd coreos-vagrant

vagrant up


Panamax API 소스 복사

panamax-api 컨테이너에서 사용할 소스코드를 CoreOS에 받아 놓는다. 나중에 이 파일을 도커 컨테이너와 공유한다.

git clone https://github.com/CenturyLinkLabs/panamax-api.git


Vagrantfile 수정

다운로드한 panamax-api 소스를 CoreOS에 바인딩

config.vm.synced_folder "/Users/k16wire/workspace/panamax-api", "/home/core/panamax-api", id: "core", :nfs => true, :mount_options => ['nolock,vers=3,udp']


panamax-api 포트 포워딩 설정

config.vm.network :forwarded_port, guest:8888, host:8888

config.vm.network :forwarded_port, guest:8889, host:8889


CoreOS 실행

vagrant up 


etcd, fleet, journal-gatewayd 서비스 실행

CoreOS로 들어간다.

vagrant ssh


3개 서비스를 실행한다.

core@core-01 ~ $ sudo systemctl start etcd

core@core-01 ~ $ sudo systemctl start fleet

core@core-01 ~ $ sudo systemctl start systemd-journal-gatewayd.socket


Panamax-api 실행

panamax-api 컨테이너를 실행하기 위한 도커 이미지를 가져온다. (도커는 CoreOS에 이미 설치되어 있다.)

docker pull centurylink/panamax-ruby-base


docker0 이더넷 아답터에 할당된 ip 확인

core@core-01 ~ $ ifconfig


panamax-api 컨테이너 실행

docker run -it \

--name panamax_api \

-v /home/core/panamax-api:/var/app/panamax-api \

-v /run/docker.sock:/run/docker.sock \

-p 8888:3000 \

-e "FLEETCTL_ENDPOINT=http://10.1.42.1:4001" \

-e "JOURNAL_ENDPOINT=http://10.1.42.1:19531" \

centurylink/panamax-ruby-base /bin/bash


여기부터는 도커 컨테이너 내부에서 실행한다.


panamax-api 소스 위치로 이동

cd /var/app/panamax-api


panamax-api 가 필요한 루비 라이브러리를 Bundler(http://bundler.io/)를 이용해 설치

bundle


SQLite 데이터베이스 설정

rake db:create db:migrate db:seed

rake panamax:templates:load


레일즈 서버 실행

rails server


테스트

CoreOS 내부에서 먼저 curl로 API 서버가 제대로 동작하는지 테스트 해본다. 성공하면 호스트 에서도 다시 해본다.

curl http://localhost:8888/local_images.json


Panamax-UI 소스 코드 받기

git clone git@github.com:CenturyLinkLabs/panamax-ui.git


Panamax-UI 도커 컨테이너 실행

docker run -it \

--name panamax_ui \

--link panamax_api:panamaxapi \

-v /home/core/panamax-ui:/var/app/panamax-ui \

-p 8889:3000 \

centurylink/panamax-ruby-base /bin/bash


Panamax UI 컨테이너에서  API 서버 IP를 확인합니다.

cat /etc/hosts


환경변수 추가

export PMX_API_PORT_3000_TCP_ADDR=10.1.0.5

export PMX_API_PORT_3000_TCP_PORT=3000


Panamax UI 설치위치로 이동후 라이브러 설치후 서버 실행

cd /var/app/panamax-ui

bundle

rails server



Vagrantfile



참고자료

[1] https://coreos.com/docs/running-coreos/platforms/vagrant/

[2] https://github.com/CenturyLinkLabs/panamax-ui

[3] https://github.com/CenturyLinkLabs/panamax-api



저작자 표시 비영리 변경 금지

'Work & Study > TechTalk' 카테고리의 다른 글

Docker 리모트 API로 포트 바인딩  (0) 2015/03/17
Docke 발표자료  (0) 2015/03/14
Panamax 설치  (0) 2015/03/03
도커 이미지 크기를 줄이는 방법  (0) 2015/02/12
Docker로 만드는 냐옹냐옹  (0) 2015/02/06
왜 데이터 볼륨 컨테이너가 필요할까  (0) 2015/01/29

무제

Life & Culture/생각지도 2015/02/26 11:09 posted by k16wire

자기 생각에 확신을 가지고 이야기하는 사람이 많아질수록

세상은 바뀐다고 믿는다.


저작자 표시 비영리 변경 금지

'Life & Culture > 생각지도' 카테고리의 다른 글

무제  (0) 2015/02/26
가장 어려운 문제와 가장 쉬운문제  (0) 2015/02/03
DevOps 엔지니어의 행복한 하루  (0) 2015/01/21
유리감옥  (0) 2014/12/31
읽는 힘과 듣는 힘  (0) 2014/12/24
아이작 아시모프의 1959년 창조적 사고에 대한 에세이  (0) 2014/11/04

도커가 가벼운 가상화 기술이라고 흔히 말합니다만 도커 이미지 크기도 관리하지 않으면 야금야금 늘어나는걸 흔히 볼수 있습니다. 관련 내용이 몇가지 있어서 같이 정리해봤습니다.


가벼운 베이스 이미지를 사용한다.

이미지를 만들때 가능한 크기가 작은 베이스 이미지를 사용합니다.

$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
scratch latest 511136ea3c5a 13 months ago 0 B
busybox latest a9eb17255234 7 weeks ago 2.433 MB
debian latest e8d37d9e3476 4 days ago 85.18 MB
ubuntu latest ba5877dc9bec 4 days ago 192.7 MB
centos latest 1a7dc42f78ba 2 weeks ago 236.4 MB
fedora latest 88b42ffd1f7c 10 days ago 373.7 MB


이 외에도 tinycore 리눅스는 19M 정도 작은 용량이어서 가능하다면 좋은 대안이 될수 있을거 같습니다.


Dockerfile 명령을 체인으로 사용한다.

Dockerfile에서 RUN 명령을 개별로 실행하게 되면 실행이 끝날때 마다 중간 이미지가 만들어집니다. 하지만 체인으로 명령을 실행하면 한개만 만들어지기 때문에 크기가 줄어듭니다.


개별적으로 실행하는 경우

RUN wget -nv
RUN tar -xvf someutility-v1.0.0.tar.gz
RUN mv /tmp/someutility-v1.0.0/someutil /usr/bin/someutil


체인으로 실행하는 경우

RUN wget -nv &&
tar -xvf someutility-v1.0.0.tar.gz &&
mv /tmp/someutility-v1.0.0/someutil /usr/bin/someutil


중간 이미지를 하나로 합친다.

도커 이미지는 여러개의 중간 이미지의 합으로 최종 이미지가 만들어집니다. 이 중간 이미지들은 Dockerfile로 이미지를 만들때는 유용하지만 이미 만들어진 이미지를 사용할때는 별로 필요없습니다. 그럼 이런 이미지를 하나로 합치면 이미지 크기가 줄어듭니다. 이미지를 sample 이라는 이름의 컨테이너로 실행했다면

docker export sample | docker import - sample:flat


빌드 도구를 설치하지 않는다.

꼭 필요한 경우가 아니라면 소스를 빌드해서 이미지에 넣으면 불필요한 빌드 도구가 차지하는 공간을 줄일수 있습니다.


패키지 관리자를 정리한다.

apt-get 을 실행했다면 마지막에 apt-get clean을 적어줍니다. /var/cache/apt/archives 디렉토리에 있는 다운로드 파일을 지워줍니다. 패키지 리스트 파일도 지우는것도 권장합니다.[2] apt-get은 /var/lib/apt/lists 디렉토리를 지우면 됩니다.



참고자료

[1] http://www.centurylinklabs.com/optimizing-docker-images/

[2] https://dayone.me/1740z5r

[3] http://blog.docker.com/2013/06/create-light-weight-docker-containers-buildroot/

[4] http://buildroot.uclibc.org/

[5] http://jasonwilder.com/blog/2014/08/19/squashing-docker-images/

[6] https://kreuzwerker.de/en/blog/posts/busybox-python


저작자 표시 비영리 변경 금지

'Work & Study > TechTalk' 카테고리의 다른 글

Docke 발표자료  (0) 2015/03/14
Panamax 설치  (0) 2015/03/03
도커 이미지 크기를 줄이는 방법  (0) 2015/02/12
Docker로 만드는 냐옹냐옹  (0) 2015/02/06
왜 데이터 볼륨 컨테이너가 필요할까  (0) 2015/01/29
Docker를 처음 외부에 공개했던 영상  (0) 2015/01/28