這次就利用docker進行一次真正的執行個體使用,使用docker搭建一個簡單的答題系統,這個系統是當時做來給網絡安全周做手機答題的系統,很簡單,代碼風格很差。
這篇主要記錄了三種docker使用的方式。
用supervisor方式運作一個多程序的docker執行個體
建立一個ngnix和php運作的環境
建立一個ngnix,php,mysql集合運作的環境,使用docker-compose建構
感覺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> 一下
使用指令<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><?php phpinfo();?></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連接配接後
檢視一下目前<code>~/Docker/test/data/mysql</code>資料庫目錄下的檔案
建立一個庫docker_test後<code>~/Docker/test/data/mysql</code>資料庫目錄下的檔案
可以發現資料庫已經建立好了,也如下圖
為了驗證資料庫資料的持久型,我們先停止目前運作的container并産出它,然後從鏡像啟動一個新的container,如指令
再次連接配接資料庫驗證,發現剛才建立的庫<code>docker_test</code>還在,資料庫檔案持久型儲存了。
待完善
nginx在建構的時候要替換兩個配置檔案,Dockfile
挂載檔案在docker-compose裡進行定義。
php什麼也不做,隻通過Dockfile
來建構
docker-compose檔案
下面的代碼是今年網絡安全周的一個手機線上答題系統,代碼很挫,大牛誤笑
将目錄直接放在<code>~/Docker/test/htdocs</code>下面,然後在test目錄下執行<code>docker-compose up</code>,正常情況下,就會跑起來上面的容器,然後按照代碼的README将資料庫部署就可以運作了。
<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>