티스토리 뷰
맥/윈도에서도 도커를 쓰고 싶어요!!
겉으로 보이는 증상은 그렇지만, 기술적으로는 도커 호스트와 도커 클라이언트가 다른 머신인 상황이다.
이 유명한(?) 그림의 출처는 1989에 출간된 Total Quality Management인데, 지금도 개정판이 나온다능~ ㄷㄷㄷ
- 도커 호스트는 반드시 리눅스 머신이어야 하기 때문에, 맥/윈도에서는 별도의 진짜 리눅스 머신을 준비하던가, virtualbox나 vmware 등을 이용해서 가상의 리눅스 머신을 준비한다. boot2docker를 사용하면 간단하게 윈도/맥에서 virutalbox로 Tiny Core Linux 배포판을 사용하는 도커 호스트를 만들 수 있다.
- 도커 호스트에서는 도커 데몬이 tcp 소켓으로도 요청을 받도록(기본은 unix 도메인 소켓으로만 요청을 받음) 설정하고,
- 도커 클라이언트에서는
-H
옵션이나DOCKER_HOST
환경 변수를 사용해서 tcp 소켓을 통해 도커 데몬에 요청을 보내도록 설정한다. - 포트 매핑(
-p
), 볼륨 매핑(-v
옵션)을 사용할 때 주의하자.
boot2docker로 충분하다면... 이 글은 엄한 삽질일 뿐~ 안녕히 가세요~~ m(_ _)m
내 경우엔, 작고 가볍고 docker와 궁합이 잘맞는 CoreOS를 거금(!)을 주고 구입한 VMware Fusion에 올려서 도커 호스트로 쓰고 있어서 약간(?)의 삽질이 필요하다.
CoreOS를 한 문장으로 요약하면 LXC/docker/fleetd/etcd등을 활용하여 OS 수준에서 개별 서비스의 HA/LB를 지원하는 리눅스 배포판이다. CoreOS에 대해서는 다음에 따로 얘기할 기회가 있을랑가 없을랑가... 일단 넘어가자~
Step by Step: in Docker in CoreOS in VMware in MacOSX
이 부분은 처음 올렸던 삽질기를 좀 더 자세히 풀 어 쓴 것이니, 이미 봤고 이해했다면 스킵하시길~
이 글에서는 맥 osx(도커 클라이언트)와 CoreOS(도커 호스트)를 구분하기 위해 shell prompt를 각각 MACOSX
과 COREOS
로 해두었다.
- CoreOS가 제공하는 VMware용 이미지 다운로드 & 설치 & 실행하고:
MACOSX$ curl -LO http://alpha.release.core-os.net/amd64-usr/current/coreos_production_vmware_insecure.zip MACOSX$ unzip coreos_production_vmware_insecure.zip MACOSX$ open coreos_production_vmware_insecure.vmx
참고: 2014.07.29 현재 CoreOS alpha는 docker 1.1.x, CoreOS beta는 docker 1.0.x 이다.
CoreOS 콘솔(VMware의 vm 창)에 가서 (엔터 땅땅치면) 화면에 나오는 IP를 눈으로 확인하고:
MACOSX$ ssh -i insecure_ssh_key core@192.168.xxx.xxx COREOS$
매번
-i insecure_ssh_key
하기 귀찮으면, 진짜 ssh key로 변경하고:MACOSX$ scp -i insecure_ssh_key ~/.ssh/id_rsa.pub core@192.168.xxx.xxx:/home/core/.ssh/authorized_keys MACOSX$ ssh core@192.168.xxx.xxx COREOS$
매번 IP로 접속하기 귀찮으면,
/etc/hosts
에 추가하고(이 글에서는donald
라는 이름을 붙였다):MACOSX$ cat >> /private/etc/hosts 192.168.xxx.xxx donald ^D MACOSX$ dscacheutil -flushcache
ssh로 접속해서, 남들 다하는 hello world 한 번 해보고:
MACOSX$ ssh core@192.168.xxx.xxx COREOS$ docker run /bin/echo hello world Unable to find image 'ubuntu' locally Pulling repository ubuntu ba5877dc9bec: Download complete 511136ea3c5a: Download complete ... 2318d26665ef: Download complete hello world COREOS$
처음에는 우분투 이미지 다운받느라 오래 걸림.
맥 터미널에서, 남들 다하는 hello world 한 번 해봤더니:
MACOSX$ docker -H tcp://192.168.xxx.xxx:2375 run ubuntu /bin/echo hello world 2014/07/24 14:04:07 Cannot connect to the Docker daemon. Is 'docker -d' running on this host? MACOSX$
당근 안되겠지~ 나도 그 정도는 알아~~
CoreOS의
docker
데몬이 tcp 요청을 받도록 설정하고:COREOS$ sudo sh -c "cat > /etc/systemd/system/docker-tcp.socket" [Unit] Description=Docker Socket for the API [Socket] ListenStream=2375 BindIPv6Only=both Service=docker.service [Install] WantedBy=sockets.target ^D COREOS$ sudo systemctl enable docker-tcp.socket COREOS$ sudo systemctl stop docker COREOS$ sudo systemctl start docker-tcp.socket COREOS$ sudo systemctl start docker COREOS$ docker -H tcp://localhost:2375 run ubuntu /bin/echo hello world hello world COREOS$
앞에서 우분투 이미지 다운받았다면 이번엔 금방 끝남.
다시 도전! 맥 터미널에서, 남들 다하는 hello world 한 번 해보면:
MACOSX$ docker -H tcp://192.168.xxx.xxx:2375 run ubuntu /bin/echo hello world hello world MACOSX$
매번
-H tcp://192.168.xxx.xxx
하기 귀찮으면,DOCKER_HOST
환경변수 설정하고:MACOSX$ export DOCKER_HOST="tcp://192.168.xxx.xxx:2375" MACOSX$ docker run ubuntu /bin/echo hello world hello world MACOSX$
이 정도로 만족하고 그냥 쓰면 좋았을 것을...
VMware 창이 눈에 밟히네... Orz
터미널(CLI)에서 VMware 제어하기
그래서~~ 삽질을 조금 더 해 보았습니다~
참고: VMware가 제공하는 공식 문서 Using vmrun to Control Virtual Machines을 참조하시길...
먼저,
vmrun
명령 사용하기 편하게 링크$ ln -s /Applications/VMware Fusion.app/Contents/Library/vmrun /usr/local/bin/
옵션없이
vmrun
명령을 실행하면 뻔한~ 도움말이 나온다:$ vmrun vmrun version 1.13.2 build-1887983 Usage: vmrun [AUTHENTICATION-FLAGS] COMMAND [PARAMETERS] ...
vm 시작하고 종료하기
vm 시작
$ vmrun start <path-to-vmx-file> [nogui|gui]
vm 종료|리셋|정지
$ vmrun stop|rest|suspend <path-to-vmx-file> [soft|hard]
VMware의 guest IP 얻기
- VMware Fusion 6 이상
$ vmrun getGuestIPAddress <path-to-vmx-file>
그러나...
- --> VMware guest(여기서는 CoreOS)에 VMware Tools를 설치해야하고...
- --> 커널 모듈을 컴파일해야 하고...
- --> 그럴려면 gcc를 깔아야 하고...
- --> 나는야 CoreOS?!
- --> 흠... 역시 CoreOS 커스텀 이미지를 만들어야 하는건가...
- --> 그건 리눅스에서만 할 수 있고...
- --> 리눅스를 설치해야...?!!
- --> 리눅스가 있으면 내가 이 삽질을 왜 하는겨?? -_-;;;
--> 난 누구? 여긴 어디?
VMware Fusion 5 이하
$ grep ethernet0 <path-to-vmx-file>
...
ethernet0.connectionType = "hosted"
ethernet0.addressType = "generated"
ethernet0.address = "00:11:22:33:44:55"
ethernet0.generatedAddress = "00:11:22:33:44:55"
...
$ cat /var/db/vmware/vmnet-dhcpd-vmnet8.leases
...
lease 192.168.xxx.xxx {
...
hardware ethernet 00:11:22:33:44:55;
...
}
...
- 눈을 크게 뜨고 찾아봅시다~
- --> 벌써 노안인가... 잘 안보여 ㅠㅠ
- --> 스크립트 짤까?
- --> 귀찮... -_-;;;
- --> 그냥 IP를 고정하자!
VMware의 guest MAC/IP 고정
guest가 NAT/DHCP 네트웍 어댑터 사용해야 함.
(가상 랜카드의) MAC 고정
$ vi <path-to-vmx-file> ethernet0.connectionType = "nat" ethernet0.addressType = "static" ethernet0.address = "00:11:22:33:44:55"
(특정 MAC에 할당할) IP 고정
$ vi /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf host dock { hardware ethernet 00:11:22:33:44:55; fixed-address 192.168.xxx.xxx; } $ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --configure $ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --stop $ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start
VMware의 NAT 설정
예: VMware host(mac osx)으로 8080
을 VMware guest(coreos) 80
으로 전달:
$ vi /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf
[incomingtcp]
8080 = 192.168.xxx.xxx:80
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --configure
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --stop
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start
(VMware와는 무관하지만) /etc/hosts
파일 설정
예: 192.168.xxx.xxx
의 호스트 이름을 donald
로 설정:
$ cat >> /private/etc/hosts
192.168.xxx.xxx donald
^D
$ dscacheutil -flushcache
이제라도 만족하고 그냥 쓰면 좋았을 것을...
개발 하는 동안 만이라도... 작업 파일들 한 군데 몰아놓으면 안되겠니??
도커 클라이언트(mac osx) + 도커 호스트(coreos on vmware) + 도커 컨테이너(maybe ubuntu?) 파일 공유하기
경고: 이제부턴 결론 없는 삽질이므로 심신이 약하거나 삽질알러지가 있는 분들은... 안녕히 가세요 m(_ _)m
그리고... 삽질은 계속된다...
도커 호스트 <---> 도커 컨테이너
- 데이터 볼륨(이라고 쓰고 디스크라고 읽는다)을 사용하거나 볼륨 매핑
-v
옵션으로 해결.
이건 나중에 따로 설명할 기회가 있을라나 없을라나... 아무튼 굉장히 중요한 부분인데...
궁금하면 Docker 프로젝트가 제공하는 공식 문서 Managing Data in Containers를 참조하시길...
도커 호스트 <---> 도커 클라이언트
리눅스에서 도커를 사용하는 경우라면 도커 호스트와 클라이언트가 같은 머신이라... 공유하고 나발이고 없음.
내 경우에는 도커 호스트는 VMware 가상 머신에서 굴러가는 CoreOS(즉, VMware guest), 도커 클라이언트는 맥 OSX(즉 VMware host)라서 VMware가 제공하는 공유 폴더로 해결...하고 싶었지만...
VMware의 공유 폴더는 리눅스 guest에서 보면 vmhgfs
고, 이걸 쓰려면...
- --> VMware guest에 VMware Tools를 설치해야하고...
- --> 커널 모듈을 컴파일해야 하고...
- --> 그럴려면 gcc를 깔아야 하고...
- --> 나는야 CoreOS?!
- --> 흠... 역시 CoreOS 커스텀 이미지를 만들어야 하는건가...
- --> 그건 리눅스에서만 할 수 있고...
- --> 리눅스를 설치해야...?!
- --> 리눅스가 있으면 내가 이 삽질을 왜 하는겨?? -_-;;;
- --> 이건 어디선가 본 것만 같은... Orz
일단, nfs나 sshfs 같은 네트웍 파일 시스템을 쓰면 되겠지만...
에... 속도도 안나오고...
에... 결정적으로 뽀대가...
(아... 이 움짤 꼭 한번 써먹고 싶었는데... 이런 허접한 데 쓰게 될 줄이야ㅠㅠ)
that's not all folks yet
'hacking' 카테고리의 다른 글
가내수공업 hyperlapse: ffmpeg으로 동영상 재생 속도 바꿔서 인코딩하기 (0) | 2014.09.27 |
---|---|
mysql에서 create_at/updated_at 컬럼 사용하기 (0) | 2014.09.26 |
docker getting started: 왕초보를 위한 docker 입문 (1) | 2014.07.26 |
도커 클라이언트(macosx)에서 도커 컨테이너(maybe ubuntu?)에 터미널로 접속하기 (0) | 2014.07.25 |
mac osx + docker + vmware + coreos (0) | 2014.07.18 |
- Total
- Today
- Yesterday
- web
- 독후감
- JavaScript
- DeveloperWorks
- 자전거
- 장필순
- 땅끝마을
- nodejs
- 해남
- Ajax
- ***
- Dojo
- 영화
- Prototype
- Eclipse
- 책
- **
- ***1/2
- docker
- Java
- 자바스크립트
- ****
- HTML5
- CSS
- 여행
- 노래
- jQuery
- webapp
- maven
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |