Bir projeye ait Docker dosyalarını, veritabanı için bir Dockerfile, uygulama sunucusu için bir vb. Varsa nasıl düzenlersiniz? Kaynakta bir çeşit hiyerarşi yaratıyor musunuz? Büyük bir kurumsal proje sadece bir Dockerfile'dan oluşamaz mı?
Bir projeye ait Docker dosyalarını, veritabanı için bir Dockerfile, uygulama sunucusu için bir vb. Varsa nasıl düzenlersiniz? Kaynakta bir çeşit hiyerarşi yaratıyor musunuz? Büyük bir kurumsal proje sadece bir Dockerfile'dan oluşamaz mı?
Yanıtlar:
Bu cevap güncel değil. İncir artık mevcut değil ve yerine Docker oluşturuldu . Kabul edilen cevaplar silinemez ....
Docker Compose proje hiyerarşisinin oluşturulmasını destekler. Bu nedenle, her alt dizinde bir Dockerfile'ı desteklemek artık çok kolay.
├── docker-compose.yml
├── project1
│ └── Dockerfile
└── project2
└── Dockerfile
Her bileşen için bir Dockerfile içeren bir dizin oluşturuyorum. Misal:
Kapları oluştururken sadece dizin adını verin ve Docker doğru Docker dosyasını seçecektir.
In (> = 1.8.0) docker yeni sürümlerinde , bunu yapabilirsin
docker build -f Dockerfile.db .
docker build -f Dockerfile.web .
Büyük bir tasarruf.
EDIT: raksja'nın yorumu başına sürümleri güncelle
EDIT: @vsevolod yorum: dosyaları vererek VS kodunda sözdizimi vurgulama almak mümkündür. Dockfile uzantısı (yerine ad) örneğin Prod.Dockerfile, Test.Dockerfile vb.
Dockerfile.web
çalıştırma yapılandırmasına bile izin vermiyor . Bu yüzden bir sorun yarattım
docker-compose.yml
Örneğin, bir dosyada tanımlanan her 'hizmet' için hangi Dockerfile'ın kullanılması gerektiğini nasıl belirlersiniz ?
docker-compose
ve çoklu kullanımDockerfile
Dockerfile
İçinDockerfile.db
veya adını değiştirmeyin,Dockerfile.web
IDE'niz tarafından desteklenmeyebilir ve sözdizimi vurgulamayı kaybedersiniz.
As Kingsley Uchnor dedi , birden sahip olabilir Dockerfile
, yapı istediğiniz bir şeyi temsil dizine başına bir tane.
docker
Her uygulamayı ve bunların yapılandırmasını tutan bir klasöre sahip olmayı seviyorum . Veritabanı olan bir web uygulaması için örnek bir proje klasörü hiyerarşisi.
docker-compose.yml
docker
├── web
│ └── Dockerfile
└── db
└── Dockerfile
docker-compose.yml
misal:
version: '3'
services:
web:
# will build ./docker/web/Dockerfile
build: ./docker/web
ports:
- "5000:5000"
volumes:
- .:/code
db:
# will build ./docker/db/Dockerfile
build: ./docker/db
ports:
- "3306:3306"
redis:
# will use docker hub's redis prebuilt image from here:
# https://hub.docker.com/_/redis/
image: "redis:alpine"
docker-compose
komut satırı kullanım örneği:
# The following command will create and start all containers in the background
# using docker-compose.yml from current directory
docker-compose up -d
# get help
docker-compose --help
Hala yukarıdaki çözüm kullanabilir ve keşfetmenize yerleştirebilirsiniz Dockerfile
gibi bir dizinde docker/web/Dockerfile
, tek ihtiyacınız yapı ayarlamaktır context
Gözlerinde farklı docker-compose.yml
böyle:
version: '3'
services:
web:
build:
context: .
dockerfile: ./docker/web/Dockerfile
ports:
- "5000:5000"
volumes:
- .:/code
Bu şekilde, bunun gibi şeylere sahip olabilirsiniz:
config-on-root.ini
docker-compose.yml
docker
└── web
├── Dockerfile
└── some-other-config.ini
ve bunun ./docker/web/Dockerfile
gibi:
FROM alpine:latest
COPY config-on-root.ini /
COPY docker/web/some-other-config.ini /
İşte tldr docker-compose'den bazı hızlı komutlar . Daha fazla bilgi için resmi belgelere başvurduğunuzdan emin olun .
COPY ../package.json /app/package.json
) deps yüklemek için bir paket yöneticisi dosyasını kopyalamanız gerekirse ne olur ? Bu dosya genellikle kök düzeyinde olur ve docker'ın üst öğeye erişimi yasaklanmıştır. Hangi yaklaşımı takip edeceksiniz?
web
projeyi .
(içinde docker-compose.yml
: build: .
). Bu şekilde, web
inşa ederken kök dosyalara erişebilir. Bu ilgili soruyu gördüm: stackoverflow.com/questions/24537340/… ve docker
komut satırı kullanırken bunun yerine üst dizinden oluşturabiliriz ve bu yanıt docker-compose ile nasıl yapılacağını gösterir: stackoverflow.com/a/45353241/ 1092815
-f
seçeneği iyi, ancak docker-compose
alt klasörlerle kullanmayı tercih ederim . Bence her iki cevap da geçerli. Çoğu kişi, Dockerfile
çoğu IDE'yi kutudan çıkarmak için varsayılan adı korumayı tercih edebilir . İlk cevabı geçersiz kılmıyorum, sadece bir alternatif sunuyorum. IDE'mi php
kullandığımda Dockerfile'mın bir dosya olduğunu düşünmesini sevmiyorum Dockerfile.php
ama evet, işe yarıyor. Docker belgelerinde birkaç örnek gördüm; Dockerfile.build
, Dockerfile.debug
vb.
example.Dockerfile
VSCode sözdizimi vurgulama ve simgeleri tutar.
Intellij'de docker dosyalarının adını * .Dockerfile olarak değiştirdim ve * .Dockerfile dosya türünü docker sözdizimiyle ilişkilendirdim.
Bir soyutlama katmanı ekleyin, örneğin, bu projedeki gibi bir YAML dosyası https://github.com/larytet/dockerfile-generator gibi
centos7:
base: centos:centos7
packager: rpm
install:
- $build_essential_centos
- rpm-build
run:
- $get_release
env:
- $environment_vars
Kısa bir Python betiği / markası, yapılandırma dosyasından tüm Docker dosyalarını oluşturabilir.
Birden fazla docker dosyası kullanılmasını gerektiren bir proje üzerinde çalışırken, her docker dosyasını ayrı bir dizinde oluşturun. Örneğin,
app / db /
Yukarıdaki dizinlerin her biri dockerfile dosyalarını içerecektir. Bir uygulama oluşturulurken, docker tüm dizinleri arar ve tüm docker dosyalarını oluşturur.