2017-01-26 13 views
5

Próbuję wdrożyć aplikację zbudowaną za pomocą funkcji dokowania, ale wydaje mi się, że podążam całkowicie w niewłaściwym kierunku.Rozmieszczanie kontenerów do tworzenia dokerów

  1. Mam wszystko działa lokalnie - docker-compose up wyświetla moją aplikację z odpowiednimi sieciami i hostami w miejscu.
  2. Chcę móc uruchomić tę samą konfigurację kontenerów i sieci na maszynie produkcyjnej, korzystając tylko z innego pliku .env.

Mój obecny przepływ pracy wygląda tak:

docker save [web image] [db image] > containers.tar 
zip deploy.zip containers.tar docker-compose.yml 
rsync deploy.zip [email protected] 

ssh [email protected] 
unzip deploy.zip ./ 
docker load -i containers.tar 

docker-compose up 

W tym momencie, miałem nadzieję, aby móc uruchomić docker-compose up ponownie kiedy się tam dostać, ale próbuje odbudować pojemników zgodnie docker-compose.yml plik.

Mam wyraźne uczucie, że czegoś mi brakuje. Czy powinienem wysyłać ponad moją pełną aplikację, zamiast budować obrazy na serwerze? Jak utworzyć skomponowane kontenery, jeśli przechowujesz/ładujesz obrazy z rejestru?

+0

Nie widzę niczego związanego z D? – Bauss

+2

@Bauss Dobry połów, po prostu wpisano wpisanie znacznika dokowania. –

+1

Nie rozumiem, mówisz, że docker-compose próbuje odbudować kontenery z docker-compose.yml, co nie ma sensu, chyba że coś wywoła 'docker-compose up' z' --build'. Moim jedynym pomysłem jest "obrazy doków" w twoim pudełku prod i sprawdzenie, czy nazwy i tagi obrazów pasują do tych w docker-compose.yml. – Stratos

Odpowiedz

1

Problem polegał na tym, że korzystałem z tego samego pliku dokowanego docker-compose.yml podczas projektowania i produkcji.

Usługa aplikacji nie określiła nazwy lub tagu repozytorium, więc po uruchomieniu na serwerze docker-compose up po prostu próbował utworzyć plik Dockerfile w katalogu kodu źródłowego mojej aplikacji (który nie istnieje na serwerze).

Skończyło się na rozwiązaniu problemu, dodając pole jawnego obrazu do mojego lokalnego pliku docker-compose.yml.

version: '2' 
services: 
    web: 
    image: 'my-private-docker-registry:latest' 
    build: ./app 

Następnie stworzył alternatywny plik komponować produkcji:

version: '2' 
services: 
    web: 
    image: 'my-private-docker-registry:latest' 
    # no build field! 

Po uruchomieniu docker-compose build lokalnie obraz serwis internetowy jest zbudowany z repozytorium nazwy my-private-docker-registry i znacznika latest.

To tylko kwestia przeniesienia obrazu do repozytorium.

docker push 'my-private-docker-registry:latest' 

i działa docker pull, że to bezpieczne, aby zatrzymać i ponownie pojemniki jazdy, z nowymi obrazami.

Powiązane problemy