Jak dodać bazę danych SQLite3 w kontenerze z docker compose?

Jak dodać bazę danych SQLite3 w kontenerze z docker compose?
hubertsuder
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 miesiące
  • Postów:119
0

Witam serdecznie.

Może mi ktoś powiedziec jak skonfigurowac docker-compose.yml, żeby używał bazy danych sqlite3? mój Dockerfile wyglada następująco:

Kopiuj
FROM python:3.10.12
ENV PYTHONUNBUFFERED = 1
WORKDIR /code
COPY /var/docs/requirments.txt /code/
RUN pip install -r requirments.txt
COPY . /code/
CMD [ "python3", "manage.py" , "runserver", "0.0.0.0:9010"]
edytowany 1x, ostatnio: Riddle
RJ
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 6 godzin
  • Postów:436
1

Nie rozumiem po co miałbyś mieć SQLite w kontenerze skoro w zamyśle jest to file-based rozwiazanie. Po co kombinować? 😛

hubertsuder
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 miesiące
  • Postów:119
0

Do testów jest mi potrzebne. Później będę używał bazy danych postgresql.

RJ
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 6 godzin
  • Postów:436
0

No to skoro Ci potrzebna tylko na cele testowe to nie lepiej dołączyć sobie bazę do rozwiązania zamiast wirtualizowac? Chyba, że musisz to zwirtualizowac to musisz podać definicje serwisu w swoim docker-compose a nie w dockerfile i wtedy mieć connection string ktorym uderzysz do bazy.

hubertsuder
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 miesiące
  • Postów:119
0

chodzi o to, ze na serwerze przechodza wszystkie testy a aplikacja i tak nie dziala prawidlowo.... musze to zwirtualizowac w dockerze i sprawdzic czy bedzie chodzic. Mozesz mi podac przykładowy docker-compose.yml zeby to przetestowac? ucze sie dopiero dockera i sam nie jestem w stanie tego zrobic.

Ferdynand Lipski
  • Rejestracja:ponad 5 lat
  • Ostatnio:25 dni
  • Postów:77
7

Jeżeli uczysz się Dockera, to jest to doskonała chwila na to, by zrozumieć, że idealnym miejscem na kompaktowe bazy danych takie jak SQLite jest wolumen / zmapowany katalog, a nie przestrzeń kontenera.

Kopiuj
services:
  your-container:
    [...]
	volumes:
	  - database:/database # dostosuj ścieżkę dla kontenera
	  
volumes:
  database:

Oczywiście nikt nie broni do Dockerfile dodać COPY some_db.db /database/some_db.db, ale nie jest to zgodne ze sztuką i tylko utrudnia cały proces zachowania danych w przypadku nowej wersji kontenera, a takie posunięcie jest tylko robieniem sobie kompletnie pod górkę, z kompletnie niezrozumiałych powodów.

edytowany 1x, ostatnio: Ferdynand Lipski
hubertsuder
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 miesiące
  • Postów:119
0

Wklepuje komende sudo docker build . wszytko przechodzi. Potem biore numer contenera ktory został zbudowany i wpisuje sudo docker run #id-contneera i wyskakuje mi blad django.db.utils.OperationalError: unable to open database file. A moj docker-compose.yml wyglada nastepujaco:

Kopiuj
version: "3.9"

services:
  your-container:
	volumes:
	  - db.sqlite3:/db.sqlite3 # dostosuj ścieżkę dla kontenera

volumes:
  volumes:
    database:

nie wiem może coś źle robie...

edytowany 3x, ostatnio: Riddle
BA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 7 godzin
  • Postów:179
0

Docker compose odpalasz przez:

Kopiuj
docker-compose -f docker-compose.yaml up -d
edytowany 1x, ostatnio: Riddle
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:19 dni
  • Postów:3561
0
hubertsuder napisał(a):

Do testów jest mi potrzebne. Później będę używał bazy danych postgresql.

Jeden z najgorszych wyborów. Właściwie nic z doświadczeń nie da się przenieść
W SQLite kolumny nawet typów nie mają, ani prawdziwych rozmiarów.
NIC nie wytestujesz.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
AK
Błędów jakie strzelisz w konfiguracji sieci w dockerze - tez nie wytestujesz - jest a-sieciowa
RJ
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 6 godzin
  • Postów:436
1

Jak już naprawdę chcesz czegoś do testow integracyjnych to dlaczego nie odpalisz sobie od razu testowego konteneru z PostgreSQL 😛

Mówią, że .NET taki zły, a masz test containers i lecisz 😅

EDIT:
https://dotnet.testcontainers.org/
Tutaj możesz poczytać o co kaman, ale fluent API Ci mówi co to robi, więc możesz to zrobić manualnie 😊

EDIT 2:
Nawet masz paczkę pod pythona 😂

edytowany 3x, ostatnio: rjakubowski
KE
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 6 godzin
  • Postów:671
0

+1 dla przedmówców. Postgresa odpala się banalnie w Dockerze, dajesz image i chyba 3 zmienne środowiskowe (domyślna baza, user i hasło) i bangla bez żadnej dodatkowej konfiguracji.

dalbajob
  • Rejestracja:prawie 2 lata
  • Ostatnio:4 miesiące
  • Postów:149
0
hubertsuder napisał(a):

Wklepuje komende sudo docker build . wszytko przechodzi. Potem biore numer contenera ktory został zbudowany i wpisuje sudo docker run #id-contneera i wyskakuje mi blad django.db.utils.OperationalError: unable to open database file. A moj docker-compose.yml wyglada nastepujaco:

Kopiuj
version: "3.9"

services:
  your-container:
	volumes:
	  - db.sqlite3:/db.sqlite3 # dostosuj ścieżkę dla kontenera

volumes:
  volumes:
    database:

nie wiem może coś źle robie...

Kolega ci kazał zmapować wolumen, ale nazwał wolumen tak samo jak ścieżkę w kontenerze i się pogubiłeś, więc pokażę ci składnię na innym przykładzie:

Kopiuj
version: 3.9
services: 
  your-container:
    volume:
      - your-volume:/path/in/container
volumes:
  your-volume:

To sprawi, że wolumen o nazwie your-volume będzie widoczny w kontenerze pod ścieżką /path/in/container. To jest ścieżka do folderu, a nie do pliku.

To oznacza, że dostaniesz tam pusty katalog i musisz sobie tam stworzyć lub skopiować swój plik do SQLite, jeśli twoja aplikacja tego nie robi sama.

Natomiast dołączam się do sugestii, abyś użył Postgresa.

Przykładowo tak:

Kopiuj
version: 3.9
services:
  app:
    # tu to co masz dla tej twojej appki
    depends_on:
      - db
          
  db:
    image: 'postgres:16.1-alpine'
    container_name: db
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes: 
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

Ważne dla ciebie jest to, że:

  1. Możesz do kontenera przekazać stałe dane w zmiennych środowiskowych w sekcji environment. Ustawiasz w ten sposób użytkownika i hasło do Postgresa, ale również mógłbyś np. przekazać adres i port postgresa do swojej apki
  2. Kontenery uruchomione z jednego pliku docker-compose.yml są w jednej dockerowej sieci i "widzą" siebie nawzajem po swojej nazwie. Tak więc jeśli nazwiesz postgresa db w docker-compose'ie, to w aplikacji możesz się do niego połączyć po adresie hosta db (no i po domyślnym porcie 5432)
  3. depends_on określa jakie inne kontenery powinni być uruchomione zanim uruchomisz ten kontener. Tutaj to sprawi, że Docker uruchomi bazę (jeśli nie jest uruchomiona) przed tym, jak uruchomi apkę.
  4. Postgresa stawiasz inaczej niż swoją apkę, tj. używając image co oznacza, że pobierasz gotowca z repozytorium. Tutaj to jest obraz o nazwie postgres z tagiem wersji 16.1-alpine -

Poczytaj sobie tutaj https://hub.docker.com/_/postgres jakie zmienne środowiskowe możesz ustawić. Ja ci dałem jedynie użytkownika i hasło, co oznacza że dostaniesz bazę o tej samej nazwie co użytkownik. Ponadto te zmienne wpływają tylko na pierwsze uruchomienie, jak już się stan zapisze do wolumenu to nie zmienisz hasła tymi zmiennymi :p

Zobacz pozostałe 3 komentarze
dalbajob
Właśnie swoją drogą ta dokumentacja na oficjalnej stronie dockera jest zbyt skomplikowana dla początkujących moim zdaniem, idzie się zgubić w natłoku informacji
RJ
@fdsa: zawsze to chłopak musiałby coś doczytać jak Docker działa żeby to ogarnąć i większy by miał z tego użytek. Nie wiem w sumie - ja sam nie lubię dostawać ryby, bo wydaje mi się, że ktoś mnie ma za głupiego 😅
FD
@rjakubowski: tzn. nie korzystasz od nikogo z pomocy? ja też nigdy się o nic nie spytałem na forum czy internecie przez całe życie(z wyjątkiem opinii czy w ramach dyskusji), bo wszystko wygooglować można bez problemu. W realnym życiu czasem kupuję od kogoś pomoc za pieniądze, korzystanie z usług itp. ale w internecie już żadna pomoc nie jest potrzebna.
RJ
@fdsa: wiadomo, że korzystam, ale to nie o to chodzi, żeby zrobić copypastę, tylko pasowałoby zrozumieć, co, jak, gdzie i z czym... Wtedy jest rozwój, a nie HelloGPT i copy bezmyślne.
dalbajob
@rjakubowski: dlatego dodałem wyjaśnienia, a nie tylko gotowy przykład i elo, skopiuj sobie. Chłopak widać że jest zielony w temacie, więc nie widzę problemu żeby poprowadzić go za rączkę. Ja tak samo zaczynałem i korzystałem z gotowych przykładów, ale je modyfikowałem, analizowałem, i dociekałem dlaczego jest tak a nie inaczej
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)