Bu aralar kaliteli bir iki kaynaktan düzenli bir şekilde Docker öğrenme sürecine girdim. İlgimi çeken veya ileride işime yarayacağını düşündüğüm bölümleri not etmeye karar verdim. Bu sayede mantığını belki daha iyi kavrayabilirim. Bu konuda ilk notum Docker in Action kaynağından geliyor. Henüz ilk sayfalarında olmama rağmen güzel ilerlediğini düşünüyorum. O halde nota direk geçeyim.
Belirli durumlarda container'ı read-only yani salt okunur olarak ayağa kaldırmak isteyebiliriz; fakat yine de container'ın filesystem'inde değişikliklerin yapılması gerekebilmektedir. Somur bir örnek için Docker tarafından sağlanan wordpress image'ini kaldıralım.
$ WP_CID=$(docker run -d --read-only wordpress:5.0)
$ docker inspect $WP_CID --format {{.State.Status}},{{.State.Running}}
exited,false
Container'ın çalışmadığını farkettiğimize göre, şimdi neden çalışmadığını anlamak için loglayalım.
$ docker logs $WP_CID
WordPress not found in /var/www/html - copying now...
Complete! WordPress has been successfully copied to /var/www/html
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
Wed Sep 7 10:38:15 2022 (1): Fatal Error Unable to create lock file: Bad file descriptor (9)
Container filesystem read-only olduğundan dolayı Apache web servisi gerekli değişikliklikleri yapamıyor. Bundan dolayı Apache'inin değiştirmek istediği dizini writeable yapabiliriz. Tabi bunu yaparken container read-only olarak kalacak. Bu yöntemin en iyi çözüm olduğunu söylemiyorum; fakat mevcut bilgimi göz önüne alırsak mevcut en iyi çözüm diyebilirim. Container'ı logladığımızda sorun olduğunu görüyoruz fakat bizim için hangi dizinde sorun olduğunu göstermiyor. Bunu anlamak için tamamen writeable bir Wordpress container'ı ayağa kaldıralım ve Apache'inin hangi dizinde değişiklik yaptığını tespit edelim.
$ WP_WRITEABLE_CID=$(docker run -d wordpress:5.0)
$ docker inspect $WP_WRITEABLE_CID --format {{.State.Status}},{{.State.Running}}
running,true
$ docker diff $WP_WRITEABLE_CID
C /run
C /run/apache2
A /run/apache2/apache2.pid
docker diff komutu ile hangi dizinde değişiklik yapıldığını tespit ettiğimize göre, şimdi bu dizini writeable yaparak tekrardan wordpress container'ını ayağa kaldıralım.
$ WP_FIXED_CID=$(docker run -d --read-only -v /run/apache2/ --tmpfs /tmp wordpress:5.0)
$ docker inspect $WP_FIXED_CID --format {{.State.Status}},{{.State.Running}}
running,true
Hosttan yani Ana Bilgisayardan mounted bir writeable volume kullanarak container'a ilgili dizin için write izni vermiş olduk.
İletişime geçmek, yorum bırakmak veya hatalarımı düzetlmek istersen mail atabilirsin.