docker

Docker Konteynerini Başka Bir Sunucuya Kopyalama/Taşıma

Docker kapsayıcıları küçük yazılım kutuları olduğundan, bunları bilgisayardan bilgisayara kolayca kopyalayıp taşıyabilirsiniz.  Yerel bilgisayarınızda bir Docker örneği üzerinde çalışmış ve onu daha güçlü bir sunucuya taşımaya karar vermiş olabilirsiniz.  Veya belki de özel kapsayıcınızı birden fazla bilgisayara dağıtmak, “kopyalayıp yapıştırmak” istiyorsunuz.  Bazen bir bulut bilişim sağlayıcısından memnun kalmayabilir ve farklı bir sağlayıcıya geçmek isteyebilirsiniz.  Burada size mevcut Docker kapsayıcı görüntünüzü ve veri birimlerinizi bir Linux ana bilgisayarından diğerine nasıl taşıyacağınızı gösteriyoruz.

 

Kapsayıcı Görüntüsünü Kaynak Sunucudan Kaydet

Sisteminizde çalışan mevcut Docker kapsayıcılarını listeleyerek başlayın.  Benim durumumda Nginx Docker konteynerimi yeni bir makineye aktarmak istiyorum:

docker ps
A terminal highlighting the available Docker containers for a system.

Üzerine kopyalamak istediğiniz kapsayıcıyı bulun ve örneği durdurun:

docker stop NAME_OF_INSTANCE
A terminal showing the output of the docker stop command.

Docker kapsayıcısı genel bir başlangıç ​​görüntüsünden oluşturulur.  Zamanla bu temel görüntüye kendi değişikliklerinizi eklersiniz.  Kapsayıcının içinde çalışan işlemler de kendi verilerini kaydedebilir veya başka değişiklikler yapabilir.  Tüm bunları korumak için kapsayıcınızın mevcut durumunu yeni bir görüntüye aktarın:

docker commit NAME_OF_INSTANCE mycontainerimage
A terminal showing the output of the docker commit command creating a new image from the currently running one.

Örnek şu anda çalışıyorsa, bu eylemin içeriği kaydedilirken onu duraklatacağını unutmayın.  Bu bir sorunsa, bunun yerine docker commit -p=false NAME_OF_INSTANCE mycontainerimage komutunu girerek bu duraklamayı önleyebilirsiniz.  Ancak kesinlikle gerekli olmadıkça bunu yapmayın.  Bu durumda tutarsız/eksik veri içeren bir görüntü oluşturma olasılığı artar.

Şimdi yeni işlenen Docker kapsayıcı görüntünüzü bir arşiv dosyasına kaydedin:

docker save -o mycontainerimage.tar mycontainerimage

Tercih ettiğiniz dosya aktarım yöntemini kullanın ve .tar dosyanızı Docker kapsayıcınızı taşımak istediğiniz ana bilgisayara kopyalayın.  Örneğin, aşağıdaki komut Nginx Docker resmimi scp kullanarak aktarıyor:

scp ./mycontainerimage.tar [email protected]:/home/ramces/

Konteynerinizden Docker Birimini Dışa Aktarma

Docker görüntüsünü kaydetmenin dezavantajlarından biri, konteynerinizin yanında kurduğunuz Docker aksesuarlarıyla birlikte gelmemesidir.  Bu, tüm ağ bağlama bağlantılarını ve kalıcı verilerinizi depolamak için oluşturduğunuz birimleri içerir.

Veri biriminizi düzgün bir şekilde dışa aktarmak için önce Git’i yerel makinenize yükleyin:

sudo apt install git

Docker için birim dışa aktarma betiğini indirmek için aşağıdaki komutu çalıştırın:

git clone https://github.com/ricardobranco777/docker-volumes.sh.git

Dışa aktarma komut dosyasının doğru izin bitlerine sahip olduğundan emin olun ve ardından bunu makinenizin “/usr/local/bin:” dizinine kopyalayın.

sudo chmod +x ./docker-volumes.sh/docker-volumes.sh
sudo cp ./docker-volumes.sh/docker-volumes.sh /usr/local/bin/

Komut dosyanızın düzgün çalışıp çalışmadığını test edin, ardından kapsayıcınızla ilgili tüm birimleri çıkarın:

docker-volumes.sh -h
docker-volumes.sh NAME_OF_INSTANCE save mycontainerimage-volume.tar
A terminal showing the process of backing up any associated data volumes for a Docker container.

Yeni arşivlenen Docker birim dosyalarınızı uzaktaki makinenize gönderin:

scp ./mycontainerimage-volume.tar [email protected]:/home/ramces/

Kapsayıcı Görüntüsünü Hedef Sunucuya Yükleme

Uzak ana makinenizde oturum açın, ardından uzak makinenizin Docker arka plan programına yüklemek için aşağıdaki komutu çalıştırın:

docker load -i ./mycontainerimage.tar

Docker kapsayıcı görüntünüzü kaynak makinenizdeki orijinal çalıştırma bayraklarıyla yeniden başlatmak için docker create komutunu kullanın.  Örneğin, Nginx Docker konteynerimde başlangıçta ana makinemin 8080 numaralı bağlantı noktasıyla eşlenen 80 numaralı bağlantı noktası vardı:

docker create --name my-nginx-container -p 8080:80 mycontainerimage

Yeni içe aktarılan Docker kapsayıcınızı çalıştırın:

docker start my-nginx-container

Sistemdeki tüm etkin kapsayıcıları listeleyerek içe aktarılan görüntünüzün düzgün çalıştığını doğrulayın:

docker ps
A terminal showing the same Docker container image running on a different system.

 

Docker Birimini Konteynerinize Aktarma

Bir .tar Docker birim dosyasını içe aktarmak için önce Git’i yeni ana makinenize indirin:

sudo apt install git

Orijinal sisteminizde olduğu gibi, docker-volume.sh yardımcı komut dosyasını indirin, izin bitlerini “yürüt” olarak ayarlayın ve ardından onu yeni makinenizin “/usr/local/bin” dizinine kopyalayın.

A terminal showing the process of obtaining and installing the Docker Volume script for backing up data associated with containers.

Dışa aktarılan görüntü dosyanızı kullanarak yeni bir Docker kapsayıcısı oluşturun:

docker create --name my-nginx-container -v myvol:/usr/share/nginx/html -p 8080:80 mycontainerimage

Yeni sisteminizin Docker arka plan programına yüklemek için docker-volume.sh betiğini orijinal .tar dosyanızla çalıştırın:

docker-volumes.sh my-nginx-container load mycontainerimage-volume.tar

Aşağıdaki komutu çalıştırarak yeni Docker kapsayıcınızı başlatın:

docker start my-nginx-container

Kapsayıcınızın dahili yapılandırma verilerine bakarak biriminizi düzgün şekilde yükleyip yüklemediğini test edin:

docker inspect -f '{{ .Mounts }}' my-nginx-container
A terminal highlighting the imported volume data to the new machine.

Dosya Oluşturmadan Görüntüyü Aktarın

Bazen mycontainerimage.tar.gz dosyası oluşturmayı atlamak isteyebilirsiniz.  Kapta çok fazla veri bulunduğundan yeterli disk alanınız olmayabilir.  Görüntüyü tek komutla hedef ana bilgisayara kaydedebilir, aktarabilir ve yükleyebilirsiniz.  Yukarıda tartışılan docker commit komutunu çalıştırdıktan sonra şunu kullanabilirsiniz:

docker save mycontainerimage | ssh [email protected] docker load

Artık yerleşik bir SSH istemcisine sahip olduğundan (PuTTY artık gerekli değil) Windows’tan da çalışmalıdır.

Durumunuza uygun docker create komutuyla devam edin.

A terminal showing the process of creating a new Docker container after moving its image through an SSH pipe.

Not: İçe aktarılan görüntüyü başlatmadan önce, daha önce kapsayıcınıza eklenmiş olan herhangi bir Docker birimini düzgün şekilde bağladığınızdan emin olun.

Son olarak, yeni içe aktarılan Docker kapsayıcınızı, docker start komutunu ve ardından kapsayıcınızın adını çalıştırarak başlatın.

A terminal showing the process of starting a new container and confirming that it's working properly.

Docker Dağıtımının Tamamını Taşımak için Docker Compose’u Kullanma

Compose eklentisi ile Docker, sunucunun temel yazılım yığını hakkında endişelenmeden karmaşık programlar oluşturmayı, yapılandırmayı ve çalıştırmayı mümkün kılar.  Bu da farklı Linux sistemlerinde tekrarlanabilir uygulama dağıtımları oluşturmanıza olanak tanır.

Mevcut Docker kurulumunuzu Docker Compose’a taşımaya başlamak için öncelikle eklentisinin şu anda sisteminizde olduğundan emin olun:

sudo apt install docker-compose-plugin docker-buildx-plugin

Docker Compose kurulumunuz için ana dizininizde yeni bir klasör oluşturun:

mkdir ~/my-docker-compose && cd ~/my-docker-compose

Uygulamanız için bir “docker-compose.yml” dosyası oluşturmak üzere favori metin düzenleyicinizi kullanın:

nano ./docker-compose.yml

Aşağıdaki kod bloğunu Compose dosyanızın içine yapıştırın ve ardından onu özel ihtiyaçlarınıza göre ayarlayın:

version: '3'

volumes:
  myvol: # Replace with the name of your imported volume.

services:
  nginx:
    image: mycontainerimage # Replace with the name of your imported Docker image.
    ports:
      - "8080:80"
    volumes:
      - myvol:/usr/share/nginx/html # Replace "myvol" with the name of your mounted image.

Yeni Compose dosyanızı kaydedin ve başlatmak için aşağıdaki komutu çalıştırın:

docker compose up -d

Son olarak Compose dağıtımınızın düzgün çalışıp çalışmadığını test edin.  Benim durumumda Nginx Docker kapsayıcımı bir web tarayıcısı açıp “localhost:8080” konumuna giderek test edeceğim.

A screenshot showing the imported Nginx Docker container working properly on its new machine host.

 

 

Yazının orijinalini buradan okuyabilirsiniz.