2016-04-03 22 views
0

Docker konteynerleriniz için web uygulamaları dosyalarıyla nasıl ilgileniyorsunuz? Aynı uygulamayı 400 kullanıcı için kullanıyoruz. Etkin/devre dışı modülleriyle aynı uygulama (ekstra dosyalar var).Docker'da web uygulamaları dosyaları nasıl ele alınır?

Şu anda bu yaklaşımı kullanıyorum: görüntüleri, ör. Daha sonra MySQL, nginx + php ve özel hazırlanmış uygulama klasörünün kabı başlatın:

docker create -v /dbdata --name dbstore x/mysql /bin/true 
docker run -d --volumes-from dbstore --name db1 x/mysql 
docker run -d -P --name web --link db1:db1 -v /webapp:/opt/webapp x/webapp php-start index.php 

IMHO, bu bir uzay overusing bu. Sanırım bir webapp docker veri kabının> 100 etiketini (revizyonları) oluşturmak biraz karmaşık. Lütfen bu sorunun nasıl yönetileceğini öğrenin.

cevap

2

İlk olarak, Docker'ın son sürümleri named volumes'u oluşturmanıza ve kullanmanıza izin verir. Bu, "yalnızca veri içeren kapların" eskitildiği ve artık gerekli olmadığı ve aslında bu günlerde anti-örüntü olarak kabul edildiği anlamına gelir. Sen ile hacimleri görüntüleyebilir

docker volume create --name=foo 
docker run -d -v "foo:/dbdata" --name "db1" x/mysql 

: Bu oluşturmak ve adlandırılmış hacmi kullanmak oldukça basit olduğunu Bildiğim kadarıyla ana soru olarak

docker volume ls 

, hangi da olabilir (Docker en union filesystem yararlanmak olabilir daha basit bir "paylaşılan katman" olarak adlandırılır) tasarım. Bunun anlamı, ubuntu görüntüsünden iki kapsayıcı (ör. docker run -d --name=one ubuntu ve docker run -d --name=two ubuntu) oluşturursanız, bu kapların her ikisi de temel ubuntu görüntüsünde aynı dosya sistemi nesnelerini kullanacaklardır. Örneğin, bu kapların her ikisinde de /etc/passwd dosyası, diskte saklanan aynı /etc/passwd verisine işaret eder. Bu, Docker bağlamında "sendika dosya sistemi" terimi ile kastedilenin bir parçasıdır.

Bu bilgiyi bir adım ileriye götürün ve bu modülleri, farklı müşterileriniz için tüm kapların kullanımı için temel görüntünüze "fırlatın". Bunun anlamı, üstte FROM wordpress:latest kullanan Dockerfile'dan kendi resminizi oluşturmanızdır. WordPress örneğiyle devam edersiniz ve bir grup WP eklentisi yapmak isterseniz, bunları yalnızca /var/www/html/wp-plugins (veya herhangi bir şekilde) içinde saklayabilir ve yalnızca yapılandırmanızda belirli olanları etkinleştirebilirsiniz. Oluşturduğunuz görüntüye işledikleri için (ve tüm farklı kaplarınızı oluşturmak için aynı görüntüyü kullandıkları için), tüm bu modül dosyaları, birleşik dosya sistemi aracılığıyla diskte saklanan aynı veriyi işaret eder. Elbette, eğer birisi modülden birinde kodu değiştirirse, örneğin, münferit muhafazanın resmi, değişiklikleri kendi görüntü katmanında saklar, ancak temel dosyalar, herhangi bir ekstra alan açmamakla aynı verilerden olacaktır. Elbette, kullandığınız CMS'yi değiştirebilirsiniz.

Şimdi, çalıştığım yerde, son zamanlarda insanların kullanması için Docker tabanlı bir barındırma sistemi oluşturdum. Sorun, her müşterinin CMS dosya sisteminin kendi kopyasına sahip olmasını istedik.Birleştirme dosya sistemi olsa bile, baz görüntündeki değişiklikler kendi görüntü katmanlarında saklanır, bu maaşımı imzalayan adam için yeterince iyi değildi. Her müşterinin, kendi CBS dosya sisteminin kendi kopyasıyla kendi EBS hacmine sahip olmasını istediler. Bu durumda, her müşterinin kendi hacmine sahip olmasını istediğiniz yerde (örneğin, onları yedekleme için taşımak veya yeni bir ana bilgisayara, vb. Taşımak için), o zaman sorunu çözemezsiniz. bu dosyalar için ekstra depolama kullanmanın.

1

Duruma göre: dosyalar statik ve etrafında kolayca kabı hareket edebilmek istiyorsanız

, o zaman sadece tek bir dizin gibi web konuma kopyalayarak kapta dosyaları tutmak . Güvenilir bir dış yer varsa ve (CMS çeşit kullanarak örneğin) daha düzenli dosyaları değiştirirseniz

, sadece hacim bir apache veya nginx kabı çalıştırmak ve dağ olabilir

+0

Bu bir çeşit CMS'dir –

İlgili konular