3 ms·
I've been trying out Docker recently but haven't tried running persistent services in it yet (only long running programs like apps). From what I've gathered so
by sehrope 13y ago
I've been trying out Docker recently but haven't tried running persistent services in it yet (only long running programs like apps). From what I've gathered so far, Docker allows you to specify volumes (via -v /host/path:/container/path) that are mounted directly and don't get included in the container's copy-on-write filesystem (basically shared directories with the host). You can use this to pass data into the container (ex: a SQL file to init your schema) or pass data out of the container (ex: the DB files themselves or the logs). I've been using the latter to centralize Dokku logs[1].
To split out the Postgres setup and the initial schema setup, one idea might be to have a the CMD for the container run a script to automatically check for a bootstrap file on startup and run it. The bootstrap file could be specified via a volume mount. To use the container with a different dev setup (i.e. a different bootstrap SQL script) you'd simply start up the container with the shared directory pointing somewhere else.
If you want to save the Postgres data files themselves outside of the container you can again do it with volume mounts but you'll need some way to keep track of which goes where. The volume mounts are specified each time you startup the container so you need something to save those. For Dokku specifically there's the PG plugin and it looks like it does exactly this[2]. I haven't use it but I guess it validates the idea.
This seems like a general trend with Docker; it's really cool tech but it's pretty low level so you need something atop it to make usage smoother.
[1]: https://github.com/sehrope/dokku-logging-supervisord https://github.com/sehrope/dokku-logging-supervisord
[2]: https://github.com/Kloadut/dokku-pg-plugin/blob/master/commands#L28 https://github.com/Kloadut/dokku-pg-plugin/blob/master/comma...