2016-07-03 25 views
9

Mam kontener Docker Hub, który uruchamia aplikację. Zwykle uruchomi aplikację klonując źródłowe repozytorium git, ale w przypadku, gdy chciałbym uruchomić konkretną wersję, aplikacja oznaczyła różne wydania. Na przykład mogę zrobićJakie są najlepsze praktyki dotyczące oznaczania Docker Hub wersje

git clone https://github.com/author/application.git 
git checkout release-1.0.0 

jako opiekuna Docker Hub, chciałbym lustro wersje oprogramowania z pojemnikiem. Czy są jakieś inne opcje oprócz ręcznego robienia tego po wydaniu?

Teraz moja Dockerfile zawiera coś takiego:

ENV APP_VER=2.0.0 
RUN git clone ...; git checkout ${APP_VER} 

W tym przykładzie chciałbym zachować znakowanych oddział pliku Döcker który ustawia APP_VER do 2.1.0, a następnie Docker Hub obsługuje, ale jeśli wprowadzę zmiany w repozytorium, nie jest jasne, w jaki sposób nie wprowadziłbym zmian w pliku Dockerfile każdego oddziału.

+1

Jeśli jest oznaczony tagiem w Github, plik nie zmieniłby się w taki sposób, w jaki łączyłbyś się z otagowanym plikiem, nie? Np. [Nginx] (https://hub.docker.com/r/_/nginx/). – ldg

+0

Tak, musisz zmienić plik dla każdej wersji, która wygląda jak robiła nginx – Lizbeth

Odpowiedz

2

Powinieneś być w stanie robić to, co opisujesz poprzez Döcker Hub Automatyzacja produkcji iw ustawieniach kompilacji, utwórz wzór pasujący między tagu GitHub Nazwa i Docker plakietkę. Możesz użyć symboli wieloznacznych i zmiennej {źródłoref} `," która odnosi się do nazwy gałęzi/znacznika źródłowego ".

Po każdym naciśnięciu nowego obrazu za pomocą znacznika Docker, który pasuje do znacznika Github, zostanie pobrany pasujący plik Dockerfile - poprzednie znaczniki pozostaną nietknięte. Więc ktoś może wyciągnąć starszą Docker obraz i pasujący kod github za pomocą znacznika jako punkt odniesienia, jak wspomniano:

ENV APP_VER=2.1.0 
RUN git clone ... app.git; git -C app checkout ${APP_VER} 

W tym przypadku zakłada, że ​​Docker Hub skonfigurować, aby dopasować wartości i każdy tag (Obraz Docker i Githuba) to 2.1.0

Nie jestem do końca pewien, co masz na myśli przez "każdy oddział", co może być częścią zamieszania, zwłaszcza jeśli jesteś przyzwyczajony do SVN. W git znacznik nie jest powiązany z odgałęzieniem, lecz z konkretnym zatwierdzeniem (lub ~ punktem w czasie), więc gdy pobierzesz ten tag, zawsze będzie używał tej samej wersji kodu, co podczas zatwierdzania zrobiony. (Zwykle w tym samym czasie, w którym zostało wydane wydanie).