Mám malé webové aplikace (Rails aplikaci s názvem sofia
), že jsem nasazení místně s minikube
.
Když jsem se vytvořit k8s zdroje a spustit můj nasazení, kontejnery neobsahují žádné soubory, které měly být zkopírovány v průběhu obraz procesu sestavení.
Tady je to, co dělám:
Dockerfile
Jako součást Dockerfile
stavět, jsem zkopírujte obsah mé místní klonovaný repozitář do obrazu pracovní adresář:
RUN mkdir -p /app
WORKDIR /app
COPY . ./
(Old) docker-compose
nastavení
Historicky použil jsem docker-compose
soubor ke spuštění této aplikace a všechny jeho služby. Já mapě místní adresář, do kontejneru je pracovní adresář (viz volumes:
níže). To je hezký pohodlí při práci na místě, protože všechny změny se projeví "žít" uvnitř kontejneru:
# docker-compose.yml
sofia:
build:
context: .
args:
RAILS_ENV: development
environment:
DATABASE_URL: postgres://postgres:sekrit@postgres/
image: sofia/sofia:local
ports:
- # ...
volumes:
- .:/app #<---- HERE
Stavební k8s resource file s kompose
Za účelem spuštění této o minikube
Používám kompose
nástroje Kubernetes, že samy poskytují s cílem změnit můj docker-compose
soubor do k8s resource file, které mohou být konzumovány.
$ kompose convert --file docker-compose.yml --out k8s.yml --with-kompose-annotation=false
WARN Volume mount on the host "/Users/jeeves/git/jeeves/sofia" isn't supported - ignoring path on the host
INFO Kubernetes file "k8s.yml" created
Jak můžete vidět, vytváří varování, že místní objem nemůže být namontován proti ovladač hlasitosti. To dává smysl, protože k8s nasazení běží "na dálku", tak jsem prostě ignorovat varování.
Běží
Nakonec jsem běh výše uvedených zdrojů s k8s / minikube
minikube start
kubectl apply -f k8s.yml
Všiml jsem si, sofia
kontejner udržuje shazovat a restartování takže jsem zkontrolovat protokoly:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
pod/sofia-6668945bc8-x9267 0/1 CrashLoopBackOff 1 10s
pod/postgres-fc84cbd4b-dqbrh 1/1 Running 0 10s
pod/redis-cbff75fbb-znv88 1/1 Running 0 10s
$ kubectl logs pod/sofia-6668945bc8-x9267
Could not locate Gemfile or .bundle/ directory
Že chyba je Ruby/Rails, specifická, ale základní příčinou je, že tam nejsou žádné soubory v kontejneru! Můžu potvrdit zadáním kontejner a kontrola souborů s ls
- to je skutečně prázdná.
Otázky
- Pokud
sofia/sofia:latest
obraz je správně postaven sCOPY
-ied obsah souboru, proč by to zmizet při spouštění kontejneru naminikube
? - Co bych měl udělat, aby zajistily, moje soubory zkopírovány správně?
Díky!!!
kompose
prostě ignorovat, že konkrétní svazek (volumes\n- .:/app
vdocker-compose.yml
) úplně? Existuje pouze pro pohodlí vdevelopment
a že objem není opravdu potřeba při nasazení s k8s.