Docker란 프로그램을 들어보신적이 있으실겁니다. 이놈의 정제가 뭐냐하면 특정 리눅스 컨테이너를 만들고 필요에 따라서 가상화하여 올렸다 내렸다 하는 총체적인 솔루션입니다.
기본적으로 lxc를 이용하고 있고 여기에 관리용 hub를 덧붙여서 이용하고 있습니다. VirtualBox나 VMware의 저수준 가상화가 아닌 일종의 Sandbox가상화입니다.
한번 컨테이너를 만들어 놓으면 해당 컨테이너를 쓰다가 그냥 컨테이너를 내리는 것으로 초기화를 한번에 할 수 있어서 편합니다. 그리고 Sandbox가상화이기 때문에 성능상 손해가 없다고 봐야 합니다.
그런데 이런건 보통 서버에서 필요한 것인데 데스크탑인 우분투에서 대체 어떤 용도로 이 녀석이 필요한 것일까요?
여러가지가 있지만 대표적인 몇가지만 알려드리겠습니다.
우분투에서 소스 컴파일을 통해 설치를 하려고 하면 이것저것 패키지를 많이 설치해야하고 설치후에도 이것 저것 쓰레기가 많이 남습니다. 그리고 컴파일한 패키지를 배포하려고 해도 우분투의 버전이 좀 많습니까? 각각의 배포판에 맞게 패키징을 해야하는데 그럼 각각의 버전을 또 설치해야합니다. 이걸 하나하나 한다고 생각해보세요. 미쳐 돌아갈 지경입니다.
또 다른 것으로는 바이너리 형태로 배포되는 프로그램 중에서 특정 배포판만을 지원하는 경우가 있습니다. 지금은 억지로나마 설치를 하지만 어쨌건 삽질하면서 설치하는 한글2008이나 Redhat 계열만을 지원하는 Abacus, 혹은 우분투와 페도라만을 지원하는 구글 크롬등이 있습니다. 이런 경우에는 해당 배포판을 설치해야하지만 Docker를 이용해서 해당 프로그램을 설치한다면 아무런 문제없이 설치를 할 수 있게 됩니다.
하지만 이런 Docker사용시 한가지 문제가 있는데 GUI 프로그램을 쓰려면 Xorg가 호스트에서 실행되고 있어야 한다는 것입니다. 당연하다면 당연한 이야기입니다.
하지만 컨테이너에서는 Xorg가 없어도 됩니다. 호스트의 Xorg가 모든 것을 대신해 주거든요. 그 말은 호스트의 자원을 이용할 수 있다는 의미입니다.
docker를 설치하고 설정하고 컨테이너를 빌드하는 것은 다른 곳에 더 좋은 내용이 많기 때문에 이 부분은 넘어가고 저는 컨테이너에 설치된 GUI프로그램을 실행하는 방법에 대해 알려드리겠습니다.
docker의 컨테이너를 실행할 때 대부분 여러분들은 이 명령으로 시작할 겁니다.
sudo docker run ~~ /bin/bash
그런데 GUI를 하시려면 여기에 몇가지가 더 들어가야 합니다.
sudo docker run --rm -it -v /run/user/1000:/run/user/1000 -v /dev:/dev -v /tmp/.X11-unix:/tmp/.X11-unix:ro --privileged --ipc=host --shm-size=256m --net=host -e DISPLAY=$DISPLAY -e XDG_RUNTIME_DIR=/run/user/1000 /bin/bash
이렇게 하시면 pid 1000으로 Docker가 실행되면서 X가 함께 실행이 되고 256m의 공유메모리가 함께 만들어지며 쉘로 bash가 실행되게 됩니다.
그럼 바로 GUI 프로그램의 명령을 내려볼까요? firefox같은 것이 좋겠네요.
그럼 데스크탑을 못 찾는다면서 에러가 날 겁니다.
호스트에서도 한가지 더 설정을 해야 하거든요. 호스트 컴퓨터에서 터미널을 열고 다음 명령을 내리도록 합시다.
xhost +local:docker
이렇게 하면 docker로 실행되는 프로그램이 호스트의 X를 통해서 실행이 되게 됩니다. 이제 한번 다시 컨테이너에서 명령을 내려보세요. 컨테이너의 설정에 맞춰서 프로그램이 실행될겁니다. 자그마치 호스트 프로그램과 함께 말이지요!
복잡하게 움직이기는 했지만 생각보단 쉽지 않나요? 이렇게 사용하시면 Docker의 프로그램에서 어떤짓을 하더라도 깔끔하게 다시 돌아올 수 있답니다. 참 쉽죠?
P.S 우분투에서 Docker 설치는 굉장히 쉽습니다.
sudo apt-get update |
Windows에서 설치하려들면 미쳐돌아가는 반면 우분투는 리눅스라 Docker가 굉장히 쉽지요. 책에서보면 몇 페이지에 걸쳐서 설명하던데 Docker는 역시 리눅스에서 돌리는 것이 가장 좋습니다.
P.S-2 Docker가 굉장히 유용한 배포판으로 Arch와 FreeBSD가 있습니다. Arch는 롤링릴리즈 특성상 구버전 설치가 힘든데 구버전을 길게 지원하는 Debian이나 Ubuntu LTS를 Docker에 올려놓고 해당 배포판용 프로그램을 사용하는 경우가 많다고 합니다. FreeBSD는 Linux가 아닌 BSD이므로 Linux전용 프로그램을 요구할 때 사용한다고 합니다.
P.S-3 호스트의 X를 사용하는 것으로 굉장한 강점이 있는데 컨테이너에서 그래픽가속도 됩니다. 보통 가상화는 오버헤드가 많은데 이쪽은 오버헤드 자체가 없습니다.
'우분투 분투기' 카테고리의 다른 글
Unity3D 게임엔진 2017.1 리눅스 버전 설치 문제 (0) | 2017.06.16 |
---|---|
굴림 날리고 나눔고딕으로 대체하기 (7) | 2017.06.15 |
[Ubuntu 16.04]ttf-mscorefonts-installer 설치 중 에러날 때 (0) | 2017.06.09 |
Princess Maker 3 ~꿈꾸는 요정 ~ 우분투에서 실행하기 (6) | 2017.06.01 |
리눅스의 DAEMON-Tools인 CDemu (0) | 2017.05.31 |