Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

소개

컨테이너에서 gotty와 tmux를 이용한 터미널의 공유를 시도해 보려한다. 도커 컨테이너에서의 개발과 배포가 늘어나는 추세에 맞추어 특히 원격에서의 페어 프로그래밍, 코드 확인, 디버깅등에 유용하게 사용 할 수 있을 것 같다.

gotty와 tmux를 포함한 도커 이미지 만들기

gotty는 go 언어로 개발된 터미널 웹 애플리케이션이다. gotty를 이용하면 터미널을 간단하게 웹으로 서비스 할 수 있다.

 gotty terminal

https://github.com/yudai/gotty 를 방문해서 다운로드 하자. gotty라는 실행 파일을 다운로드 할 수 있다.

아래와 같은 Dockerfile을 만들었다.

Dockerfile를 빌드해서 도커 이미지를 만들었다. 이미지의 이름은 gotty/ubuntu다.
# docker build -t gotty/ubuntu .
Sending build context to Docker daemon 9.029 MB
Step 0 : FROM ubuntu
 ---> a005e6b7dd01
Step 1 : ADD gotty /bin/
 ---> de429f107648
Removing intermediate container 7316ced62647
....

컨테이너를 실행하자.
# docker run -it gotty/ubuntu /bin/bash
root@88b78dfc0bc0:/# 

컨테이너에 /bin/mytmux 라는 이름의 간단한 스크립트를 만들었다.
#!/bin/bash
tmux has-session -t pair 
if [ "$?" -ne "0" ]
then
    tmux new-session -s pair
else
    tmux attach -t pair
fi
pair이라는 이름의 세션을 검사해서 없다면, 새로운 세션을 만들고, 만들어진 세션이 있다면 attach 하는 일을 한다. gotty로 이 스크립트를 실행하면 된다.
# gotty -w mytmux
2015/11/03 16:17:17 Permitting clients to write input to the PTY.
2015/11/03 16:17:17 Server is starting with command: mytmux
2015/11/03 16:17:17 URL: http://127.0.0.1:8080/
2015/11/03 16:17:17 URL: http://[::1]:8080/
2015/11/03 16:17:17 URL: http://172.17.0.79:8080/
이제 웹 브라우저를 이용해서 gotty 서버에 접근하면 된다. 외부에서 접근하기 위해서는 호스트 운영체제에서 포트포워딩을 해줘야 할테다.
# iptables -t nat -A DOCKER -p tcp -m tcp --dport 8888 -j DNAT --to-destination 172.17.0.79:8080
run 명령시 -p 옵션으로 포워딩을 해도 상관은 없다. iptables을 이용하면 컨테이너 실행 중이라도 포트 포워딩 룰을 만들 수 있다.
# docker run -p 8888:8080 -it gotty/ubuntu /bin/bash
브라우저로 테스트한 결과

 tmux gotty

컨테이너 실행시 tmux를 서비스 하도록 수정

run과 동시에 tmux를 서비스 하도록 dockerfile을 수정했다.
# cat Dockerfile 
FROM ubuntu 
ADD gotty /bin/
ADD mytmux /bin/
RUN apt-get install -y tmux
CMD ["gotty", "-w", "mytmux"]

실행 결과
# docker run -p 8888:8080 -it gotty/ubuntu 
2015/11/16 15:25:38 Permitting clients to write input to the PTY.
2015/11/16 15:25:38 Server is starting with command: mytmux
2015/11/16 15:25:38 URL: http://127.0.0.1:8080/
2015/11/16 15:25:38 URL: http://[::1]:8080/
2015/11/16 15:25:38 URL: http://172.17.0.4:8080/
2015/11/16 15:25:38 URL: http://[fe80::42:acff:fe11:4]:8080/
2015/11/16 15:26:25 192.168.56.1:42955 200 GET /
2015/11/16 15:26:25 192.168.56.1:42957 200 GET /js/gotty.js
....