DevOps

Basic Containerized Docker Applications

Merhaba

Bu makalede vagrant file ile vagrant cloud üzerinden download edip kurduğumuz bir ubuntu makinesinin üzerine docker engine kuracağız ve containerları ayağa kaldıracağız.

1-Container’da çalışacak uygulama basit bir nginx
2-Container’da çalışacak uygulama bir web sayfası.

-Web sayfasının Dockerfile kısmını beraber hazırlayacak ve build edeceğiz.

Öncelikle vagrant kullanabilmeniz için sisteminizde vagrant destekleyen bir hypervisor kurulu olması gerekiyor. Ben Oracle VM VirtualBox kullanıyorum. Detay için bu > linkten bakabilirsiniz.

Kullanmış olduğum Vagrantfile link olarak ekliyorum.

vagrantfile

Vagrantfile’ın olduğu dizine gelerek vagrant up komutunu çalıştırıyorum ve ubuntu makinem + docker engine kurulmaya başlıyor.

Kurulum tamamlandığında vagrant ssh komutu ve sudo -i ile makineme bağlanıyorum.

Docker’ın kurulduğuna dair systemctl status docker komut ile kontrol ettiğimde başarılı bir şekilde kurulmuş olduğunu ve servisin ayakta olduğunu görüyoruz.

systemctl status docker

docker run hello-world ile ilk testimi yapıyorum.

docker run hello-world

Nginx Kurulumu

docker run –name onuromertunc -d -p 9080:80 nginx Komutu ile onuromertunc isimli bir container içerisinde 9080 portundan hizmet verecek bir nginx uygulamasını oluşturdum. Detay için > dockerhub-nginx

docker run

docker ps ile kontrol ettiğimde up durumda gözüküyor

docker ps

Kurulumunu yaptığımız node’a ait ip adresi ve port numarasını tarayıcı üzerinden kontrol ediyoruz.

welcome to nginx

Aynı şekilde docker inspect onuromertunc komutu ile containera ait ip adresi üzerinden curl komutu ile ngnix web servisini çağırabilirsiniz. Curl bunu txt formatında getirecektir.

curl

Static Web Site Containerized – Dockerfile > Docker Image > Docker Run1-Dockerfile

Oluşturacağımız Dockerfile için bir dizin oluşturuyoruz. Ve içerisine girip vim editör ile bir Dockerfile
oluşturacağız.
mkdir images
cd /images
vim Dockerfile
komutunu yazdıktan sonra Dockerfile içerisine aşağıdaki komutları copy-paste yapıyoruz.
Insert ettikten sonra vim editörden :wq yazarak kaydedip çıkıyoruz.

FROM ubuntu:latest AS BUILD_IMAGE
RUN apt update && apt install wget unzip -y
RUN wget https://www.tooplate.com/zip-templates/2128_tween_agency.zip
RUN unzip 2128_tween_agency.zip && cd 2128_tween_agency && tar -czf tween.tgz * && mv tween.tgz /root/tween.tgz

FROM ubuntu:latest
LABEL "project"="Marketing"
ENV DEBIAN_FRONTEND=noninteractive

RUN apt update && apt install apache2 git wget -y
COPY --from=BUILD_IMAGE /root/tween.tgz /var/www/html/
RUN cd /var/www/html/ && tar xzf tween.tgz
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
VOLUME /var/log/apache2
WORKDIR /var/www/html/
EXPOSE 80

cat Dockerfile diyerek kontrol ediyorum.

Dockerfile

-Base imaj olarak ubuntu kullanıyoruz ve önce package manager’ları update ediyoruz
-sonra tooplate.com isimi siteden bir hazır web sitesi indiriyoruz.
-web sitesini unzip yaparak /root dizinine kopyalıyoruz.
-apache server kurulumunu yapıyoruz.
-Son olarak expose ile 80 portundan hizmet vermesini sağlıyoruz.

Şu aşamada sadece Dockerfile oluşturduk. Bir sonra ki aşamada ise docker build ile bu Dockerfile dosyasını bir imaj haline getireceğiz.

2-Build Image

docker build -t websiteimg . 
Komutu ile Dockerfile > Docker Image olarak build ediyorum. Ve kontrol için docker images yazıyorum.

docker build

3-Docker Run
docker run -P -d websiteimg
Komutu ile az önce oluşturmuş olduğumuz docker imajını çalıştırdık 80 portundan hizmet veriyor.

docker run

Tarayıcı üzerinden ip adresi+port numarası ile giriş yaptığımızda web sitesi başarılı bir şekilde geldi.

CLEAN UP

Oluşturduğumuz containerları durduruyoruz.

docker stop websiteimg image_name ile sildikten sonra docker ps -a komutu ile çalışan containerları kontrol ediyorum ve diğer ngnix çalıştıran containerıda docker stop nginx onuromertunc komutu ile durduruyorum. tekrar kontrol ettiğimde tüm çalışan containerlar Exited durumda.

docker stop


Oluşturduğumuz imajları sistemden temizliyoruz.

docker rmi -f Image_ID

docker images

Temel anlamda aşağıdaki görüntüde olduğu gibi, 1 node-host üzerine docker engine kurarak ubuntu base imaj üzerine uygulamamızı containerda ayağa kaldırdık. Sol kısımda ki görsel de klasik mimaride ise 1 uygulama için 1 sunucu + o uygulamanın dependencies paketlerinin kurulması gerekecekti. 1 uygulama için 1 sunucunun dedicate olması gerekiyor anlamına geliyordu. Sağ kısımda bulunan görselde ise 1 host üzerine container kurup ligthweight linux ile uygulama dependencies paketleriyle birlikte ayağa kaldırdık.

docker architecture

Docker containerized life cycle;

Docker containerized life cycle

Kaynak