Uygulama yazılımları için konteyner tabanlı uygulama havuzlarının geliştirilmesi
Development of container-based application pools for application programs
Yazar: AHMET ÖZCAN
Danışman: DOÇ. DR. ATİLLA ERGÜZEN
Kırıkkale Üniversitesi / Fen Bilimleri Enstitüsü / Bilgisayar Mühendisliği Ana Bilim Dalı
Derece: Doktora, 2022
Konu: Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control
Dizin: Docker = Docker ; Konteyner teknolojisi = Container technology ; Mikro hizmetler mimarisi = Microservices architecture ; Robot sistemleri = Robot systems ; Sanallaştırma = Virtualization

Özet:
Günümüzde internet herkes tarafından ulaşılabilir ve yaygın hale gelmiştir. Hızlı internetin yaygınlaşması ile eğitim kurumları da dönüşüm sürecine girmiş ve bazı eğitim içeriklerini çevrimiçi sunmaya başlamıştır. Önceleri alternatif bir öğretim modeli olarak internet üzerinden sunulan uzaktan öğretim sistemi, Covid19 salgınının yaşandığı günümüzde bir zorunluluk haline gelmiştir. Salgın döneminde tüm eğitim kurumları sınıf içi eğitimlerini uzaktan eğitim modeline dönüştürmüştür. Teknolojik eğitimlerde olduğu gibi mühendislik eğitimi müfredatında teorik ve uygulamalı eğitimler bulunmaktadır.   Dersliklerde verilen teorik eğitimler laboratuvarlarda yapılan uygulamalarla pekiştirilmekte ve öğrencilerin deneyim kazanması sağlanmaktadır. Pandemi döneminde uzaktan eğitime katılmak zorunda kalan öğrenciler uygulamalı eğitimlerden uzak kalmaktadır. 
Uzaktan öğretim modelinde öğrenciler teorik dersleri sanal sınıflarda, uygulamalı laboratuvar eğitimlerini de sanal laboratuvarlarda yapılabilmektedir.  Yazılım mühendisliği için oluşturulan sanallaştırma tabanlı laboratuvarlar uzun yıllardır kullanılmaktadır. Sanallaştırma teknolojisi, fiziksel bir sunucuya ait kaynakların mantıksal olarak paylaştırılması esasına dayanır. Bu teknolojide her sanal makine için bir sunucu örneği kopyalama zorunluluğu bulunmaktadır. Sunucu örnekleri, gerçek bir makine gibi eksiksiz bir işletim sistemi ve kütüphanelerle birlikte mantıksal olarak kendilerine ayrılan donanım kaynaklarını tüketmektedir. Sanal makine çalışmakta olduğu sürece kendisine ayrılan kaynaklar başka bir sanal makine tarafından kullanılamaz. Bu durum sanallaştırma yapısını kullanan tüm kurumlar için önemli bir problemdir. Başta bulut hizmet sağlayıcıları olmak üzere tüm teknoloji şirketleri bu soruna çözüm için yenilikçi ve ekonomik yöntemler aramaktadır. 
Son yıllarda geliştirilen konteyner teknolojisi bu sorunun çözümü olarak görülmektedir. Konteyner teknolojisi, aynı işletim sistemi çekirdeğini kullanan birbirinden yalıtılmış uygulamalar olarak ifade edilebilir. Bir yazılım işletim sistemi tarafından çalıştırıldığında sistem kaynaklarının bir bölümünü kullanmaktadır, bu yazılım işletim sisteminin kullandığı bölümü ile birlikte bir paket haline getirildiğinde konteyner olarak tanımlanmaktadır. Bu sayede her yazılım ihtiyaç duyduğu kadar bir büyüklük ile paketlenecektir. Bu pakete konteyner adı verilmektedir. Bu teknolojide her uygulamanın kendine özel bağımlılıkları, kütüphaneleri ve dosyaları mevcuttur. Aynı fiziksel makinede birbirinden izole birçok uygulamayı, hatta aynı uygulamanın farklı sürümlerini çok düşük sistem kaynaklarıyla çalıştırabilmek mümkündür. Özetle; Bir yazılımın çalıştırılabilşmesi için, içerisinde yüklü bir işletim sistemi olan bir bilgisayara ihtiyaç vardır. Bu işlem aslında oldukça maliyetlidir, konteyner teknolojisi sayesinde özellikle işletimin sisteminin kendisine yetecek kadar olan özellikleri ve sınırlı sistem kaynakları kullanılarak maliyet çok düşürülmektedir.
Bu çalışmada, uzaktan öğretim sistemi için konteyner tabanlı sanallaştırma alternatifi bir platform oluşturulmuştur. Yazılım geliştirme eğitimlerinde kullanılmak üzere konteyner haline getirilmiş yazılım geliştirme ortamlarının bu platform üzerinden uzaktan eğitim öğrencilerinin kullanımına sunulması amaçlanmıştır. .Net Core 5.0 altyapısıyla çoklu platform uyumluluğu sağlanarak, MGD katmanlı modeliyle geliştirilen platform Docker konteynerlerini kullanmaktadır. Çalışmada test amaçlı yaygın kullanılan yazılım dillerini destekleyen ve eklentileriyle yetenekleri artırılabilen Visual Studio Code yazılım geliştirme editörü konteyneri kullanılmıştır. Dünyada büyük bir pandemi yaşanmaktadır. Pandemi döneminde öğrenciler okullardan uzak kalarak uzaktan eğitim faaliyetlerine katılmaktadır. Çalışma Uzaktan eğitim gören öğrenciler ve yazılım geliştirme laboratuvarına ihtiyaç duyan öğrenciler için önemlidir. Oluşturulacak benzeri laboratuvarlar pandemi döneminde öğrencilere büyük kolaylık sağlayacaktır.

Abstract:
Today, the Internet is accessible and widely used by everyone. With the spread of high-speed Internet, educational institutions have also made the change and started to offer some educational content online. Distance education, which used to be offered over the Internet as an alternative model of instruction, has now become a necessity in light of the Covid19 epidemic. During the epidemic, all educational institutions converted their classroom training to a distance learning model. As in technical education, there is theoretical and applied training in engineering education. Theoretical training in classrooms is reinforced by practice in laboratories, and students gain experience. Students who are required to attend distance learning during the pandemic period stay away from applied training.
In the distance learning model, students can take theoretical classes in virtual classrooms and hands-on lab exercises in virtual labs. Virtualization-based labs created for software engineering have been used for many years. Virtualization technology is based on logical allocation of resources belonging to a physical server. In this technology, there is an obligation to copy one server instance for each virtual machine. Like a real computer, the server instances consume the hardware resources logically allocated to them, as well as a complete operating system and libraries. As long as the virtual machine is running, the resources allocated to it cannot be used by another virtual machine. This is an important problem for all institutions that use a virtualization structure. All technology companies, especially cloud service providers, are looking for innovative and economical methods to solve this problem.
Container technology, developed in recent years, is seen as a solution to this problem. Container technology can be expressed as applications that are isolated from each other and use the same operating system kernel. When a software is executed by the operating system, it uses some of the system resources. This software is defined as a container if it is packaged with the part of the operating system that it uses. In this way, any software is packaged with as much size as it needs. This package is called a container. In this technology, each application has its own dependencies, libraries and files. It is possible to run many isolated applications, even different versions of the same application, on the same physical machine with very low system resources. To summarize: In order for software to run, a computer with an operating system installed on it is required. This process is actually quite expensive. However, thanks to container technology, the costs are significantly reduced, especially by using the functions that are sufficient for the operating system itself and the limited system resources.
In this study, an alternative virtualization platform based on containers was created for the distance learning system. Containerized software development environments for use in software development training are to be made available to distance learning students through this platform. The platform, developed with the MVC layered model, uses Docker containers to provide cross-platform compatibility with the .Net Core 5.0 infrastructure. The study used the Visual Studio Code software development editor container, which supports common software languages for testing purposes and whose capabilities can be extended through plug-ins. There is a major pandemic in the world. During the pandemic period, students stay away from schools and participate in distance learning activities. The work is important for distance learning students and students who need a software development lab. Similar labs to be established will be of great benefit to students during the pandemic period.