1. Ana Sayfa
  2. Container
  3. Docker Container’a RDP ile Nasıl Bağlanabiliriz? – Bölüm 2 (Azure Container Instance)

Docker Container’a RDP ile Nasıl Bağlanabiliriz? – Bölüm 2 (Azure Container Instance)

020220_1323_DockerConta3.png

İlk bölümde Ubuntu imajı kullanarak bir oluşturmuş ve masaüstü ortamı kurarak RDP ile container‘a uzak masaüstü bağlantısı yapmıştık. Bunun için de gerekli komutları çalıştırmak için container konsoluna bağlanmıştık. Peki burada kullandığımız komutları otomatik hale getirebilir miyiz? Cevap: Dockerfile.

Dockerfile’a hangi container imajını kullanacağımızı belirterek başlıyorum.

FROM ubuntu:latest

İlk komut olarak da paket listeleri ve paketleri güncelleyelim.

RUN apt-get update -y && apt-get upgrade -y

İlk bölümdeki Xfce kurulumunda saati dilimi ayarları için bölge ve il seçimi yapmamı istemişti, bu işlemi de otomatikleştirmemiz gerekiyor. Bunun için de aşağıdaki komutları dockerfile’a ekliyorum.

ENV TZ=Europe/Istanbul

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Saat dilimini de belirttikten sonra Xfce masaüstü ortamı, ve sudo paketlerini kurabiliriz.

RUN apt-get install -y \

xfce4 \

xrdp \

sudo

Paket kurulumlarını tamamladıktan sonra da kullanıcı oluşturma ve sudo grubuna ekleme işlemlerini için gerekli komutları yazıyorum.

RUN useradd -ms /bin/bash -p “$(openssl passwd -1 P@ssword1)” -u 1000 mert

RUN usermod -aG sudo mert

Xrdp’ye kullanıcı session’ı başladığı zaman hangi masaüstü ortamını kullanacağını belirtmek için de

RUN echo xfce4-session >~/.xsession

komutunu ekliyorum.

Buraya kadar zaten ilk bölümdeki bahsettiğim komutları sırasıyla yazmak dışında çok farklı bir işlem yok. Xrdp servisini başlatan komutu ekledikten sonra container imajımız hazır olacak ancak küçük bir sorunumuz var. İlk bölümde container konsoluna bağlandığım için container çalışır haldeydi. Ancak bu container’ı durdurup konsola bağlanmadan tekrar çalıştırırsak, container’ı çalışır halde tutacak bir komut/servis olmadığı için başladıktan çok kısa bir süre sonra duracak. Bunu engellemek için verilen dosyanın sonunu okumak için kullanılan tail komutundan yararlanacağım; -f parametresi ile dosyanın sonunda yeni bir veri olup olmadığı takip etmesini, bunu da /dev/null dosyası üzerinde yapmasını belirterek basit bir döngü gibi çalışmasını sağlayabilirim. Burada bahsettiği /dev/null dosyası üzerine yazılanları anında silen özel bir dosya.

Container başladığında çalışmasını istediğim 2 komut var, ikisini birden entrypoint olarak tanımlamak için bunları içeren bir startup.sh dosyası hazırlıyorum:

service xrdp start

tail -f /dev/null

Bu başlangıç script dosyasını container içerisine taşıyorum.

COPY startup.sh /scripts/startup.sh

Bu dosyayı da çalıştırılabilir bir dosya haline getiriyorum.

RUN [“chmod”, “+x”, “/scripts/startup.sh”]

RDP portunu açıyorum

EXPOSE 3389

Başlangıçta yukarıda belirttiğim script dosyasını çalıştırması için entrypoint olarak ekliyorum.

ENTRYPOINT [ “/scripts/startup.sh”]

Dockerfile ve startup.sh dosyalarına buradan erişebilirsiniz.

Sırada container imajını hazırlamaya geldi. Bu kez de imajı Container Instance (ACI) üzerinde çalıştırarak deneyelim.

Resim-1‘de göreceğiniz gibi dockerfile ve startup.sh dosyalarının olduğu klasörde build -t mshowto.azurecr.io/mshowto-rdp . komutunu çalıştırıyorum; mshowto adında bir olduğu için container imajına mshowto.azurecr.io/mshowto-rdp ismini verdim. (ACR) ile ilgili daha detaylı bilgi için buraya bakabilirsiniz.

Resim-1

İmaj hazırlandıktan sonra ACR’a login olmak için docker login mshowto.azurecr.io komutunu çalıştırıyorum (Resim-2). Daha önceden login olduğum için mevcut credential’ı kullanarak login olabildim. Son olarak da imajı ACR’a push ediyorum ve Azure Portal’a geçiyorum.

Resim-2

NOT: Devam etmeden önce Onur Yüksektepeli‘nin Azure Container Registry’de İmaj Test Etme yazısına göz atabilirsiniz.

ACI üzerindeki repository’ye baktığımızda mshowto-rdp imajını görebiliyoruz (Resim-3). Bu imajdan bir instance oluşturup Azure üzerinde container’ın çalışmasını sağlayabiliriz. Container’a bağlanacağım için bir public IP istediğimi ve RDP portu olan 3389’u açmak istediğimi de belirtiyorum.

Resim-3

Container çalışmaya başladıktan sonra IP adres bilgisini ilgili instance’ın (ilgili resource group üzerinden giderek de bulabilirsiniz) overview ekranından alıyorum (Resim-4).

Resim-4

Container’ın IP adresine mstsc kullanarak (bu kez varsayılan port) bağlanmayı deniyorum (Resim-5).

Resim-5

Kullanıcı adı ve şifre girdikten sonra container üzerinde çalışan masaüstü ortamını kullanmaya başlayabilirsiniz (Resim-6).

Resim-6

Bu konuyla ilgili sorularınızı http://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

https://www.xfce.org/

http://www.xrdp.org/

https://www.mshowto.org/azure-uzerinde-calisan-linux-vme-rdp-ile-nasil-baglanabiliriz.html

https://www.mshowto.org/docker-containera-rdp-ile-nasil-baglanabiliriz-bolum-1.html

https://askubuntu.com/questions/909277/avoiding-user-interaction-with-tzdata-when-installing-certbot-in-a-docker-contai

https://stackoverflow.com/questions/54121031/multiple-commands-on-docker-entrypoint

https://github.com/mshowto/Containers/tree/master/mshowto-rdp 

TAGs: Docker, , Container, , Ubuntu, , Protocol, RDP, xrdp, , xfce, Azure Container Registry, ACR, , ACI, Azure

Yorum Yap

Yazar Hakkında

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi'nde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi'nde tamamlamıştır. Yazılım dünyasına üniversitenin ilk yıllarında aldığı QBasic ile başlayan Mert, .NET ve SQL Server gibi Microsoft teknolojileri ile devam etmiş; yüksek lisans tezini ise Linux konusunda yapmıştır. Netaş ve Ziraat Teknoloji gibi sektörün önde gelen firmalarında C#, .NET, SQL Server, Cisco Contact Center ürünleri ve Linux üzerine çalışmış, bir çok firmaya da bu konularda danışmanlık vermiştir.

Yorum Yap