Portál AbcLinuxu, 4. května 2025 17:35

Dotaz: Docker compose, jak uděla backup?

24.7.2023 13:47 Z
Docker compose, jak uděla backup?
Přečteno: 632×
Odpovědět | Admin
Zdravím, je tu někdo kdo rozumí Dockeru a jeho backupům? Chtěl jsem si před updatem aplikace vytvořit zálohu .tar balíček. Apka je nainstalovaná pomocí docker-compose. V Docker-compose je toto:
/usr/local/plausible # cat docker-compose.yml 
version: "3.3"
services:
  mail:
    image: bytemark/smtp
    restart: always

  plausible_db:
    image: postgres:12
    restart: always
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=postgres

  plausible_events_db:
    image: yandex/clickhouse-server:21.3.2.5
    restart: always
    volumes:
      - event-data:/var/lib/clickhouse
      - ./clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro
      - ./clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro
    ulimits:
      nofile:
        soft: 262144
        hard: 262144
    build: .

  plausible:
    image: plausibe_from_back:latest
    restart: always
    command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh db init-admin && /entrypoint.sh run"
    depends_on:
      - plausible_db
      - plausible_events_db
      - mail
    ports:
      - 8000:8000
    env_file:
      - plausible-conf.env

volumes:
  db-data:
    driver: local
  event-data:
    driver: local
  geoip:
    driver: local
root@ama10-openvas /usr/local/plausible # docker ps -a
CONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS          PORTS                          NAMES
d830993d7ea9   plausibe_from_back:latest           "sh -c 'sleep 10 && …"   58 seconds ago   Up 10 seconds   0.0.0.0:8000->8000/tcp         plausible_plausible_1
e03346b0dd88   postgres:12                         "docker-entrypoint.s…"   59 seconds ago   Up 10 seconds   5432/tcp                       plausible_plausible_db_1
20e9710d78b5   bytemark/smtp                       "docker-entrypoint.s…"   59 seconds ago   Up 10 seconds   25/tcp                         plausible_mail_1
e53a23ece76e   yandex/clickhouse-server:21.3.2.5   "/entrypoint.sh"         59 seconds ago   Up 10 seconds   8123/tcp, 9000/tcp, 9009/tcp   plausible_plausible_events_db_1
Abych to zabackupoval, dávám: "docker export" pro vytvořeni tar balíčku s image (backup), a importnu ho:
docker export 521652a81c22 > /root/backup_docker/yandex_`date -I`.tar
docker import - yandex_from_back < /root/backup_docker/yandex_2023-07-24.tar
V docker-compose file zaměním image, chci vyzkoušet backupovanou image:
#Puvodni:
  plausible_events_db:
    image: yandex/clickhouse-server:21.3.2.5

#Zmenim na:

  plausible_events_db:
    image: yandex_from_back:latest

viz:
# docker images
REPOSITORY                     TAG               IMAGE ID       CREATED             SIZE
yandex_from_back               latest            c23ef7bb8f72   About an hour ago   398MB
A pustím, docker-compose up:
root@ama10-openvas /usr/local/plausible # docker-compose down
Stopping plausible_plausible_1           ... done
Stopping plausible_plausible_db_1        ... done
Stopping plausible_mail_1                ... done
Stopping plausible_plausible_events_db_1 ... done
Removing plausible_plausible_1           ... done
Removing plausible_plausible_db_1        ... done
Removing plausible_mail_1                ... done
Removing plausible_plausible_events_db_1 ... done
Removing network plausible_default
root@ama10-openvas /usr/local/plausible # docker-compose  up -d
Creating network "plausible_default" with the default driver
Creating plausible_plausible_db_1 ... 
Creating plausible_mail_1         ... 
Creating plausible_plausible_db_1        ... done
Creating plausible_mail_1                ... done
ERROR: for plausible_plausible_events_db_1  Cannot create container for service plausible_events_db: No command specified

ERROR: for plausible_events_db  Cannot create container for service plausible_events_db: No command specified
ERROR: Encountered errors while bringing up the project.
Tady bych se chtěl zeptat, jestli v postupu zálohování postupuji správně, nebo jak tedy kontejner správně odzálohovat? Děkuji za radu.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.7.2023 14:15 čavo | skóre: 15
Rozbalit Rozbalit vše Re: Docker compose, jak uděla backup?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nie je mi jasné prečo potrebujete odkladať celý image. Ten sa prípadne znova stiahne a naštartuje. Jediné dáta by mali byť vo volumes, tak treba tie odzálohovať (do tar-u, alebo niečoho iného). Ak máte aj nejaké dáta mimo volumes, tak aj po nechcenom reštarte containeru o ne môžete prísť. Začína sa s čistým image a pripoja sa volumes, prípadne configs, secrets.
24.7.2023 14:44 Z
Rozbalit Rozbalit vše Re: Docker compose, jak uděla backup?
Aha, děkuji. Jak se to tohle třeba řeší, když bych si těch ty data z kontejneru vytáhnout a uložit jako backup lokálně? Má na to Docker nějaké udělátko?
Já právě na netu nenašel takové to "best practise", tak se ptám tady.
24.7.2023 15:32 prdel33
Rozbalit Rozbalit vše Re: Docker compose, jak uděla backup?
docker exec {shell co je v obrazu}, můžeš si v něm potom dělat co chceš, třeba něco přesunout do namountovaného volume. ale volume je idiomatický řešení, nemáš se co vrtat v běžícím kontejeru.
25.7.2023 14:36 Z
Rozbalit Rozbalit vše Re: Docker compose, jak uděla backup?
Takže pořešeno přes ten docker-compose samotný.
services:
  backupdb:
    image: [image]    
    environment:
      - TARGET=db-data
    volumes:
      - ./backup:/backup
      - db-data:/volume
    command: sh -c "tar -czf /backup/$${TARGET}.tar -C /volume ./"

  restoredb:
    image: [image]    
    environment:
      - SOURCE=db-data
    volumes:
      - ./backup:/backup
      - db-data:/volume
    command: sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xvf /backup/$${SOURCE}.tar"
A pak se ta DB narovná tímhle:
# stopnou se ty kontejnery
docker-compose run --rm backupdb
docker-compose run --rm restoredb
24.7.2023 14:22 hmmmw | skóre: 3 | blog: hmmmw
Rozbalit Rozbalit vše Re: Docker compose, jak uděla backup?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Sice souhlasím s komentářem výše, že bych si odložil bokem jenom volumes, kde jsou data. Nebo popřípadě použil export přímo z databáze, a pak to do nové prázdné importoval.

Ale jinak bych řek, že tvůj problém je stejný jako zde: https://serverfault.com/a/797619

Tedy při importu mu musíš podstrčit startovací command image, což vydoluješ: - ze svého dockerfilu - nebo na DockerHubu: https://hub.docker.com/layers/yandex/clickhouse-server/21.3.20.1/images/sha256-4eccfffb01d735ab7c1af9a97fbff0c532112a6871b2bb5fe5c478d86d247b7e?context=explore - nebo pomocí docker container inspect tvuj-container ..., což je popsáno v té první odpovědí na serverfault
24.7.2023 14:24 hmmmw | skóre: 3 | blog: hmmmw
Rozbalit Rozbalit vše Re: Docker compose, jak uděla backup?
Nějak špatně to naformátoválo odážky...

Tedy při importu mu musíš podstrčit startovací command image, což vydoluješ:
  • ze svého dockerfilu
  • nebo na DockerHubu: https://hub.docker.com/layers/yandex/clickhouse-server/21.3.20.1/images/sha256-4eccfffb01d735ab7c1af9a97fbff0c532112a6871b2bb5fe5c478d86d247b7e?context=explore
  • nebo pomocí docker container inspect tvuj-container ..., což je popsáno v té první odpovědí na serverfault
25.7.2023 14:47 Z
Rozbalit Rozbalit vše Re: Docker compose, jak uděla backup?
Díky
25.7.2023 15:16 Z
Rozbalit Rozbalit vše Re: Docker compose, jak uděla backup?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ještě bych měl jednu otázku, k čemu ten "docker export" vlastně je dobrý? Existuje něco, čím by to šlo odbackupovat jako Image, zároveň včetně té správně startovací sekvence Dockeru? Abych nemusel pouštět nějaké "docker inspecty", "runliky" a podobné věci?
26.7.2023 10:14 hmmmw | skóre: 3 | blog: hmmmw
Rozbalit Rozbalit vše Re: Docker compose, jak uděla backup?
Možná koukni na docker commit, který ti vezme současný stav kontejneru, a udělá ti z něj nový image, pokud je to to, o co se snažíš.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.