Container teknolojileri ile uğraşırken genellikle Docker kullanılıyor. Docker hakkında hazırlanmış çoğu doküman gibi, internetteki örnekler de genellikle komut satırı üzerinden çalışmayı gerektiriyor. Ancak Docker’ı kullananlar genellikle komut satırından her işini yapmak isteyenlerle sınırlı değil. Bazen komut satırına aşina olmayanlar, bazen de aşina olsa dahi bir arayüzden kontrol etmek isteyenler çıkabiliyor. Bunların dışında, hangi kullanıcının Docker üzerinde neler yapabileceği, nelerin çalıştığının görsel olarak izlenebileceği, kolay bir şekilde açma-kapama işleminin yapılabileceği ve birden çok Docker yüklü makinenin tek yerden yönetilebileceği bir sistem de çoğu insanın ihtiyacı durumunda. Bu yazıda, bu ihtiyaçlara cevap veren, Docker için hazırlanan bir web arayüzü olan Portainer’ın kurulumundan bahsedeceğiz.

Portainer Nedir?

Ekip içerisinde, farklı ekiplerde, farklı departmanlarda, çalışan uygulamalara erişmesi gereken kişiler olabilir. Bazen de, bir yazılım geliştiriciye tek bir tıkla bir Redis, PostgreSQL, MySQL, Kafka, Nginx gibi uygulamaları ayağa kaldırma imkanı sağlamak isteyebiliriz. Bunları yaparken de, hangi ekibin neler yapabileceğini, bazen de kişiye özel yetkilendirme yapmamız gerekebilir. Bunların bir kısmını komut satırından yapabilmemiz mümkün olsa da, varsayılan kurulumda tamamını bu kolaylıkta sağlamamız oldukça zor oluyor. Ayrıca örneğin Docker CE için normal bir kurulum yaptığınızda kullanıcı bazlı veya rol bazlı bir yetkilendirme gelmiyor. Yani bir kullanıcıya docker komutunu çalıştıracak ve çıktı alacak yetkiyi verdiğimizde, bu yetkiyle neler yapabileceğine dair bir sınır koyamıyoruz. Bu da çoğu sistemde kullanıcının root kullanıcısıyla aynı yetkilere sahip olmasından farksız hale geliyor.

Portainer ile, Docker kullanması gereken ancak komut satırına erişimi olmayan veya komut satırında çalışması gerekli olmayan kullanıcılara bir web arayüzü sağlayabilirsiniz. İster kendi ekibiniz içerisinde, ister sizden bağımsız olsa da, sürekli sizden farklı servis ve uygulamaların kurulmasını isteyen ekiplere self servis hizmet imkanı sunabileceğiniz bir yapı olarak Portainer’ı kullanmak mümkün. Bunların yanında, açılan containerların RAM ve CPU bilgilerinin canlı takibi, loglarına erişim, onları durdurma/yeniden başlatma/silme gibi lifecycle yönetimleri dahil olmak üzere, Docker komut satırı arayüzüden yapılabilen neredeyse her şeyi yapmanızı sağlayan bir arayüz olarak Portainer’ı kullanabilirsiniz. Detaylı bilgi, özellikleri ve ayrıntıları için web sitesini inceleyebilirsiniz.

Portainer Kurulumu

Portainer’ı kurmak için, ona kendi verilerini tutabileceği bir volume sağlamamız gerekiyor. Sağlamadan çalıştırırsak, çalışan container herhangi bir sebepten silindiğinde kullanıcı hesapları gibi önemli ayarlar ve veriler kaybolacak, kurulum sıfırlanacaktır. Bunu önlemek için, bahsettiğimiz volume’u oluşturalım(isterseniz bind mount da kullanabilirsiniz):

docker volume create portainer_data

Volume oluştuktan sonra, Portainer’ı başlatabiliriz:

docker run --name portainer -d -p 8000:8000 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Ardından, sunucunun/bilgisayarın 9000 portuna tarayıcıdan bağlandığımızda karşımıza Portainer parola belirleme ekranı gelecektir:

<figcaption>Portainer kurulumu admin parola belirleme ekranı</figcaption></figure>

Burda yönetici kullanıcı için kullanıcı adı ve parola belirleyip Create User butonunu kullanmak yeterli olacaktır. Tahmin edeceğiniz gibi, oluşturduğumuz kullanıcı Portainer üzerindeki en yetkili kullanıcı olacak.

Not: Container çalıştıktan sonra 5 dakika içerisinde bir admin kullanıcı oluşturmazsanız, Portainer otomatik olarak kapanacaktır. Öyle bir durumda docker start portainer yazarak tekrar başlatabilirsiniz.

Kullanıcı oluştuktan sonra, Portainer bize yöneteceği Docker yüklü makineyi/makineleri soracak. Bu ekranda Local yazılı kutuyu seçerek Connect butonuna tıklamamız yeterli.

<figcaption>Portainer kurulumu local ve remote Docker host seçim ekranı</figcaption></figure>

Bu yapılan seçim ile Portainer’a, bulunduğu makinede Docker yüklü olduğunu ve bağlanıp onu yönetmesini istediğimizi söyledik. Her şey yolunda gittiyse karşılama ekranı gelmiş olmalı:

<figcaption>Portainer kurulum sonrası karşılama ekranı</figcaption></figure>

İnternet Erişimi Olmadan Portainer Kurulumu

Birçok kurumsal ortamda sunucuların internete doğrudan erişimi olmayabiliyor. Bazılarında ise erişim olmasına rağmen araya girebilen güvenlik incelemeleri, Docker’ın gidip Portainer imajını indirmesini engelleyebiliyor. Sadece internet hızı bile, bazı ortamlara kurulumu çok güç bir hale getirebiliyor. Böyle durumlarda, imajı internet erişimi olan rahat ettiğimiz bir ağda, bir bilgisayara indirip, sunucuya atmak gerekiyor. Böyle bir durumda, yukarıdaki komutları uygulamadan önce, Docker imajını dosya olarak kaydetmek yazısına başvurabilirsiniz.

Yazıda yer aldığı gibi imajı indirip esas kurulum yapmak istediğiniz makineye kopyaladıktan sonra, Docker İmaj Dosyalarını Yüklemek ve Kullanmak yazısını uygulayabilirsiniz.

Bu iki işlemi yaptıktan sonra bir önceki başlıkta yer alan kurulum komutlarını uygulayabilirsiniz.

Kurulum Komutları Nasıl Çalışıyor?

Bu başlık, yaptığımız işlemler hakkında bilgi edinmek isteyenler için. Önceki başlıkta geldiğimiz ekranın ardından kullanmaya başlayabilirsiniz. Şimdi, yazdığımız komutları ve ilerlediğimiz kurulum ekranını inceleyeceğiz.

Docker ile oluşturduğumuz volume, Portainer’ın verilerini saklayacağı yeri söylememize yardımcı oldu. Bu volume oluştuktan sonra kurulumda kullandık. Böylece artık Portainer’ı güncellemek, port değişikliği yapmak gibi sebeplerden dolayı containerı silmek ve tekrar oluşturmak zorunda kalırsak verilerimizin silinmemesi için bir adım atmış olduk.

Portainer’ı çalıştırırken -v parametresi ile volume kullanmak istediğimizi söyledik. Oluşturduğumuz volume’u, container içindeki /data dizinine bağladık. Artık container silinse bile, bu volume’a erişebilen başka bir container verilere ulaşabilecek.

Dışarıya 8000 ve 9000 portlarını açtık. Bu örnek için 8000 portu zorunlu değildi. 9000 ise bizim de bağlandığımız web arayüzünü sağlayan port olduğu için, açmayı tercih ettik. Kendi ihtiyaçlarınıza göre özelleştirebilirsiniz.

Kullandığımız diğer -v parametresi ise, /var/run/docker.sock dosyasını container içerisine mount etti. Bu şekilde Portainer, bu dosya (aslında bir Unix socket) ile Docker’a komple bir bağlantı elde etti. Bu bağlantı ile Docker üzerinde istediği bütün yönetimi sağlayabilir.

Portainer Containerının Kapanınca Otomatik Tekrar Başlaması

Portainer’ın bilgisayar açılırken Docker ile birlikte otomatik başlaması, herhangi bir sebepten dolayı kapandığında hemen tekrar başlatılması gibi amaçlara göre ayarlamamız gerekebiliyor. Böyle durumlarda Docker’ın restart seçenekleri arasındaki always‘i kullanmak yeterli oluyor. Containerı silmeden bunu ayarlayabilmek için:

docker container update --restart always portainer

Sonuç

Bu yazıda Portainer’ın neden kullanılabileceği için bazı örnekler vererek, Docker ile kurulumunu yaptık. Sonrasında kurulum sırasında yazdığımız parametreleri inceledik ve hangi durumlarda containerin otomatik restart edileceğini söyledik.