Docker Giriş 101
Selam,
Uzun zaman sonra docker’ı tekrar kullanmaya başladım. Unutmuş olduğum komutlar vs. için hem kendime hem de benim gibi en baştan bakma ihtiyacı duyanlar için ufak bir giriş yazısı hazırladım.
Docker’in ne olduğundan, avantajlarından bahsetmeyeceğim. Direkt konuya gireceğim. Çok kısa özetlemek gerekirse docker’ı kullanma senaryomuz şu şekilde olabilir. Bir programı bilgisayarımda kullanmak istiyorum. Bu programları bilgisayarıma gerçekten! kurmak yerine bir docker image’ı ile bilgisayarıma yüklemiş gibi yapabilirim. Böylece istediğim programı bilgisayarıma indirmeye gerek duymadan istediğim sürece kullanabilirim. Ya da herhangi bir version güncellemesi vs. gibi durumlarda hemen değişiklik yapabilirim. Docker ‘ın hayatımı güzelleştiren bir durumundan bahsedeyim. Kısa zaman önce mongo db ile çalışmam gereken bir durum oldu. Docker üzerinden mongo’yu kurdum. çalışmamı tamamladım. Daha sonrasında mongo’yu bilgisayarıma da kurayım, ileride lazım olur diye düşündüm(nedense!) Ve 1 tam gün boyunca kuramadım :) Çeşitli hata, çakışmalarla karşılaştım ve en sonunda pes edip ihtiyaç halinde docker’ın nimetlerinden faydalanma kararı aldım. Bu özetten sonra kurulum ve en çok ihtiyacımız olan komutları inceleyebiliriz.
Öncelikle uygun Docker’ı bilgisayarımıza indirelim.
İndirilen dosyadan Docker Desktop’ı kuruyoruz.
Sonrasında artık docker’ımız için image’lar indirebiliriz. Docker için çeşitli image’ların tutulduğu bir depo var. Docker Hub üzerinden istediğimiz imaje’ları indirebiliriz. Bunun için Docker pull komutu yeterlidir. Örneğin Docker pull mongo
Pull etmek yerine Direkt Docker run methodunu da kullanabiliriz. Bu durumda mevcuttaki image’ler içerisinde arayacaktır. bulamazsa dockerhub’a bakacaktır.
Örnek olarak Mongo fiziki bilgisayarımıza kurmadan Docker image oluşturarak kullanıma hazır hale getirelim.
Öncelikle bilgisayarımızda Mongo olmadığı için image’ı indirmemiz gerekiyor.
İmage’ı indirdikten sonra onu çalıştırmak için bir container oluşturmanız gerekir. docker run komutu ile hub üzerinden aldığınız image’ı çalıştırabilirsiniz.
Aynı anda birden fazla image’ı çalıştırırsanız tekrar tekrar yeni bir container oluşturursunuz. Yani bir image üzerinden birden çok container oluşturabilirsiniz. Birden çok çalışma alanı oluşturabilirsiniz.
Mac terminal üzerinden
docker run -p 3docker run -p 27018:27017 -d mongo
komutunu çalıştırıyoruz.
Dikkat ettiyseniz -p sonrasında iki adet port bilgisi girdik. 27018:27017 Aslında şunu söylemiş oluyoruz. 28018 dediğimiz dış port yani sizin mongo’ya dışarıdan eriştiğiniz port localhost:27018 gibi. Diğeri ise Docker host içerisinde mongo’nun çalıştığı port.
Yukarıdaki komut mongo’nun son sürümünü verir ama siz özel bir sürüm indirmek isterseniz mongo:tag’lemesi yapabilirsiniz. tagleme örneği olarak Docker run mongo:5.0.6 diyebiliriz. tagleri docker hub üzerinden alabilirsiniz. Mongo için tag link. Tagleme örnek:
docker run -p 27018:27017 -d mongo:5.0.6
Yukarıdaki komut ile docker üzerinde mongol’nun son sürümünü indirdik ve bir container üzerinden bu image’ı çalıştırdık. docker -ps komutu ile çalışan containerları görebiliriz.
Bu oluşturduğumuz image’ın ID’sini ve başka detayları docker — help komutu ile terminal üzerinden de görebiliyoruz.
Evet şimdi artık mongoDB bilgisayarımızda kullanılabilir hale geldi. Herhangi bir mongoDB workbench’i ile bağlantımızı kurabiliriz. Ben bunun için Robo 3T kullandım.
Bu image’ı sildiğimiz zaman bilgisayarda mongo ile ilgili bir şey kalmamış olacaktır.
docker’ın arkada çalışmasını istiyorsanız -d ekini kullanmalısınız. Böylece container arka tarafta çalışacaktır. Bu arkada çalışan docker container’ın loglarını ise docker container logs containerID ile arkada çalışan container’ın loglarını görebilirsiniz.
Diğer bir konu ise docker containerlerının stateless olmasıdır. Yani bir container üzerindeki db’yi aktif edip içeriye veri yazdıktan sonra container’ı stop ederseniz o container’ı tekrar oluşturduğunuzda içerideki veriyi göremezsiniz. Çünkü container içerisindeki mogodb ye kaydetmiş olursunuz verileri. Ve container ortadan kalktığı anda bu veriler de yok olur. Bu durumu ortadan kaldırmak için volume kullanılır. Bu işi yaparken kaydedilecek verilerinizi docker host üzerindeki bir adres belirtilerek yazılır. -v komutu bu işi yapar. Yani docker host üzerinde belirtilen bir dosyaya yazar.
docker run -v /opt/data:/data/db /opt/data
klasörünü docker workbench’i üzerinden görebilirsiniz.
Yukarıdaki işlemleri adım adım yaptığınızda istediğiniz bir programı bilgisayara indirmeden docker üzerinden koşabilirsiniz.
Bu yazıyı yazarken Gökhan Kandemir’in youtube videosundan baya destek aldım. Kendisine ellerine sağlık deyip video linkini de aşağıya ekliyorum. Dileyen detaylı anlatımları buradan takip edebilir.
Bug’sız günler :)