Docker ile GUI uygulamaları

Docker, uygulamalarımızı sanal bir ortamda çalıştırmamızı sağlayan bir platform. Ayrıntıları hakkında pek fazla durmak istemiyorum ve daha önce Docker ile aşina olduğunuzu varsayıyorum.

Docker ile genellikle arayüzü olmayan, arka planda işler yapan uygulamalar yönetilir. Örneğin nginx, elasticsearch, jenkins vs. Bu tip işler için biçilmiş kaftandır. Ancak, pek çok kişinin sandığının aksine Docker ile masaüstü arayüzü olan uygulamaları da çalıştırabilirsiniz. Demek istediğim Jenkins gibi web arayüzü olan değil Firefox, Chrome ya da FileZilla gibi masaüstü ortamında çalışan uygulamalar.

Docker ile neden arayüz uygulaması çalıştırmak isteyeyim ki diyorsanız haklı olabilirsiniz. Ben bu yazıda “Neden” sorusundan çok “Nasıl” sorusunu yanıtlamak istiyorum.

Docker ile derlediğiniz uygulamalar, platformdan bağımsız çalışır. Yani bir Jenkins container’ı derlediniz diyelim; bunu Linux, Windows ya da Mac ortamında Docker dışında hiçbir şeye ihtiyaç duymadan çalıştırabilirsiniz. Ancak, GUI uygulamalarında işletim sistemine has ayarlar yapmamız gerekiyor. Çünkü Windows’un pencere yöneticisi macOS’un pencere yöneticisinden tamamen farklı. Docker, arayüz uygulamasını hangi donanıma yönlendireceğini bilmek zorunda.

Örneklerde DockerHub’a yüklediğim “aliustaoglu/firefox” adlı basit bir container’ı kullanacağım. Kaynak kodu ise aşağıdaki şekilde. Direk kullanabilir veya arzu ettiğiniz bir uygulamayı çalıştırabilirsiniz.

FROM ubuntu:14.04RUN apt-get updateRUN apt-get -y install firefoxCMD ["firefox"]

Windows için Docker GUI

Öncelikle “VcXsrv Windows X Server” uygulamasını yüklememiz gerekiyor. Aşağıdaki adresten indirebiliriz:

Standard Windows uygulaması gibi next next diyerek uygulamayı kuralım. Extra settings kısmına geldiğimizde ise “disable access control” dahil tüm seçenekleri seçmemiz gerekiyor. Aksi taktirde XWindows, Docker’dan gelen istekleri gözardı edecek.

Daha sonra bilgisayarımızın yerel ağdaki IP adresine ihtiyacımız var. Bunu ipconfig ya da bildiğiniz diğer metodlarla elde ettikten sonra aşağıdaki komutu çalıştırarak Docker ile ilk arayüz uygulamasını başlatabilirsiniz.

docker run — rm -it -e DISPLAY=192.168.1.68:0.0 aliustaoglu/firefox

Benim IP adresim 192.168.1.68 idi. Sizin adresiniz büyük ihtimalle başka bir adres olacaktır.

Resimde gördüğünüz Firefox Windows host üzerindeki Docker içerisinden çalışmakta:

Windows host üzerindeki Docker içinden çalışan Firefox

macOS için Docker GUI

macOS için ise xQuartz uygulamasını yüklememiz gerekiyor. HomeBrew kullanabilirsiniz:

brew cask install xQuartz

veya dmg dosyasını indirebilirsiniz:

xQuartz’ı yükledikten sonra çalıştırın ve ayarlar altından “Allow connections from network client” seçeneğini seçin.

Şimdi Mac’in çalıştığı yerel ağ üzerindeki IP adresine ihtiyacımız var. ifconfig komutu ile öğrenebilir veya kısaca aşağıdaki komutu çalıştırarak cevabı IP değişkenine atayabilirsiniz:

IP=$(ifconfig en0 | grep ‘inet ‘ | awk ‘{print $2}’)

Daha sonra aşağıdaki komutu çalıştırın:

xhost + $IP

Aşağıdaki gibi bir mesaj alacaksınız.

Şimdi Docker içerisinden GUI uygulamasını çalıştırabiliriz:

docker run — rm -e DISPLAY=$IP:0 -v /tmp/.X11-unix:/tmp/.X11-unix aliustaoglu/firefox

Linux için Docker GUI

X11 (X Windows System) Linux’un doğal ortamı olduğu için xQuartz ya da xLaunch gibi uygulamalara ihtiyaç duymayacağız. Aşağıdaki komutu direk çalıştırarak Linux üzerinde Docker içerisinden GUI uygulamasını başlatabiliriz.

docker run — rm -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix aliustaoglu/firefox

Cüneyt Aliustaoğlu

Written by

http://cuneyt.aliustaoglu.biz/

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade