天天看點

Docker -- 2 -- 利用docker部署網站和資料庫supervisor方式運作一個多程序的docker執行個體ngnix和php運作的環境ngnix,php,mysql集合運作的環境啟動一個真實的代碼參考連結

這次就利用docker進行一次真正的執行個體使用,使用docker搭建一個簡單的答題系統,這個系統是當時做來給網絡安全周做手機答題的系統,很簡單,代碼風格很差。

這篇主要記錄了三種docker使用的方式。

用supervisor方式運作一個多程序的docker執行個體

建立一個ngnix和php運作的環境

建立一個ngnix,php,mysql集合運作的環境,使用docker-compose建構

Docker -- 2 -- 利用docker部署網站和資料庫supervisor方式運作一個多程式的docker執行個體ngnix和php運作的環境ngnix,php,mysql集合運作的環境啟動一個真實的代碼參考連結
感覺docker的東西越看越多,從剛開始的簡簡單單的一個docker run,到現在看到要build自己的鏡像,compose,也就是以前的Fig,配置網絡,還有swarm的docker叢集,一點一點來吧。

先把兩個附件寫在這裡吧

Docker 容器在啟動的時候開啟單個程序,比如,一個 ssh 或者 apache 的 daemon 服務。但我們經常需要在一個機器上開啟多個服務,這可以有很多方法,最簡單的就是把多個啟動指令放到一個啟動腳本裡面,啟動的時候直接啟動這個腳本,另外就是安裝程序管理工具。這裡使用程序管理工具 supervisor 來管理容器中的多個程序。使用 Supervisor 可以更好的控制、管理、重新開機我們希望運作的程序。

首先創一個檔案夾叫做<code>supervisor</code>,目錄結構為

其中檔案Dockerfile檔案内容為:

檔案<code>supervisord</code>内容為:

使用指令進行建構

輸出:

使用<code>docker ps</code> 一下

Docker -- 2 -- 利用docker部署網站和資料庫supervisor方式運作一個多程式的docker執行個體ngnix和php運作的環境ngnix,php,mysql集合運作的環境啟動一個真實的代碼參考連結

使用指令<code>docker exec</code>進入container裡面看看

使用passwd修改一下密碼,然後在本機的指令行裡進行ssh連接配接吧。

該方法就是直接使用docker指令進行建構一個ngnix,php結合運作的環境,沒有使用docker-compose。

先使用者根目錄<code>~</code>下建立目錄,并将該目錄設定為Docker的共享目錄。

其中<code>default.conf</code>檔案内容,這是個nginx的配置檔案

index.html 裡寫一句 HelloW0rld,phpinfo.php裡面寫一個<code>&lt;?php phpinfo();?&gt;</code>。

然後在指令行下執行指令

好的,如果不出意外,就可以看到phpinfo的界面了。這個是沒有添加mysql的測試環境,直接在目錄<code>~/Workspace/tmp/www</code>下面放網頁就可以直接使用了。

Supervisor給出了一種能夠在container中運作多個線程的方法,但是現在還是不知道要怎麼樣把自己的web服務部署到container中,資料庫怎麼建,可以有人會說直接使用SFTP将網站直接傳到container裡,安裝資料庫,配環境,但是docker中一旦container被删除,内容就沒了。像這樣将所有服務放在一個容器内的模式有個形象的非官方稱呼:Fat Container。與之相對的是将服務分拆到容器的模式。從Docker的設計可以看到,建構鏡像的過程中可以指定唯一一個容器啟動的指令,是以Docker天然适合一個容器隻運作一種服務,而這也是官方更推崇的。下面就記錄一下部署一個簡單的php程式和資料庫關聯的測試環境。

整體的檔案結構是這樣的

我們建立一個這樣的目錄

mysql目錄下的Dockerfile檔案隻有一行<code>FROM mysql:5.6</code>,也就是直接使用mysql官方鏡像5.6,然後使用指令

建構自己的鏡像phpenv/mysql。

使用指令

啟動鏡像,将容器的3306端口綁定到本機的3306端口,其中參數<code>-v</code>後代表使用<code>~/Docker/test/data/mysql</code>挂在到鏡像的<code>/var/lib/mysql</code>,也就是替代源鏡像的資料庫檔案目錄,讓資料庫檔案目錄暴露在本機上,做到資料庫内容的持久化。<code>MYSQL_ROOT_PASSWORD</code>為設定mysql的一個root密碼。

運作結果

使用DBeaver連接配接後

Docker -- 2 -- 利用docker部署網站和資料庫supervisor方式運作一個多程式的docker執行個體ngnix和php運作的環境ngnix,php,mysql集合運作的環境啟動一個真實的代碼參考連結

檢視一下目前<code>~/Docker/test/data/mysql</code>資料庫目錄下的檔案

建立一個庫docker_test後<code>~/Docker/test/data/mysql</code>資料庫目錄下的檔案

可以發現資料庫已經建立好了,也如下圖

Docker -- 2 -- 利用docker部署網站和資料庫supervisor方式運作一個多程式的docker執行個體ngnix和php運作的環境ngnix,php,mysql集合運作的環境啟動一個真實的代碼參考連結

為了驗證資料庫資料的持久型,我們先停止目前運作的container并産出它,然後從鏡像啟動一個新的container,如指令

再次連接配接資料庫驗證,發現剛才建立的庫<code>docker_test</code>還在,資料庫檔案持久型儲存了。

待完善

nginx在建構的時候要替換兩個配置檔案,Dockfile

挂載檔案在docker-compose裡進行定義。

php什麼也不做,隻通過Dockfile

來建構

docker-compose檔案

Docker -- 2 -- 利用docker部署網站和資料庫supervisor方式運作一個多程式的docker執行個體ngnix和php運作的環境ngnix,php,mysql集合運作的環境啟動一個真實的代碼參考連結

下面的代碼是今年網絡安全周的一個手機線上答題系統,代碼很挫,大牛誤笑

将目錄直接放在<code>~/Docker/test/htdocs</code>下面,然後在test目錄下執行<code>docker-compose up</code>,正常情況下,就會跑起來上面的容器,然後按照代碼的README将資料庫部署就可以運作了。

Docker -- 2 -- 利用docker部署網站和資料庫supervisor方式運作一個多程式的docker執行個體ngnix和php運作的環境ngnix,php,mysql集合運作的環境啟動一個真實的代碼參考連結

<a href="https://github.com/yeasy/docker_practice/">Docker 從入門到實踐</a>

<a href="#">第一本Docker書</a>

<a href="https://github.com/ma6174/blog/issues/8">如何進入一個正在運作的Container</a>

<a href="http://avnpc.com/pages/build-php-develop-env-by-docker">Docker在PHP項目開發環境中的應用</a>

原文連結:

<a href="http://dengnanyi.com/2016/12/24/2016_12/docker-learn-3/">http://dengnanyi.com/2016/12/24/2016_12/docker-learn-3/</a>