Docker 가져오기, GUI 작동 가능한 Linux(Ubuntu) 컨테이너 만들기

개요


Docker for Mac에서 GUI 작업을 할 수 있는 Linux (Ubuntu) 환경을 만들어 보았습니다. 다음은 방법을 소개합니다.호스트에서 Docker 컨테이너의 GUI 프로그램을 시작할 수 있다고 가정하면 다음과 같습니다.

예 1: 호스트 화면에서 컨테이너의 데스크톱을 조작합니다.



예 2: 호스트 화면에서 컨테이너의 브라우저 사용



프로비저닝


만들기 전에 구성을 설명합니다.대략적인 인상으로 아래 그림과 같다.Docker 컨테이너는 GUI 디스플레이를 호스트 OS에 투영하고 호스트 OS 측면에서 작업을 수행합니다.호스트 OS는 GUI 조작 X11(Xwindows System의 macOS 버전)의 유닉스 시스템 구조를 이용하여 Docker 용기 내의 응용 프로그램을 GUI 인터페이스에 묘사하여 사용자의 조작을 받아들여 Docker 용기 내의 응용 프로그램에 전달한다.그것은 또한 포트와 x11 사이의 프록시 서버를 충당한다.

환경


macOS High Sierra(10.13.3)

단계


1. Docker 배포


Docker를 처음 접하는 사람에게 Docker를 가져오는 방법을 소개합니다.다음 명령을 사용하여 Docker for Mac을 가져옵니다.
$ brew install docker
$ brew cask install docker #docker for macのクライアントアプリを導入
또한 아래에서 가져올 수도 있습니다.
DOCKER FOR MAC

2. Socat 가져오기, 시작


Socat은 간단한 프록시 서버를 구축하여 플러그인 통신을 실현합니다.즉, 여기서 포트 6000호(용기 GUI를 조작하는 x11용 작은 배)를 통해 호스트 측의 화면이 용기 안과 통신할 수 있다.
먼저 가져오기부터 시작합니다.
$ brew install socat
다음 명령을 통해 호스트 측의 모니터에 포트6000 (유닉스의 GUI 작업을 하는 xquartz용 포트) 와의 통신을 표시합니다.fork 는 여러 연결을 관리할 수 있는 옵션이고, reuseaddr 은 포트를 다시 사용할 수 있는 옵션입니다.
$ socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"

3. Xquartz 가져오기, 시작


Xquartz(X11.app)는 macOS용 XWindow 시스템입니다.XWindow System은 Unix 시스템 OS에서 GUI 작업을 수행할 수 있는 시스템입니다.
최근의 macOS는 기본적으로 포함되지 않기 때문에 배치하고 시작합니다.
$ brew cask install xquartz
$ open -a XQuartz #起動
참고로 xquartz도 아래에서 가져올 수 있습니다.
Quartz

4. Docker 이미지 가져오기


이번에는 ubuntu를 사용해 보겠습니다.
$ docker pull ubuntu

5. Docker 컨테이너 생성 및 시작


드디어 Docker 컨테이너를 만들고 시작합니다.
우선, Docker 용기 측에서 Mac에 접근할 때 호스트 측의 IP 주소를 가져옵니다.
# ホストのIPアドレスを取得
$ ifconfig en0 | grep inet | awk '$1=="inet" {print $2}'
위의 IP 주소를 xxx.xxx.xxx.xxx 섹션으로 교체하고 다음 docker run 명령을 실행하여 컨테이너를 만들고 시작합니다.e 옵션은 컨테이너의 환경 변수 DISPLAY를 호스트의 IP 주소로 설정하여 호스트 측면에 표시합니다.또한 호스트의 IP 주소 뒤:0는 호스트 내의 x 윈도우즈 서버의 번호를 가리키며 첫 번째 x 윈도우즈 서버라는 뜻이다.
# Dockerコンテナの作成・起動
# 下記xxx.xxx.xxx.xxxをホストのIPアドレスに変更して実行
$ docker run -it -e DISPLAY="xxx.xxx.xxx.xxx:0" ubuntu

6. 호스트에 X 서버에 대한 접속 권한 부여


위의 명령을 실행하면 Xquartz 터미널 창이 열립니다.열려 있지 않으면 ⌘+N 또는 Xquartz의 GUI 응용 프로그램 메뉴 모음의 "응용 프로그램"→ "Terminal"에서 엽니다.

그리고 xterm에서 호스트와 X 서버의 연결 권한을 부여하는 명령을 실행합니다.그나저나 xhost + 접속 제한이 모두 사라져 이곳의 목적도 이루어질 것이다.그러나 안전성에서는 환영을 받지 못한다.
# xterm上から実行
$ xhost XXX.xxx.xxx.xxxホストのIPアドレス

이로써 Docker의 가져오기와 GUI가 작동하는 Linux 컨테이너가 완성됩니다.


다음은 만든 용기에 GUI 프로그램을 배치하고 시작하려고 합니다.

7. Docker 컨테이너에서 GUI 응용 프로그램 가져오기 및 시작


여기서 Ubuntu 컨테이너를 전제로 진행합니다.
※ 둘 다 디스크 공간이 소모됩니다.그리고 시간이 좀 걸리니까 주의하세요.

데스크톱 클라이언트 파일 관리자 배포

# コンテナ内で実行
root@xxxxxxx:/# apt-get update
root@xxxxxxx:/# apt-get install ubuntu-desktop
root@xxxxxxx:/# exit #コンテナを再起動するためexit
# ホスト側でコンテナを再起動
$ docker restart CONTAINER_ID
# 再起動したコンテナ内からファイルマネージャーを起動
root@xxxxxxx:/# nautilus
이렇게 하면 시작 이미지처럼 Ubuntu의 데스크톱과 파일 관리자(nautilus)가 열려 조작할 수 있습니다.

브라우저 가져오기

root@xxxxxxx:/# apt-get update
root@xxxxxxx:/# apt-get install firefox
root@xxxxxxx:/# firefox #起動

위에서 설명한 대로 생성된 컨테이너에 대해 GUI 작업을 수행할 수 있습니다.

참고 자료


Docker for Mac에서 만든 Ubuntu 컨테이너 내의 GUI 프로그램(spyder) 사용
Docker 컨테이너의 GUI를 Mac 측면에 표시합니다.

좋은 웹페이지 즐겨찾기