2016-04-05 25 views
5

Sto eseguendo postgres all'interno di un contenitore di finestra mobile per limitare la quantità di risorse di sistema a cui ha accesso. Sto avendo qualche problema a capire come rendere persistenti i dati. Ho letto i seguenti articoli:Postgres nei dati persistenti di Docker

https://www.andreagrandi.it/2015/02/21/how-to-create-a-docker-image-for-postgresql-and-persist-data/

http://container42.com/2013/12/16/persistent-volumes-with-docker-container-as-volume-pattern/

che suggeriscono utilizzando un unico contenitore di dati, e poi avere il mio link postgres contenitore ad esso. Quello che non riesco a capire è; qual è il vantaggio di questo? Per quanto ne so, se per qualche motivo la finestra mobile si spegne (ad esempio, spostandola su una macchina fisica diversa), il contenitore dei soli dati smette di funzionare e tutto il suo contenuto viene perso? Ho provato a creare un volume nel contenitore Postgres, ma in realtà non sembra salvare nulla sul disco.

Ecco il file della finestra mobile. Che cosa sto facendo di sbagliato?

FROM ubuntu 
MAINTAINER Andrew Broadbent <[email protected]> 

# Add the PostgreSQL PGP key to verify their Debian packages. 
# It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc 
RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 

# Add PostgreSQL's repository. It contains the most recent stable release 
#  of PostgreSQL, ``9.3``. 
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main" > /etc/apt/sources.list.d/pgdg.list 

# Install ``python-software-properties``, ``software-properties-common`` and PostgreSQL 9.3 
# There are some warnings (in red) that show up during the build. You can hide 
# them by prefixing each apt-get statement with DEBIAN_FRONTEND=noninteractive 
RUN apt-get update && apt-get install -y python-software-properties software-properties-common postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3 

# Note: The official Debian and Ubuntu images automatically ``apt-get clean`` 
# after each ``apt-get`` 

# Run the rest of the commands as the ``postgres`` user created by the ``postgres-9.3`` package when it was ``apt-get installed`` 
USER postgres 

# Create a PostgreSQL role named ``docker`` with ``docker`` as the password and 
# then create a database `docker` owned by the ``docker`` role. 
# Note: here we use ``&&\`` to run commands one after the other - the ``\`` 
#  allows the RUN command to span multiple lines. 
RUN /etc/init.d/postgresql start &&\ 
    psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\ 
    createdb -O docker docker 

# Complete configuration 
USER root 
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf 
RUN echo "listen_addresses='*'" >> /etc/postgresql/9.3/main/postgresql.conf 

# Expose the PostgreSQL port 
EXPOSE 5432 

# Add VOLUMEs to allow backup of config, logs and databases 
RUN mkdir -p /var/run/postgresql && chown -R postgres /var/run/postgresql 
VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"] 

# Set the default command to run when starting the container 
USER postgres 
CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"] 

risposta

5

Questo risponde alla tua domanda su contenitore di dati: docker mounting volumes on host

Riguardo al vostro dockerfile, vorrei suggerire che si sia:

1) utilizzare modello contenitore di dati

2) montare il volume per ospitare la macchina specificando: docker run -v [host-path]:[container-path] ..., in modo che i dati vengano conservati in un posto nel tuo host e non andranno persi dopo la rimozione del contenitore.

Rif: https://docs.docker.com/engine/tutorials/dockervolumes/#/mount-a-host-directory-as-a-data-volume