Docker에서 GUI 기반 애플리케이션 실행하는 방법

Run Gui Apps Docker

Docker는 일반적으로 서버 측 및 명령줄 앱에 사용됩니다. 그러나 적절한 설정을 통해 컨테이너 내에서 GUI 기반 애플리케이션을 실행할 수도 있습니다. 이러한 컨테이너는 GUI 라이브러리 및 디스플레이 도구를 포함할 수 있으며, 이를 통해 애플리케이션이 안전하고 격리된 환경에서 실행될 수 있습니다. 이 접근 방식은 다양한 머신이나 OS 환경에서 GUI 앱을 개발, 테스트 및 배포하는 것을 간소화합니다. 이 가이드는 최소한의 설정으로 Docker 컨테이너 내에서 GUI 앱을 실행하는 방법을 안내합니다.

Docker 및 Docker GUI 컨테이너 이해하기

Docker는 애플리케이션과 코드, 라이브러리 및 설정과 같은 모든 필요 요소를 함께 패키징하여 컨테이너라는 독립형 단위로 만드는 것을 허용합니다. 이러한 컨테이너는 호스트 시스템의 커널을 공유하므로 전체 가상 머신에 비해 경량화되고, 빠르게 시작되며, 효율적입니다.

GUI 컨테이너는 Firefox, Gedit 또는 기타 데스크톱 도구와 같은 그래픽 애플리케이션을 포함하는 Docker 설정으로, 이들의 창이 실제 화면에 나타나도록 합니다. 표준 컨테이너와 달리, 이러한 컨테이너는 호스트의 디스플레이 시스템과 연결하기 위해 추가 구성이 필요하여 GUI 요소와의 적절한 렌더링 및 상호작용을 가능하게 합니다.

Docker에서 GUI 앱을 실행하는 이유

Docker에서 GUI 앱을 실행하는 것이 유익한 주요 이유는 다음과 같습니다:

  • Docker에서 GUI 앱을 실행하면 필요한 모든 것(라이브러리 및 설정 등)이 컨테이너 내에 패키징됩니다. 이를 통해 주요 시스템이 혼잡하거나 충돌하는 것을 방지할 수 있습니다.
  • Docker를 사용하면 애플리케이션이 어떤 머신에서도 동일하게 작동합니다. 개발, 테스트 또는 다른 사람과 공유할 때 환경이 일관되게 유지됩니다.
  • 컨테이너는 새로운 앱을 테스트하거나 디버깅하는 것을 간단하게 만듭니다. 호스트 머신에 영향을 주지 않고 실행, 일시 중지 또는 제거할 수 있습니다.
  • Docker는 비리눅스 시스템에서 리눅스 GUI 애플리케이션을 실행할 수 있게 해줍니다. 이는 XQuartz 또는 VcXsrv와 같은 디스플레이 공유 도구를 사용하여 가상 머신 없이 가능합니다.
  • 전통적인 VM과 달리 Docker 컨테이너는 시스템 리소스를 덜 사용합니다. GUI 기반 앱에서도 더 빠르게 시작되고 더 부드럽게 실행됩니다.

Docker에서 GUI 애플리케이션 실행하기

Docker에서 GUI 애플리케이션을 실행하려면 먼저 리눅스 시스템에 Docker가 설치되어 있는지 확인해야 합니다. 다음 명령어를 실행하여 확인할 수 있습니다:

docker--version

이 명령어가 버전 번호를 반환하면 Docker가 설치되어 있고 작동 중임을 의미합니다. 그렇지 않으면 “command not found” 오류가 표시될 것입니다.

Docker가 제대로 설정되면 다음 단계로 진행할 수 있습니다.

Docker 서비스 활성화

이제 다음 명령어를 사용하여 Docker 서비스를 시작합니다:

sudo systemctl start docker

Docker 서비스가 제대로 실행되고 있는지 확인하려면 다음을 실행합니다:

sudo systemctl status docker

출력 결과는 Docker 서비스가 활성화되어 있고 문제 없이 실행되고 있음을 확인합니다:

Check Docker Status

프로젝트 폴더 및 Dockerfile 설정

“dockerGUI”라는 디렉토리를 생성하여 GUI 앱 실행을 위한 모든 Docker 관련 파일을 저장하겠습니다:

mkdir dockerGUI

이제 이 디렉토리로 이동하여 이후에 생성하거나 수정할 모든 파일이 dockerGUI 폴더에 저장되도록 합니다:

cd dockerGUI

Docker 이미지 구성을 정의하기 위해 dockerGUIFile이라는 새 파일을 생성합니다:

nano dockerGUIFile

이제 dockerGUIFile에 다음 코드 줄을 붙여넣습니다:

FROM jess/firefox  
ENV DISPLAY=:0  
CMD ["firefox"]

위 코드는 Docker에게 Firefox의 미리 구축된 이미지를 사용하도록 지시하고 GUI가 호스트 시스템에 나타날 수 있도록 디스플레이 환경을 설정합니다. 또한 컨테이너가 실행될 때 Firefox가 자동으로 시작되도록 보장합니다.

참고: 다른 앱을 시도하려면 Dockerfile에서 이미지와 명령어를 변경하면 됩니다. 예를 들어, Gedit를 실행하려면 공식 Ubuntu 이미지를 사용하고 빌드 중에 앱을 설치할 수 있습니다:

FROM ubuntu  
RUN apt-get update&&apt-get install-y gedit  
ENV DISPLAY=:0  
CMD ["gedit"]

Docker 이미지 빌드

이제 dockerGUIFile에 Docker 구성이 설정되었으므로 다음 명령어를 사용하여 Docker 이미지를 빌드합니다:

sudodocker build -t myfirefox:1-f dockerGUIFile .

이 명령어는 dockerGUIFile에서 Docker 이미지를 빌드하고, 이를 myfirefox라는 이름으로 태그 1을 붙이며, 현재 디렉토리를 컨텍스트로 사용합니다:

Build Docker Image

GUI 지원이 활성화된 Docker 컨테이너 실행

이제 다음 명령어를 실행하여 Docker 컨테이너에 대한 GUI 지원을 활성화합니다:

xhost +local:docker

출력 결과는 내 시스템에서 실행 중인 로컬 클라이언트(예: Docker 컨테이너)가 이제 내 X 서버에 연결할 수 있도록 허용되었음을 확인합니다:

이제 다음 명령어를 사용하여 컨테이너를 실행하여 호스트 시스템에서 GUI 지원으로 Firefox를 실행합니다:

docker run -it--rm-eDISPLAY=$DISPLAY-v/tmp/.X11-unix:/tmp/.X11-unix myfirefox:1

결과적으로 이 명령어는 컨테이너를 디스플레이에 연결하여 Firefox가 마치 네이티브 앱처럼 화면에 열리도록 합니다:

Run Gui App From Docker

참고: --rm 옵션을 사용하면 Docker가 앱이 닫힌 후 컨테이너를 자동으로 삭제하여 시스템을 깨끗하게 유지하고 docker ps -s에 표시되지 않도록 합니다.

Docker를 X 서버에서 분리

GUI 애플리케이션 사용을 마친 후 보안상의 이유로 X 서버 접근을 종료하는 것이 좋습니다:

xhost -local:docker

최종 생각

Docker에서 GUI 기반 애플리케이션을 실행하는 것은 컨테이너가 명령줄을 넘어 할 수 있는 것을 확장하는 훌륭한 방법입니다. 적절한 설정을 통해 컨테이너에서 데스크톱 앱을 마치 시스템에 설치된 것처럼 실행할 수 있습니다. 이는 테스트, 개발 또는 깨끗한 환경에서 리눅스 도구를 탐색하는 데 간단하면서도 강력한 접근 방식입니다. 자신만의 GUI 준비된 컨테이너를 구축하고 리눅스 데스크톱에서 Docker가 제공하는 모든 이점을 최대한 활용해 보세요.