DockerToolbox 안쓰고 설정하기

맥이나 윈도우즈에서 Docker 환경을 구성할때 보통 Docker Toolbox를 설치한다. Docker Toolbox를 설치하면 다음 도구가 함께 설치된다.

  • VirtualBox
  • Docker Compose
  • Docker Machine
  • Docker Client

툴박스를 사용하지 않고  필요한것만 설치해서 사용하고 싶다면 어떻게 해야할까?

맥이라면 brew를 이용하면 편하다. brew로 docker 클라이언트만 설치해보자.

주의할 점은 서버 버전과 클라이언트 버전간에 차이가 있을때 클라이언트 버전이 서버보다 빠르면 서버에 접속할수 없다.

VirtualBox를 설치한다.

가상서버를 하나 만들고 Docker 데몬을 설치한다. 도커 데몬은 root 사용자가 로컬에서 unix:///var/run.docker.sock으로 보내는 요청을 받는것이 기본설정이다. 이 요청을 TCP 포트로 받을수 있게 외부로 드러내야 외부 클라이언트 요청도 받을수 있다. 외부 요청을 받는 기본 포트는 2375 포트이다.

systemd 유닛파일을 이용하면 리모트 API 설정을 TCP로 오픈할수 있다.

유닛 파일을 적용한다.

도커 데몬이 TCP 2375 포트로 리모트 API를 오픈하면 클라이언트 명령을 데몬에게 보낼수 있다. 클라이언트는 ‘docker build’ 나 ‘docker run’ 명령을 도커 데몬이 제공하는 RESTful API에게 HTTP 요청으로  보내는것 뿐이다. 127.0.0.1 호스트에 있는 컨테이너를 조회하면

클라이언트에서 매번 명령을 내릴때마다 -H 옵션을 붙이기 번거로우니 환경변수로 지정해 놓고 사용한다.

참고자료

Docker 1.9 버전 릴리즈

어제 기다리던 Docker 1.9 버전이 릴리즈 되었습니다. 이번엔 메이저 업그레이드와 마이너 업그레이드된 특징이 꽤 많네요.

가장 먼저 눈에 들어오는건 멀티 호스트간 네트워킹입니다. 1.8에 추가되기로 되어있었는데 한번 미뤄진 기능이죠. 컨테이너간의 네트워킹이 싱글호스트만 가능했던 제약이 이제 사라졌습니다. k8s와 같은 도구를 쓰지 않아도 Docker 만으로도 해결방안이 나온게 너무 반갑네요.

두번째는 퍼시스턴스 스토리지입니다. 컨테이너 volume을 플러그인 방식으로 사용하는건 이미 1.8에 소개되었지만 이번에 좀 더 업그레이드 되었네요.

Docker Swarm이 정식버전 딱지를 달았습니다. Swarm 설명에 늘 눈에 거슬리던 문구가 ‘상용에서는 쓰지마라’ 였습니다. 그런데 이번에는 당당하게 ‘상용에 쓸 준비가 되었다.’라고 써놨네요. Docker 클러스터를 위한 솔루션이 하나 더 늘었습니다.

이런 굵직한 변화외에도 Docker 엔진이 1.9로 판올림하면서 자잘한 특징들도 많이 업그레이드 되었네요.

  • stats 명령으로 Disk I/O 측정가능
  • 컨테이너에 label을 줄수 있고 label을 이용해 필터를 걸수 있다.
  • docker 이미지 만들때 build  명령에 인자값을 줄수 있다.

더 자세한건 블로그 기사를 참고하세요.

라즈베리 파이를 위한 나노 도커 이미지

얼마전 라즈베리 파이에서 도커를 실행하는 챌린지가 열렸었다. 거기서 우승한 팀은 라즈베리파이에 웹서버 2,500개를 돌렸다. 이게 어떻게 가능할까?

이 팀이 사용한 웹서버는 rpi-nano-httpd라는 초소형 웹서버다. FASM으로 개발되어 4k바이트밖에 차지하지 않는다.

이 웹서버를 실행하는 도커 이미지가 이미 DockerHub에 올라와 있다. hypriot/rpi-nano-httpd로 검색하면 찾을수 있다. 이미지 크기는 87.7 kB (우와)

출처: http://blog.loof.fr/2015/10/how-to-run-2500-webservers-on-raspberry.html

Docker 클라우드 구축 프로젝트 d4 발표영상

10월7일 열렸던 TechPlanet2015에서 사용했던 발표자료와 영상 공유합니다. 앞 부분은 좀 짤렸지만 내용을 보는데 큰 문제는 없습니다.

당일 준비한 내용이 많아서 웃음기 빼고 평소 발표보다 조금 빠르게 했던게 기억나네요.

 

비슷한 내용으로 지난달에 readme에 글을 썼는데 밀려서 이번주에 공개됐네요. 아래 글도 참고하세요.

http://readme.skplanet.com/?p=11449

Docker 이미지를 비쥬얼하게 보여주는 서비스

Docker 이미지는 계층구조로 이루어진다. 이미지가 어떻게 만들어졌는지 각 계층을 보고 싶다면 history 명령으로 가능하다.

docker history [이미지명][이미지 ID]

텍스트로 나오는걸 비쥬얼하게 보고 싶다면 ImageLayers를 사용한다.

https://imagelayers.io

다음은 nginx:latest 이미지를 ImageLayers를 이용해서 비쥬얼하게 나타낸것의 일부다.

nginx-image-layer

이 서비스를 이용해 DockerHub에 배지를 달수가 있다. 이번에 Docker사에 인수된 tutum에서 올린 tutum-cron을 Dockerhub에서 조회해 보면 하단에 ImagesLayers.io 배지가 보인다
https://hub.docker.com/r/sillelien/tutum-cron/

docker run –pull 플래그가 필요한 이유

Docker 컨테이너를 만들다 보면 다음과 같은 상황을 만나게 된다.

로컬에 이미 이미지는 다운로드 되어 있다.
그런데 registry에 있는 이미지는 달라졌다. 하지만 태그는 바뀌지 않았다.

그러면 어떤 상황이 되냐면 로컬에서 컨테이너를 만들어도 최신 이미지를 가져오지 않는다. 강제로 pull을 하려고 해도 pull이 되지 않는다. 이미 로컬에 동일한 이미지가 있기 때문이다. 결국 이미지를 rmi로 지워야 내려온다. 그런데 기존에 그 이미지로 만들어 놓은 컨테이너가 있다면 rmi를 할수가 없다. 그럼 이러지도 저러지도 할수가 없는 상황에 놓인다.

이런 상황은 나만 겪는건 아니었나 보다. 이미 많은 사람들이 이에 대해 의문을 제기했고 현재 이슈가 오픈되어 있다.
https://github.com/docker/docker/issues/13331#issuecomment-147630860

아직 추가는 되지 않았다.

dockerui

docker는 기본적으로 CLI를 지원한다. CLI도 익숙해지면 편하지만 가끔은 UI로 쓰고 싶을때도 있다.  그런때를 위해 dockerui를 추천한다.

https://github.com/crosbymichael/dockerui/

설치에 대한 기사

http://linoxide.com/linux-how-to/setup-dockerui-web-interface-docker/?hash=931ac244-ac28-446a-8a3e-416ed7c18461&utm_medium=social&utm_source=facebookpage&utm_campaign=docker-2681022

Docker 이미지 받아서 설치하는건 사실 설명이 필요없다.

docker run -d -p 9000:9000 –privileged -v /var/run/docker.sock:/var/run/docker.sock dockerui/dockerui

 

DevOps2.0 서비스 Shippable

Shippable은 도커 기반의 CI/CD 서비스입니다. 서비스가 만들어진지 2년정도 된거 같은데 기능이나 UI가 깔끔하네요.

이번 OSCON Kubernetes 세션에도 CEO가 참여했습니다.

ec2에 도커 개발환경 구성

AWS ec2 인스턴스를 이용해 도커기반 개발환경을 구성해보자.

범용 인스턴스 t2-medium + EBS( 16기가)를 생성한다.

필요한 SW를 설치한다.: git, docker, jdk

[code lang=”perl”]git : sudo yum install git.x86_64 -y
docker: sudo yum install docker.x86-64 -y
jdk: sudo yum install java-1.8.0-openjdk-devel.x86_64 -y
[/code]

도커 데몬을 띄운다.
[code lang=”perl”]sudo service docker start[/code]

도커 실행 확인
[code lang=”perl”]sudo docker run hello-world[/code]

이제 도커 컨테이너로 필요한 서비스를 실행하면된다. ec2가 ssh 접속을 지원하지만 매번 접속해서 설치하고 실행하는건 귀찮으니 젠킨스 서버를 하나 설치해서 사용한다. 도커 명령까지 실행가능하도록 해 놓으면 도커 이미지도 만들수 있어 편하다.

jenkins 사용자 추가
[code lang=”perl”]sudo useradd -u 1000 jenkins[/code]

jenkins 사용자에게 루트권한 추가
[code lang=”perl”]sudo /usr/sbin/visudo

### Allow root to run any commands anywhere
root ALL=(ALL) ALL
jenkins ALL=(ALL) ALL
[/code]

jenkins 데이터 디렉토리를 추가하고 소유자를 jenkins로 변경
[code lang=”perl”]sudo mkdir /apps/jenkins
sudo chown -R jenkins /apps/jenkins
[/code]

호스트 서버 설정이 끝났으니 젠킨스를 컨테이너로 실행한다. 젠킨스 실행은 다른 포스트를 참고한다. 이렇게 권한을 주면 보안상 취약한 면이 있으니 접근 가능한 IP는 제한하는게 좋다.

사용중인 docker 컨테이너가 많으면 docker-compose를 같이 사용한다.
[code lang=”perl”]sudo -i
curl -L https://github.com/docker/compose/releases/download/1.3.3/docker-compose-uname -suname -m > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
[/code]

참고자료
https://docs.docker.com/installation/centos/
https://docs.docker.com/compose/install/