Wpis z mikrobloga

Siema #programowanie #php #symfony #docker

Jak robicie deploy aplikacji na VPS? Uruchamiacie testy itd, i wtedy:
1. Budujecie dockerowy obraz (zawierający kod, interpreter php, nginx, etc.) oraz na VPSie robicie docker run -e DATABASE_URL....
2. czy może na VPSie robicie git pull z repo i docker compose up -d ?

Pytam bo w kilku miejscach widziałem, że stosowana jest druga metoda (np. https://stackoverflow.com/a/56686418) ale... po cholere w takim razie budować obraz skoro można uploadować kod?
  • 24
@mirunek: Tak, można również wykonać pull z repo i wykonać docker-compose up -d.
Po pierwsze, trzeba zainstalować Docker na VPSie. Następnie należy skonfigurować środowisko, takie jak ustawienie folderu dla aplikacji, tworzenie potrzebnych plików konfiguracyjnych, konfiguracja bazy danych itp.

Po skonfigurowaniu środowiska należy uruchomić komendę git pull, aby pobrać kod aplikacji. Następnie należy wykonać docker-compose up -d, aby uruchomić kontenery.

Po uruchomieniu kontenerów, należy przetestować aplikację, aby upewnić się, że działa ona
@datester: OK ale w takim razie po co budować obraz? Sądziłem, że:
1. Instaluję dockera na vps
2. Buduję obraz aplikacji
3. Robię docker run tego obrazu, z potrzebnymi zmiennymi środowiskowymi
@mirunek: Budowa obrazu jest ważnym elementem w procesie dockerowania, ponieważ zapewnia bezpieczny i powtarzalny sposób tworzenia aplikacji. Obraz jest kontenerem, który zawiera wszystkie potrzebne elementy do uruchomienia aplikacji. Obraz zawiera wszystkie potrzebne pliki, biblioteki i ustawienia, aby aplikacja mogła działać bezproblemowo. Umożliwia to również przetestowanie aplikacji przed wdrożeniem jej na serwerze.
@mirunek: pull i compose up

po cholere w takim razie budować obraz skoro można uploadować kod?


budujesz środowisko żeby było niezależne od maszyny hosta, zawsze takie samo. Zapewniasz tym też separację środowisk wielu aplikacji.
@mirunek: ja robię dokładnie tak:
1. buduję obraz na swoim środowisku lokalnym
2. wypycham obraz do prywatnego docker huba
3. na VPS uruchamiam docker-compose pull && docker-compose up -d

Wszystko dzieje się w skonfigurowanym CI/CD gitlaba
Czyli docker compose up uruchamia zbudowany przeze mnie obraz? Nadal nie rozumiem jak obraz jest uruchamiany przy pomocy docker compose


@mirunek: Używając docker compose, możesz uruchomić obraz, który masz już zbudowany. W docker-compose.yml wskazujesz jego nazwę. Następnie używasz polecenia docker-compose up, aby go uruchomić. Docker Compose zbuduje wszystkie zalezne obrazy, a następnie uruchomi je w odpowiedniej kolejności.
@datester to po co jest Dockerfile w folderze głównym? Sądziłem że docker compose to w sumie uruchomienie kontenerów dla lokalnego developmentu, a dockerfile buduje obraz produkcyjny który uruchamiamy za pomocą docker run. Muszę wrócić do podstaw żeby to skumać.
@mirunek: dockerfile to plik tekstowy, który zawiera polecenia do tworzenia obrazu kontenera Docker. Jest to instrukcja krok po kroku, która infromuje aplikację Docker jak skonfigurować kontener, jakie pliki skopiować oraz jakie polecenia wykonać. Dzięki temu możesz skonfigurować swój kontener tak, aby spełniał Twoje wymagania.

Docker Compose jest narzędziem, które pozwala Ci zarządzać wieloma kontenerami jednocześnie za pomocą jednego polecenia. Możesz użyć Docker Compose do uruchamiania, zatrzymywania, skalowania, łączenia i monitorowania wielu
@mirunek: budowanie obrazu po stronie klienta raczej nie ma sensu. Lepiej zbudować obraz w CI, wypchać go do registry a stamtad VPS sobie go zaciągnie. To podejście jest fajne, bo bardzo dużo upraszcza: jak np. używasz kubernetesa to do deployou jakiejś apki nie potrzebujesz bawić się w gity i dockery. Wystarczy podać adres w docker registry i wszystko działa automatycznie
to po co jest Dockerfile w folderze głównym?


@mirunek: można i tak i tak. Możesz podać adres w docker registry, wtedy docker-compose zaciągnie to co trzeba. Możesz też podać scieżkę do Dockerfile i wtedy zostanie odpalony pod spodem docker build. Często robi się tak jak stawiasz lokalne środowisko i masz kontenery których sam nie budujesz (bazy, brockery) jak i te które budujesz (twoja apka)
@datester
@Saly
Ja to widze tak:
1. Piszę kod
2. Tworze
docker-compose.yml z kontenerami: php, nginx
oraz
Docker-compose.dev.yml zawierający dodatkowo kontener mysql
3. Dockerfile który pobiera php, nginx
4. Konfiguruje np. Github actions by pobrać kod, przetestować, zbudować obraz i wypchać do docker huba
5. Vps pobiera obraz (w jakis spoaob prze, github actions) i uruchamia przez docker run, ale mówicie, że najlepiej żeby to zrobić przez docker compose tylko w jaki
e najlepiej żeby to zrobić przez docker compose


@mirunek: jak masz wiele kontenerów to tak. Jak nie to za bardzo nie ma sensu. docker-compose ułatwia postawienie paru kontenerów żeby np. baza i aplikacja miały dobrze skonfigurowane porty. Jak bazę masz gdzieś na zewnątrz a twoja apka to jeden konter to dużo to nie da

"pobierz i uruchom zbudowany wcześniej obraz znajdujący się w docker hub"


@mirunek: ja mam np. tak
@mirunek: Gościu, sorry, ale Google zamknęli czy jak? Sprawdź ten artykuł gdzie masz krok po kroku opisane jak skonfigurować produkcyjne zastosowanie aplikacji Docker Compose. Są wszystkie kroki, od tworzenia obrazu Dockera i konfigurowania go zgodnie z wymaganiami prod., po zarządzanie aplikacją DC w maszynie.

Ponadto, jeżeli chcesz dowiedzieć się więcej na temat konfigurowania produkcji z wykorzystaniem Docker Compose, możesz również sprawdzić ten artykuł - zawiera on dość dokładny opis tego jak
@datester: OK przeczytałem drugi artykuł (pierwszy link nie działa - 404). W sumie mówi on o tym co wiem, ale rozjaśniło mi to jedno: docker-compose jest "wyżej" i może (nie musi) zawierać kilka Dockerfile, które mogą zawierać specyficzną konfigurację dla danego kontenera (np. kontener php zawiera dockerfile z dodatkowymi libkami, kontener z nginxem ma dockerifle z specyficzną konfiguracją).

Natomiast nadal nie rozumiem gdzie w tym procesie jest budowanie obrazu. Skoro lokalnie
@mirunek: "Docker build" służy do zbudowania obrazu, który następnie może być używany do uruchamiania kontenerów. "Docker-compose up -d" używa istniejącego obrazu, który został wcześniej stworzony przy użyciu polecenia "docker build". Proces budowania obrazu umożliwia skonfigurowanie i skompilowanie obrazu, uwzględniając twoje potrzeby i wymagania. Następnie taki obraz może być używany za pomocą "docker-compose" do uruchamiania kontenerów.
@datester: OK trochę rozjaśniło mi się. Cały czas sądziłem, że Dockerfile w folderze głównym "spinał" wszystkie wymagania co do kontenerów (czyli, że Dockerfile wiedział o wszystkich konternerach) i budował obraz zawierający te wszystkie kontenery (php, nginx etc.) i wystarczy zrobić tylko docker run tego konkretnego obrazu. A tak naprawdę Dockerfile jest dedykowany kontenerom (budujemy sobie dedykowany obraz np. PHP) i docker-compose wykorzystuje ten customowy obraz. Czyli tak naprawdę, jeśli robię dummy