2015-08-12 5 views
3

Я только что создал свое первое dockerized приложения, и я использую Докер-Compose, чтобы запустить его на моем сервере клиентов:Как обрабатывать журналы хранения и резервного копирования и журналы приложений со многими связанными контейнерами?

web: 
    image: user/repo:latest 
    ports: 
    - "8080:8080" 
    links: 
    - db 

db: 
    image: postgres:9.4.4 

Он предоставляет REST API (Node.js) через 8080 порт. REST API использует базу данных Postgres. Он работает нормально. Моя идея состоит в том, что я передам этот файл (docker-compose.yml) моему клиенту, и он просто запустит docker-compose pull && docker-compose up -d каждый раз, когда он захочет вытащить новый код приложения из репо (при условии, что у него есть права на доступ к репозиторию user/repo.

Однако я должен обрабатывать две задачи:. копии базы данных и резервных копий журнала

  1. Как я могу выставить базу данных на хост (докер хост) системы, например, определить хрон, что будет делать дамп базы данных и хранить его на S3?

  2. Я прочитал статью об объемах хранения контейнеров и докеров. Как я понимаю, в моей настройке все файлы базы данных будут храниться в «контейнерной памяти», которая будет потеряна, если контейнер будет удален с хоста. Поэтому я должен использовать том докера, чтобы правильно хранить данные базы данных на стороне «хозяина»? Как я могу сделать это с изображением postgres?

  3. В моем приложении я записываю всю информацию в stdout и stderr в случае ошибок. Было бы, если бы эти журналы были «потоковыми» непосредственно в некоторые файлы на хост-системе, поэтому они могли бы быть скопированы (например, с помощью cron job?) - как я могу это сделать? Или, может быть, есть лучшее aproach?

Извините за столько вопросов, но я новичок в докер-мир, и это очень трудно для меня, чтобы понять, как это на самом деле работает и как это должно работать.

ответ

4
  1. Вы можете выполнить команду на работающем контейнере для создания резервной копии, например docker exec -it --rm db <command> > sqlDump. Я не знаю много о postgres, но в этом случае создаст дамп на stdout, а > sqlDump перенаправит его на файл sqlDump, который будет создан в текущей рабочей папке хостов. Затем вы можете включить этот созданный файл дампа в свою резервную копию. Это можно сделать отлично с cronjob, определенным на хосте. Но гораздо лучшее решение связано в следующем параграфе.

  2. Если вы запускаете свои контейнеры, как описано выше, ваши тома удаляются при удалении контейнера. Вы можете использовать второй подход к использованию volume containers as described here. В этом случае вы можете удалить и повторно создать, например. контейнер db без потери ваших данных. Резервная копия может быть создана очень просто, а затем через временный контейнерный экземпляр following these instructions. Предполагая /dbdata это место, где ваш объем установлен, который содержит данные базы данных для резервного копирования:

    docker run --volumes-from dbdata -v $(pwd):/backup <imageId> tar cvf /backup/backup.tar /dbdata 
    
  3. Начиная с версии 1.6, вы можете определить log driver для экземпляра контейнера. С этим вы можете взаимодействовать, например. с вашим syslog, чтобы иметь записи журнала на форуме /var/log/syslog.Я не знаю, S3, но, возможно, что дает вам некоторые идеи:

    docker run --log-driver=syslog ... 
    

 Смежные вопросы

  • Нет связанных вопросов^_^