Wątek przeniesiony 2023-07-14 19:33 z Java przez Riddle.

Jak dystrybuować swoją aplikację przez dockera?

0

Mam 2 obrazy na Docker Hub. Jeden do API a drugi do bazy (Spring Boot i Postgres)
Chciałbym odpalić je w Docker Desktop jako jeden kontener, tak jakby ktoś odpalał na innym komputerze, ale niestety nie wiem, jak to zrobić.
Tutaj dokłady opis problemu na Stacku:
https://stackoverflow.com/questions/76686711/using-pulled-docker-image-postgres-error-spring-boot-postgres

1

Najlepiej to napisz do tego jakiś docker-compose tworząc tam referencje do tych dwóch obrazów, później budując tego compose'a zaciągnie Ci te dwa obrazy i je uruchomi (o ile poprawnie je skonfigurujesz)

0
Escanor16 napisał(a):

Najlepiej to napisz do tego jakiś docker-compose tworząc tam referencje do tych dwóch obrazów, później budując tego compose'a zaciągnie Ci te dwa obrazy i je uruchomi (o ile poprawnie je skonfigurujesz)

Mam docker compose:

version: "3"
services:
  api:
    image: api
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/CinemaDb
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=12345
      - SPRING_JPA_HIBERNATE_DDL_AUTO=create
      - SPRING_LIQUIBASE_ENABLED=false
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
    - db
  db:
    image: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=CinemaDb
      - POSTGRES_USE=postgres
      - POSTGRES_PASSWORD=12345
0

@Escanor16:
Zmieniłem na coś takiego, ale wtedy pushuje tylko api a db jest skipped

version: "3"
services:
  api:
    image: nofenak/my-images:cinema-api
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/CinemaDb
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=12345
      - SPRING_JPA_HIBERNATE_DDL_AUTO=create
      - SPRING_LIQUIBASE_ENABLED=false
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
    - db
  db:
    image: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=CinemaDb
      - POSTGRES_USE=postgres
      - POSTGRES_PASSWORD=12345
2

Masz literówke w POSTGRES_USER

0
Black007 napisał(a):

Masz literówke w POSTGRES_USER

Poprawiłem, ale nadal nie wiem, jak to odpalić po pobraniu z Docker Hub, tak, żeby to działało

0

To właściwie niweluje cały sens kontenerów.

Jeśli chcesz żeby te rzeczy się widziały "tak jakby były razem" to nie ma sensu żeby były oddzielnymi kontenerami.

0
Riddle napisał(a):

To właściwie niweluje cały sens kontenerów.

Jeśli chcesz żeby te rzeczy się widziały "tak jakby były razem" to nie ma sensu żeby były oddzielnymi kontenerami.

To jak spakować api i db do jednego obrazu?
Ogólnie chodzi mi o taki efekt, żeby ktoś pobrał sobie taki obrazł i potem mógł wejść pod localhost:8080/swagger-ui i użyć api

0
Nofenak napisał(a):
Riddle napisał(a):

To właściwie niweluje cały sens kontenerów.

Jeśli chcesz żeby te rzeczy się widziały "tak jakby były razem" to nie ma sensu żeby były oddzielnymi kontenerami.

To jak spakować api i db do jednego obrazu?
Ogólnie chodzi mi o taki efekt, żeby ktoś pobrał sobie taki obrazł i potem mógł wejść pod localhost:8080/swagger-ui i użyć api

No normalnie.

Piszesz Dockerfile który ma w sobie bazę i api i tyle.

Zrób np

FROM postgres

ADD src/ # Twoja apka 
0
Riddle napisał(a):
Nofenak napisał(a):
Riddle napisał(a):

To właściwie niweluje cały sens kontenerów.

Jeśli chcesz żeby te rzeczy się widziały "tak jakby były razem" to nie ma sensu żeby były oddzielnymi kontenerami.

To jak spakować api i db do jednego obrazu?
Ogólnie chodzi mi o taki efekt, żeby ktoś pobrał sobie taki obrazł i potem mógł wejść pod localhost:8080/swagger-ui i użyć api

No normalnie.

Piszesz Dockerfile który ma w sobie bazę i api i tyle.

A nie Docker compose? Mógłbyś dać jakiś przykład?

0
Nofenak napisał(a):
Riddle napisał(a):
Nofenak napisał(a):
Riddle napisał(a):

To właściwie niweluje cały sens kontenerów.

Jeśli chcesz żeby te rzeczy się widziały "tak jakby były razem" to nie ma sensu żeby były oddzielnymi kontenerami.

To jak spakować api i db do jednego obrazu?
Ogólnie chodzi mi o taki efekt, żeby ktoś pobrał sobie taki obrazł i potem mógł wejść pod localhost:8080/swagger-ui i użyć api

No normalnie.

Piszesz Dockerfile który ma w sobie bazę i api i tyle.

A nie Docker compose? Mógłbyś dać jakiś przykład?

Nie, bo jak zrobisz docker-compose to będziesz miał dwa kontenery.

0
Riddle napisał(a):
Nofenak napisał(a):
Riddle napisał(a):
Nofenak napisał(a):
Riddle napisał(a):

To właściwie niweluje cały sens kontenerów.

Jeśli chcesz żeby te rzeczy się widziały "tak jakby były razem" to nie ma sensu żeby były oddzielnymi kontenerami.

To jak spakować api i db do jednego obrazu?
Ogólnie chodzi mi o taki efekt, żeby ktoś pobrał sobie taki obrazł i potem mógł wejść pod localhost:8080/swagger-ui i użyć api

No normalnie.

Piszesz Dockerfile który ma w sobie bazę i api i tyle.

A nie Docker compose? Mógłbyś dać jakiś przykład?

Nie, bo jak zrobisz docker-compose to będziesz miał dwa kontenery.

A to dlaczego w praktycznie każdym poradniku jest docker-compose?

0
Nofenak napisał(a):.

A to dlaczego w praktycznie każdym poradniku jest docker-compose?

Poradniki zalecają budowanie wielu kontenerów, ale to nie jest coś co próbujesz zrobić.

Z tego co mówisz, to chcesz żeby dało się zrobić coś w stylu docker run moj_suoer_obraz i żeby mógł wejść na port. Jeśli tak, to musi to być jeden kontener.

Chyba że nie chcesz tego tak zrobić? Jeśli koniecznie chciałbyś użyć docker compose to ktoś musiałby ściągnąć dwa obrazy (a nie jeden), albo musiałbyś im dać dostęp do kodu źródłowego żeby sobie sami je zbudowali.

Dużo by pomogło gdybyś po prostu od początku do końca napisał co chcesz zrobić, bo to nadal nie jest jasne.

0

@Riddle:
Chciałbym, żeby ktoś mógł pobrać sobie obraz mojej apki, odpalić go i użyć API przez Swaggera (prosty crud z dostępem do bazy)

1

Mam podobny case, mam apkę, która korzysta z postgresa, mam to na githubie, i jak ktoś chce odpalić to ściąga docker-compose.yml z tego repo https://github.com/bartgora/Mockify/blob/master/docker-compose.yml

0
Nofenak napisał(a):

@Riddle:
Chciałbym, żeby ktoś mógł pobrać sobie obraz mojej apki, odpalić go i użyć API przez Swaggera (prosty crud z dostępem do bazy)

No to w takim razie na 100% to musi być jeden kontener, ergo jeden Dockerfile i bez docker-compose.

Wtedy będziesz mógł ją odpalić np tak:

docker run --rm -p 8080:80 moj_super_obraz
0

Nie rozumiem po co chcesz to pakowac w jeden kontener. Tak jak masz teraz to uzytkownik sobie pobiera twoj docker compose. Odpala go. Wchodzi na tego swaggera i wszystko gra i buczy a docker compose juz zadba zeby odpowiednio odpalic apke i baze danych itd

0

Jeśli zależy Ci na nie używaniu docker compose, to możesz użyć jakiejś bazy danych in-memory np h2

1

Tak patrze na stackoverflow. Nie masz po prostu bledu spowodowanego tym ze apka podnosi sie szybciej od bazy danych która nie jest jeszcze w stanie obsluzyc ruchu i dlatego sie wywala. Tj . Odpali sie kontener z baza danych i zaczyna podnosic baze w momencie jak sie odpali to od razu odpala sie apka ktora startuje szybciej bo jest mniejsza? (w docker compose "healthcheck") w googlach wyszukasz co i jak

0
Black007 napisał(a):

Mam podobny case, mam apkę, która korzysta z postgresa, mam to na githubie, i jak ktoś chce odpalić to ściąga docker-compose.yml z tego repo https://github.com/bartgora/Mockify/blob/master/docker-compose.yml

Jak wchodzę na Swaggera, to mam biały ekran

0

w na jaki url wchodzisz? http://localhost:8080/swagger-ui/index.html u mnie działa

docker-compose up -d
0

@Black007: Finalnie, twoje rozwiązanie okazało się najlepsze, dzięki

0

Kompletnie zamotałeś i na mój gust źle opisałeś zadanie.

Jak rozumiem jeden obraz to twoja aplikacja a drugi to co? Goły kontener z postgresem? Jakaś Twoja customowa aplikacja z postgresem?
Mam wrażenie, że ta ostatnia opcja więc pytanie po co? Czemu nie skonfigurowałeś w docker compose obrazu ze swoją aplikacją i osobnego obrazu (np. oficjalnego) z postgresem i nie skonfigurowałeś compose'a tak aby twoja apka czekała aż wstanie baza i z niej korzystała?

Z prostego problemu zrobiłeś wątek na 3 strony ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1