簡體   English   中英

將數據庫包裝在docker映像中

[英]wrapping DB in docker image

我就是不明白。 據我了解,Docker容器是無狀態的,當您停止容器時,任何狀態都會丟失。 將數據庫包裝到Image中的想法和方法是什么,以及如何保存數據? 我對此主題找不到明確的解釋。 有人可以解釋一下基本知識嗎?

容器內部運行的DB的數據必須存儲在所謂的卷容器中,或者存儲在裝入 容器中的主機文件夾中。

有關更多信息,請參閱文檔

您可以使用Docker的卷共享功能來做到這一點。 是Docker的Docker官方文檔。

我不確定是否有明確的解釋。 這個想法是您創建2個docker映像。 假設您正在運行Postgres,則將創建第一個圖像作為數據容器。 您可以“泊塢窗運行”它,但是它什么也沒做(也許您的命令是sleep infinity,它將使泊塢窗保持快樂)。 然后,您再次運行該容器,這一次從當前正在運行的容器中裝入卷。 這會將卷從第一個實例安裝到第二個實例中。 這是我執行此操作的示例:

db容器

我首先運行的容器聲明了一些將在第二個容器中掛載的卷,這是我運行第一個容器的方式:

docker run -name abdata tacodata/abroute_docker_db

然后第二個:

docker run -name pgsql --volumes-from abdata tacodata/abroute_docker_postgres absql 

--volumes-from的關鍵來自於您首先從Dockerfile構建映像時,這里是我的第一張映像中的Dockerfile:

FROM tacodata/abroute-docker-base

MAINTAINER Greg Fausak <greg@tacodata.com>

RUN pip install web.py

COPY PG.sql /usr/local/etc/
COPY abinit abadm.py /usr/local/bin/

VOLUME ["/var/lib/postgresql"]
VOLUME ["/etc/postgresql"]
VOLUME ["/run/postgresql"]

ENTRYPOINT ["abinit"]

使用此技術,當我運行第二個映像並從the_first_image執行--volumes-時,會將在Dockerfile中聲明的每個VOLUME從第一個映像安裝到第二個。

通過這種方法可以得到的一個可愛的事情是,第一個映像可以完成創建數據庫,創建用戶等工作。因此,第二個映像只需要與運行應用程序有關。 在我的ENTRYPOINT中,我設置了一個文件信號量。 當第一個圖像“完成”時,它觸摸一個文件,第二個圖像等待該文件的創建。 因此,第二張圖片在第一張圖片完成之前不會開始。

長話更長,我和你在一起。 這只是解決了問題。 與其在運行數據庫的容器中沒有持久性數據,我在另一個容器中具有持久性數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM