2016-01-20 8 views
5

Zaten orada görüntü başladığında bir keyspace ve şema ile Cassandra görüntüyü oluşturur bir dockerfile oluşturmak istiyoruz. GeneldeBir şema içeren cassandra (veya herhangi bir veritabanı) için Dockerfile nasıl oluşturulur?

, nasıl, en azından ilk defa çalıştıran gerçekten kabın kadar yapılamaz bazı adım (lar) içeren bir görüntü inşa edecek bir Dockerfile oluşturabilirim?

Şu anda iki adımım var: Cassandra görüntüsünü CQL şema dosyaları ile bir geçici bir dizine eşleyen bir cassandra Dockerfile yapısını oluşturun ve sonra görüntüyü aldıktan sonra şemayı içe aktarmak için cqlsh ile docker exec komutunu çalıştırın. bir konteyner olarak başlatıldı. Sadece bir kap -

Ama bu şema ile bir görüntü oluşturmaz. Bu konteyner bir görüntü olarak kaydedilebilir, ancak bu hantaldır.

docker run --name $CASSANDRA_NAME -d \ 
     -h $CASSANDRA_NAME \ 
     -v $CASSANDRA_DATA_DIR:/data \ 
     -v $CASSANDRA_DIR/target:/tmp/schema \ 
     tobert/cassandra:2.1.7 

sonra

docker exec $CASSANDRA_NAME cqlsh -f /tmp/schema/create_keyspace.cql 
docker exec $CASSANDRA_NAME cqlsh -f /tmp/schema/schema01.cql 
# etc 

Bu çalışır, ancak bağlantılı konteyner/hizmetler de başlatıp şema yerinde olmasını bekliyoruz çünkü Docker oluşturmak gibi imkansız araçlarla kullanmak mümkün kılar.

Kasırga işleminin, yapım sırasında Dockerfile'da arka planda başlatılmaya çalışıldığı sırada, daha sonra cqlsh çalıştırılmaya çalışıldığı, ancak bunun çok iyi çalıştığını düşünmediğim bir girişim gördüm.

+0

sonra, ne yapmak 2 'liman işçisi exec'and sonra' docker commit' 'docker run' yapıyor sorun nedir ve istediğiniz imaja sahip? Tek adımlı bir süreç değil mi? – user2915097

+0

@ user2915097 Docker yazımını bir uygulama ve bir veritabanı dizisi oluşturmak için kullanmak isterim. Docker oluşturmak sadece görüntüleri oluşturur ve başlatır. Uygulama, veritabanının bir şemaya sahip olmasını beklediği gibi hatalar atıyordu. Sanırım tamamlamadan sonra hata yapmasına ve docker exec komutunu çalıştırmasına izin verebilirim, ama bu çok temiz değil. –

+0

Dockerfile'ınızda 'cqlsh -f/tmp/schema/create_keyspace.cql' ve diğer komutunuzda ne yapmalısınız? – user2915097

cevap

3

Tamam ben bu sorunu vardı ve birisi ile başa çıkmak için bana bazı strateji tavsiye: Varolan Cassandra Dockerfile, örneğin resmi biri

  • den

    1. Başlat EntryPoint şeyler
    2. Kopya şema çıkarmak (.cql) dosyası ve veri (.csv) görüntüye ve bir yere koyun/örnek
    3. için opt/veri

      01 Cassandra başlatmak için son komutu olarak kullanılacak bir kabuk komut dosyası oluşturmak

      a. $ CASSANDRA_HOME/bin/cassandra

      b ile Cassandra başlar. Orada bir $ CASSANDRA_HOME/veri/veri/your_keyspace-xxxx klasör ve boş olmadığından EĞER başka bir şey

      c yapmak. Else

      1. sleep some time to allow the server to listen on port 9042 
      2. when port 9042 is listening, execute the .cql script to load csv files 
      

    Bu prosedür oldukça hantal buldum ama etrafında başka bir yol var gibi görünüyor. Cassandra uygulamalı laboratuvarında, Vagrant ve Ansible kullanarak bir VM görüntüsü oluşturmayı daha kolay buldum.

  • +2

    Merhaba, tam ihtiyacım olan şey bu gibi görünüyor! Ancak Dockerfile ve shell script'in bir örneğini verebilir misiniz? – Belgikoi

    +0

    Evet, yukarıdaki örneklerden bir tanesi çok yararlı olurdu! –

    İlgili konular