使用docker部署PostgreSQL資料庫

2021-09-19 11:04:48 字數 1950 閱讀 3049

原理上,深入淺出docker 一文講的語言會更科學,我只撿不一定準確但直觀而符合表面理解的一些講一下。

docker提供了基於作業系統級和應用級虛擬化的應用部署解決方案。它的出現讓在伺服器上部署應用免去了作業系統,支援系統等一系列的搭建,而把它們簡化為映象,容器,實現快速部署。

docker將應用所需要的底層系統支援,作業系統支援,資料庫支援,應用本身和應用的資料分離開來,可以從任意層級上在乙個擁有docker技術的電腦上對應用進行部署。每一層被抽象成了映象(image),而映象跑在伺服器上便成了容器(container),相當於虛擬機器。跑起乙個應用級別的容器,會自動獲取它所需要的向下級別的映象。這些都可以通過雲端大量現成的資源和幾行指令碼命令實現。

docker解決了伺服器應用快速部署的問題。僅需要乙個dockerfile或是一兩行命令,便可以將乙個應用部署到伺服器上並立刻投入使用。存在的問題也有一些,比如資料層遷移的命令蹩腳,容器啟動後不能重新埠繫結,目前只能跑在linux上等。還有許多有待我這個剛入手沒多久的小白還要探索的問題。

在正題之前,你需要:

brew install caskroom/cask/virtualbox
第二點,確保docker映象伺服器跑起來。在mac下需要執行quickstart,你會注意到它其實就是啟動乙個指令碼,讓linux虛擬機器的伺服器可以通過虛擬網路被mac訪問到。如果直接開啟命令列,會提示

cannot connect to the docker daemon. is the docker daemon running on this host?
在linux上,docker指令必須sudo。否則也會提示找不到。

在mac上或者windows上尤其注意一點。docker伺服器跑在linux虛擬機器上。所以後續牽扯到目錄掛載的時候最好可以直接進入虛擬機器寫指令。

在docker上快速部署postgresql資料庫,其實可以直接參考這裡提供了docker-postgres的官方解決方案。

其實核心只有一句話。

其中的-p 的意思是埠繫結。這是docker裡很重要的概念。docker可以理解為虛擬機器。你需要將真機的埠和虛擬機器埠進行繫結,這樣可以通過訪問docker映象伺服器在真機上的埠,訪問到psql資料庫埠5432,進入docker映象之中。如果不指定-p,外界是無法訪問docker內部,無法對資料庫增刪改查。

這時伺服器會新建乙個卷目錄用來存放真正的資料庫內容。換句話說,這個卷是唯讀的,通過容器備份提交什麼的根本無法保留資料庫資料,甚至是表的結構。這個時候就需要介紹乙個docker的新概念:資料卷。類似於linux掛載的概念。

具體可以參考

這裡只說怎麼快速部署。

第一步:在任意機子上建立乙個映象,指定資料卷位置,並將其掛載到虛擬機器上

-v ./data:/var/lib/postgresql/data/pgdata -d -p ***x:5432 postgres

多的這一句

-v ./data:/var/lib/postgresql/data/pgdata
意思是:講本機當前目錄下新建乙個data目錄,與虛擬機器裡的資料庫目錄對應起來。注意這裡必須是linux下的目錄。如果在mac或者windows上操作務必注意。如果你把mac/windows目錄對映到了「虛擬機器的虛擬機器」裡,會因為訪問許可權不足而讓docker崩掉。

第二步:按照你指定的埠訪問資料庫,做資料初始化。包括建表和插入初始資料。

第三步:備份資料卷。也就是上面的./data目錄。

第四步,將這個資料卷放到你的伺服器上

第五步和第一步一樣。但是此時,你的資料卷裡面已經有之前儲存的內容了。

類似。docker也經常被設計成唯讀的,作為應用程式的初始狀態。其實這麼複製挺麻煩的,還需要新建乙個資料卷。向上面那個例子裡,「家裡的電腦」其實沒用。教程裡甚至提供了即時建立並刪除容器的命令只為儲存乙個資料卷和容器名稱的對應關係,日後掛載方便。

dockerfile最佳實踐

Docker 使用Docker部署Node服務

docker 是乙個開源的容器引擎。開發者可以將自己的應用以及依賴打包為乙個可移植的容器,然後發布到 linux 機器上。它類似於乙個輕量級的虛擬機器,極大地方便了使用者在伺服器端部署和管理應用環境。apt install docker.io安裝成功後檢視docker版本 建立package.jso...

使用Docker部署Gitlab

由於公司的 伺服器已使用gitosis搭建,但由於使用者和許可權管理太麻煩,現在想在原有伺服器上再搭建gitlab,使用gitlab官方方法直接安裝,會導致與gitosis衝突,使得gitosis不可用,因為要保持兩個服務同時存在,所以就想到利用docker來搭建gitlab。以下以ubuntu 1...

使用docker部署gitlab

docker build t lemonbar gitlab 注意此處的 不是句號,是代表dockerfile所在的路徑,代表當前路徑。t是build出來的image的名字。docker push lemonbar gitlab 可以通過push命令,來把自己的image上傳到public regi...