Docker 컨테이너 그래픽 인터페이스 표시(GUI 소프트웨어 실행) 구성 방법
Ubuntu 16.04 docker 1.35
1. Docker의 시각화
Docker 자체의 작업 모델은 명령행입니다. 주로 장면을 사용하는 것은 서버 백엔드를 하는 것이 비교적 많기 때문입니다.그러나 때때로 우리는 docker 용기에서 그래픽 인터페이스를 실행하는 소프트웨어가 있거나 카메라를 호출하거나 이미지를 출력하는 등 수요가 있을 때 이 Docker의'가시화'문제를 해결해야 한다.(이곳의'가시화'는 쉽게 찾을 수 있는 가시화 관리 방법이 아니다)
2. 솔루션 1 - 컨테이너를 시작할 때 구성 옵션 추가
임범: Docker가 GUI 소프트웨어를 실행하는 방법
이 글은 Docker사의 프로그래머 제시 프레젤(Jessie Frazelle)이 보여준 그래픽 인터페이스를 사용한 거울의 예를 소개하고, 제시도 자신이 보여준 docker가libreoffice 소프트웨어를 실행하는 코드와 사용 방법을 소개했다.
2.1 원리 소개
원문에서 말하는 것이 비교적 상세하고 원리가 결코 복잡하지 않으니, 나는 내 이해에 따라 간단명료하게 말하겠다.원리적으로 도커 렌즈를 모니터가 없는 컴퓨터로 볼 수 있고 프로그램은 실행할 수 있지만 표시할 곳이 없다.한편, linux의 현재 주류 이미지 인터페이스 서비스X11은 클라이언트/서버(Client/Server)의 작업 모드를 지원한다. 용기가 시작될 때'unix: 포트'또는'호스트 이름: 포트'를 docker에게 공유하면 docker는 포트를 통해 출력을 표시하는 곳을 찾을 수 있고 linux 시스템과 함께 사용할 수 있다.
2.2 세부 사항(로컬 디스플레이에 표시됨)
1) 우선 운영 시스템에서 실행
$ sudo apt-get install x11-xserver-utils
$ xhost +
이 두 문장의 역할은 모든 사용자가 docker를 포함하여 X11의 디스플레이 인터페이스에 접근할 수 있도록 개방하는 것이다
2) docker 컨테이너를 시작할 때 다음과 같은 옵션을 추가합니다.
-v /tmp/.X11-unix:/tmp/.X11-unix \ # unix
-e DISPLAY=unix$DISPLAY \ # DISPLAY
-e GDK_SCALE \ # ,
-e GDK_DPI_SCALE \
최종 시동 명령은 이렇게 돼요.
$ docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
--name libreoffice \
jess/libreoffice
이렇게 하면 시작된 용기는 그래픽 인터페이스가 있는 프로그램을 실행하면 로컬에서 표시하는 것과 같이 자유롭게 표시할 수 있다.
이렇게 조작하면 이미 매우 편리하다.주의해야 할 것은 매번 다시 켜면 본 컴퓨터에서 한 번 조작해야 한다는 것이다
xhost +
사용 권한을 엽니다.이것을 영구적으로 바꾸는 방법이 있어야 하는데, 나는 번거롭지 않다고 생각한다.원문에는 원격 디스플레이에 대한 설정 방법도 있는데, 나는 해 보지 않았으니 더 이상 말하지 않겠다.
3. 솔루션 2 - 부팅된 컨테이너 수정 시스템 매개 변수
참고 문장에서 때때로, 우리는 이미 시작된 용기에서 그림을 표시할 필요가 있지만, 처음부터 용기를 새로 시작하는 것은 좀 번거롭다.이럴 때는 위 블로그에서 말한 방법으로 도형 인터페이스의 표시를 실현할 수 있어 편리한 편이다.사고방식도 호스트와 docker를 서버와 클라이언트의 관계로 보고 IP 주소를 통해 표시한다.
3.1 세부 사항
1) ifconfig를 사용하여 호스트와 docker의 IP 주소를 봅니다. 예를 들어 호스트의 IP는 xxx docker이고 IP는 YYY 2) docker에 있습니다.
export DISPLAY= XXX # IP
3) 호스트에서
sudo gedit /etc/lightdm/lightdm.conf # xserver-allow-tcp=true
sudo systemctl restart lightdm
xhost + #
이렇게 설정하면 완성됩니다. 이것은 처음으로 설정한 조작입니다.나중에 다시 켤 때마다 호스트에서 xhost + 를 실행하고, docker에서 export DISPLAY = XXX를 실행합니다.사실은 귀찮아요.가장 관건적인 것은 이런 방식은 IP 주소를 사용하는데 시스템이 네트워크가 연결되지 않을 때 네트워크 카드에 분배된 IP 주소가 없기 때문에 이런 방법은 통하지 않는다.
4. 이미지 인터페이스를 표시할 수 있는지 테스트하는 방법
두 번째 참고문에는 시계를 표시하는 작은 프로그램 xclock을 사용했지만 저는 Ubuntu 16.04 환경에서 이걸 찾을 수 없어요. 설치할 수 있는xarclock라고 해요. 기능이 docker에서 실행돼요.
sudo apt-get install xarclock #
xarclock # , ,