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’ı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.
docker run hello-world ile ilk testimi yapıyorum.
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 ps ile kontrol ettiğimde up durumda gözüküyor
Kurulumunu yaptığımız node’a ait ip adresi ve port numarasını tarayıcı üzerinden kontrol ediyoruz.
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.
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.
-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.
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.
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.
Oluşturduğumuz imajları sistemden temizliyoruz.
docker rmi -f Image_ID
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 containerized life cycle;