Jednym ze sposobów skonfigurowania mikroserwisu jest zaszycie jego konfiguracji w obrazie dockerowym. Najprostszym sposobem, będzie stworzenie Dockerfile w którym skopiujemy pliki konfiguracyjne z zewnątrz podczas budowania obrazu. Jednak zdecydowanie lepszym rozwiązaniem będzie użycie mechanizmu warstw i rozdzielenie obrazu z aplikacją w konkretnej wersji od obrazu z konfiguracją.
Rozwiązaniem są warstwy
To co potrzebujemy stworzyć to cebula:

W samym jej środku, mamy jar z aplikacją. Następnie mamy Dockerfile dla obrazu z aplikacją, który wie jak ją opakować i uruchomić. A na zewnątrz mamy kolejny Dockerfile, który w odpowiednie miejsce kopiuje konfiguracje. W przypadku kiedy aplikację umieścimy w folderze /app to konfigurację powinniśmy konfigurację umieścić w folderze /app/config.
Mogłoby to wyglądać np. tak:
FROM openjdk:11
COPY target/app-2.2.4.jar /app/app.jar
WORKDIR /app
EXPOSE 8080
ENTRYPOINT java -jar app.jar
docker build .
docker tag <image-id> myapp:2.2.4
Następnie tworzymy obraz z zaszytą konfiguracją:
FROM myapp:2.2.4
COPY ./docker-application.yml /app/config/application.yml
docker build -f Dockerfile_ship .
docker tag <image-id> myapp-ship:2.2.4
Mechanizm konfiguracji Spring Boot
Korzystamy tutaj z mechanizmu Spring Boota który wyszukuje konfiguracje w kilku lokalizacjach w określonej kolejności:
- folder 
/configw folderze aplikacji - w folderze aplikacji
 - folder 
/confignaclasspath - na 
classpath 
Wpisy konfiguracyjne wcześniej wczytane otrzymują wyższy priorytet i nie są nadpisywane wpisami z innych lokalizacji. Dzięki temu mechanizmowi możemy rozdzielić domyślne ustawienia aplikacji, które na przykład umieścimy na classpath, czyli w pliku resources/application.yml który to znajdzie się w skompilowanym jarze za aplikacją. Oraz na ustawienia związane ze środowiskiem w którym uruchamiamy aplikację. Właśnie te ustawienia możemy umieścić w obrazie na oddzielnej warstwie.
Idąc dalej możemy użyć tego mechanizmu do stworzenia kilku wersji aplikacji w postaci gotowych obrazów dockerowych. Każdy z nich ma zaszytą zupełnie inną konfigurację i np. włączone zupełnie inne zestawy ficzerów.
Więcej informacji o mechanizmie konfiguracji Spring Boot, można znaleźć w dokumentacji.
Objaśnienie operacji na Dockerfile
FROM– określenie obrazu bazowegoCOPY– skopiowanie pliku do obrazu podczas budowaniaWORKDIR– zmiana folderu roboczego (z poziomu którego uruchamiana jest aplikacja)EXPOSE– wystawienie portów na zewnątrz konteneraENTRYPOINT– polecenie uruchamiające aplikacjędocker build .– zbudowanie obrazu, wynikowo otrzymujemy identyfikator obrazudocker tag <id-obrazu> <tag>– nadanie tagu obrazowi, dzięki czemu możemu go łatwo użyć jako obraz bazowy, inaczej musielibyśmy się posłużyć identyfikatorem
Pełny opis Dockerfile dostępny jest w dokumentacji.
Artykuły na temat konfiguracji
- Konfiguracja w Kontenerze – wykorzystanie warstw Dockerowych do przechowywania konfiguracji
 - Konfiguracja ze zmiennych środowiskowych – wykorzystanie zmiennych środowiskowych do wstrzykiwania parametrów do konfiguracji
 - Konfiguracja z serwera konfiguracji – wykorzystanie Spring Cloud Config w celu utworzenia serwera konfiguracji
 - 4 sposoby na organizację konfiguracji w repozytorium – porównanie kilku strategii organizacji konfiguracji w repozytorium GIT
 
