Jak organizujesz pliki Docker należące do projektu, gdy masz jeden plik Docker dla bazy danych, jeden dla serwera aplikacji i tak dalej? Czy tworzysz jakąś hierarchię w źródle? Projekt dużego przedsiębiorstwa nie może składać się tylko z jednego Dockerfile?
215
Odpowiedzi:
Uwaga autora
Ta odpowiedź jest nieaktualna. Fig już nie istnieje i został zastąpiony kompozycją Docker . Zaakceptowanych odpowiedzi nie można usunąć ....
Docker Compose obsługuje budowanie hierarchii projektu. Teraz można łatwo obsługiwać plik Dockerfile w każdym podkatalogu.
Oryginalna odpowiedź
Po prostu tworzę katalog zawierający plik Docker dla każdego komponentu. Przykład:
Podczas budowania kontenerów podaj tylko nazwę katalogu, a Docker wybierze prawidłowy plik Docker.
źródło
W nowszych wersjach (> = 1.8.0) dokera możesz to zrobić
Duża oszczędność.
EDYCJA: zaktualizuj wersje według komentarza raksji
EDYCJA: komentarz od @vsevolod: można uzyskać wyróżnianie składni w kodzie VS, podając pliki. Rozszerzenie pliku dokującego (zamiast nazwy) np. Plik Prod.Docker, Test.Docker itp.
źródło
Dockerfile.web
na konfigurację uruchamiania. Więc stworzyłem problem: youtrack.jetbrains.com/issue/WEB-28185docker-compose.yml
pliku?Użyj
docker-compose
i wieluDockerfile
w osobnych katalogachJak powiedział Kingsley Uchnor , możesz mieć wiele
Dockerfile
, jeden na katalog, które reprezentują coś, co chcesz zbudować.Lubię mieć
docker
folder, w którym przechowywane są wszystkie aplikacje i ich konfiguracja. Oto przykładowa hierarchia folderów projektu dla aplikacji internetowej, która ma bazę danych.docker-compose.yml
przykład:docker-compose
przykład użycia wiersza poleceń:Jeśli potrzebujesz plików z poprzednich folderów podczas tworzenia pliku Docker
Nadal możesz użyć powyższego rozwiązania i umieścić go
Dockerfile
w katalogu, takim jakdocker/web/Dockerfile
wszystko, czego potrzebujesz, to ustawić kompilacjęcontext
wdocker-compose.yml
następujący sposób:W ten sposób będziesz mieć takie rzeczy:
i
./docker/web/Dockerfile
podobne:Oto kilka szybkich poleceń z tldr docker-compose . Aby uzyskać więcej informacji , zapoznaj się z oficjalną dokumentacją .
źródło
COPY ../package.json /app/package.json
)? Plik ten zwykle znajduje się na poziomie głównym, a okno dokowane zabroniło dostępu do elementu nadrzędnego. Jakie podejście zastosujesz?web
projekt od.
(wdocker-compose.yml
:build: .
). W ten sposóbweb
ma dostęp do plików root podczas budowania. Widziałem to pokrewne pytanie: stackoverflow.com/questions/24537340/... i zamiast tego możemy budować z katalogu nadrzędnego, używającdocker
wiersza polecenia, a ta odpowiedź pokazuje, jak to zrobić za pomocą docker-compose: stackoverflow.com/a/45353241/ 1092815-f
opcja jest w porządku, ale wolę używaćdocker-compose
z podfolderami. Myślę, że obie odpowiedzi są prawidłowe. Większość ludzi może po prostu chcieć zachować domyślnąDockerfile
nazwę, aby obsługiwać większość IDE od razu po wyjęciu z pudełka. Nie unieważniam pierwszej odpowiedzi, tylko zapewniam alternatywę. Po prostu nie lubię mojego IDE, aby myśleć, że mójphp
plik Docker jest plikiem, gdy go używamDockerfile.php
, ale tak, to działa. Widziałem kilka przykładów w dokumentacji dokera;Dockerfile.build
,Dockerfile.debug
itp.example.Dockerfile
zachowuje podświetlanie składni i ikony w VSCode.W programie Intellij po prostu zmieniłem nazwę plików dokera na * .Dockerfile i skojarzyłem typ pliku * .Dockerfile ze składnią dokera.
źródło
Dodaj warstwę abstrakcji, na przykład plik YAML jak w tym projekcie https://github.com/larytet/dockerfile-generator, który wygląda jak
Krótki skrypt / marka Pythona może wygenerować wszystkie pliki Docker z pliku konfiguracyjnego.
źródło
Podczas pracy nad projektem wymagającym użycia wielu plików dokerów po prostu utwórz każdy plik dokerów w osobnym katalogu. Na przykład,
app / db /
Każdy z powyższych katalogów będzie zawierał swój plik dokera. Podczas budowania aplikacji doker przeszuka wszystkie katalogi i skompiluje wszystkie pliki dokerów.
źródło