Bu bölümde Dockerfile konusunda biraz daha ayrıntılı bir örnek yapacağız. Apache web sunucusu Ubuntu işletim sistemine kurup, Apache sunucusunu başlatacağız. Ayrıca, bu bölümde docker üzerindeki Port kavramını öğreneceğiz.
Docker Hub üzerinde istediğimiz çoğu image’i bulabiliriz. Apache image‘i de var. Ancak Dockerfile kodlarını ve mantığı anlamak için sıfırdan bir işletim sistemi içinde Apache kurulumu yapalım. Dockerfile:
1 2 3 4 5 6 7 8 |
FROM ubuntu RUN apt-get update RUN apt-get install -y apache2 RUN apt-get install -y apache2-utils RUN apt-get clean COPY . /var/www/html EXPOSE 80 CMD ["apache2ctl", "-D", "FOREGROUND"] |
- Öncelikle Ubuntu base image’ini kullanacağımızı söyledik.
- Ardından, Ubuntu sistemindeki tüm paketleri güncellemek için RUN komutunu kullandık.
- Ardından apache2 kurulumuna geçtik.
- Yardımcı apache2 paketlerini kurduk.
- COPY komutu ile klasör içindeki dosyaları Ubuntu içindeki “var/www/html” klasörüne gönderdik. Ben basit bir index.html dosyası yarattım. (Google, Hello html yazıp bu dosyayı oluşturtabilirsiniz.)
- EXPOSE komutu, container’daki Apache’nin 80 numaralı bağlantı noktasını Docker ana bilgisayarına göstermek için kullanılır.
- apache2’yi arka planda çalıştırmak için CMD komutu kullanılır.
Burada yazdığınız tüm komutlar Ubuntu üzerinde test edilebilir. (İleride kurulum veya kurulum dizinleri değişebilir, dikkatli olmak lazım)
Aynı klasörde build işlemine geçebiliriz.
1 |
(base) erdincuzun@... 02.WebSunucusu % docker build -t="myfirstwebserver" . |
Image’miz hazır. -t ile image’imize ulaşabileceğimiz bir isimde verdik. Şimdi geldik çalıştırmaya:
1 2 |
(base) erdincuzun@... 02.WebSunucusu % docker run -d -p 81:80 myfirstwebserver 6a480c7b6f9e9c5cfc286ad9c12ea50f... |
-d sunucuyu arkaplanda çalıştırır. İsterseniz docker attach 61480.. yazıp sunucuya bağlanabilirsiniz. (Bazen test amaçlı gerekebiliyor.)
Container’ın port numarası 80’dir. Dockerfile’deki EXPOSE bölümünü hatırlayalım. Ancak, Docker dışından 81 port ayarı yapılmıştır. Tarayıcı üzerinden test edersek “localhost:81” yazmamız gerekecektir. Ama Container içinde 80 olduğunu unutmayalım. -p sayesinde container içi ve dışı bağlantı kurulmuş olur. (Bu arada her ikisini 80:80 girebilirsiniz. Ben farklı olabileceğini göstermek için 81 girdim.)
Test sonunda index.html dosyasının içeriğini görüyorsak tebrikler…