2017-01-26 57 views
5

Docker-compose ile oluşturulmuş bir uygulamayı dağıtmaya çalışıyorum, ancak tamamen yanlış yöne gidiyorum gibi geliyor.Docker oluşturma kapsayıcılarını dağıtma

  1. Her şey yerel olarak çalışıyor - docker-compose up, uygulamamı uygun ağlarla ve ana bilgisayarlarla birlikte getiriyor.
  2. Farklı bir .env dosyasını kullanarak, bir üretim makinesinde aynı kapsayıcı ve ağ yapılandırmasını çalıştırabilmek istiyorum. Ben oraya gittiklerinde yine docker-compose up çalıştırmak edebilmek umuyordum, bu noktada

    docker save [web image] [db image] > containers.tar 
    zip deploy.zip containers.tar docker-compose.yml 
    rsync deploy.zip [email protected] 
    
    ssh [email protected] 
    unzip deploy.zip ./ 
    docker load -i containers.tar 
    
    docker-compose up 
    

    , ama bu uyarınca konteyner yeniden çalışır:

Benim şu anki iş akışı şuna benzer docker-compose.yml dosya.

Bir şeyleri özlediğimde farklı bir duygu alıyorum. Tam uygulamamın üzerinden gönderim yapmalıyım ve sonra görüntüyü sunucuda mı oluşturmalıyım? Görüntüleri bir kayıt defterinden saklıyor/yüklüyorsanız nasıl oluşturulmuş kapsayıcıları başlatırsınız?

+0

D ile ilgili hiçbir şey göremiyorum? – Bauss

+2

@Bauss İyi yakalama, sadece docker etiketine yazarak yazıyordu. –

+1

Anladığım kadarıyla, docker-compose'un, docker-compose.yml'daki kapsayıcıları yeniden oluşturmaya çalıştığını söylüyorsunuz; Tek düşüncem, ürün kutusundaki 'docker resimleri’dir ve resim adlarını ve etiketlerini docker-compose.yml içindekilerle karşılaştırmaktır. – Stratos

cevap

1

Sorun şu ki geliştirme ve üretimde aynı docker-compose.yml dosyasını kullanıyordum.

Uygulama hizmeti bir depo adı veya etiketi belirtmedi, bu nedenle sunucuda docker-compose up'u çalıştırdığımda, yalnızca dockerfile uygulamasının kaynak kod dizininde (sunucuda bulunmayan) oluşturmaya çalıştı.

Yerel docker-compose.yml dosyasına açık bir resim alanı ekleyerek sorunu çözdüm.

version: '2' 
services: 
    web: 
    image: 'my-private-docker-registry:latest' 
    # no build field! 

lokal docker-compose build çalıştırdıktan sonra, web hizmeti görüntü veri havuzu adı my-private-docker-registry ve etiket latest ile inşa edilmiştir:

version: '2' 
services: 
    web: 
    image: 'my-private-docker-registry:latest' 
    build: ./app 

Sonra üretimi için alternatif oluşturma dosyası oluşturdu.

Ardından görüntüyü depoya doğru itmek sadece bir durumdur.

docker push 'my-private-docker-registry:latest' 

Ve docker pull çalışan, yeni görüntülerle, durdurmak ve koşu konteynerleri yeniden güvenlidir.