1. 程式人生 > >Docker學習筆記(一):使用docker搭建LNMP環境

Docker學習筆記(一):使用docker搭建LNMP環境

公司使用docker部署伺服器環境,之前沒有接觸過,於是使用阿里雲伺服器學習使用docker,記錄一下學習過程。

首先了解Docker,查看了很多網上的資料,說下自己的理解,docker與linux虛擬機器類似,是一個用來把打包好的環境映象放在容器中執行的工具(引擎),docker的好處是更加輕量級,效能開銷極小。比如想要在一臺新的linux機器上面執行PHP程式,我們需要在該機器上依次安裝nginx/apach,php,mysql。這時我需要複用該環境到第二臺機器上,則需要重新安裝以上軟體,而且還需要考慮這兩臺機器本身的linux系統的差異。此時我可以將第一臺機器上部署好的PHP環境打包生成一個映象,在第二臺機器上用docker拉取使用該映象,讓機器二上的PHP程式在該映象生成的容器中執行,該映象即可很方便的複用在更多的linux機器上而不需要擔心環境問題。

下面是docker的官方定義(參考菜鳥教程docker文件):

Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。

Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低。

首先安裝docker,centos的官方發行版本從6.5以上就核心支援docker了,可以直接執行以下命令完成安裝。

*我的測試環境是阿里雲官方的centos7.4映象(後續訪問中要注意本地環境與線上環境的區別),非root賬戶在命令前加sudo。

#yum -y install docker-io
安裝完成後啟用docker服務,可執行

#service docker start

安裝啟動完成後執行hello-world檢測是否成功

#docker run hello-world

*hello-world是官方提供的測試映象。在執行該命令時,docker將會做如下操作:首先檢測本地是否有一個叫hello-world的映象檔案,如果沒有,則從docker-hub(類似與github的的管理倉庫)上查詢名為hello-world的映象,若存在則下載到本地,若不存在,則返回找不到映象的錯誤。拿到映象之後使用它創造一個容器(container),然後執行容器,得到結果,docker容器的特性是如果該容器執行的映象中沒有可執行的服務,則使用後會立刻關閉該容器。


映象檔案可以直接使用dockerhub上別人已經建立好的映象,也可以自己建立一個新的映象使用。初學直接使用別人造好的輪子就好。

查詢mysql和php-fpm的映象檔案,docker search mysql和docker search php


搜尋出的映象檔案可以直接使用 -d表示後臺執行;-i標誌保證容器中的STDIN是開啟的;-t表示為建立的容器分配一個偽tty終端,進入可檢視和修改容器內容;映象名稱後面的冒號表示選取映象版本;-P表示埠對應,格式為宿主機埠:容器埠;--link表示容器之間相關聯,下面的例子表示可以直接在my-lnmp容器中訪問my-mysql容器中的內容;-e表示設定環境變數;-v表示掛載目錄,格式為宿主檔案或目錄:容器內檔案或目錄,檔案或目錄掛載後,可以在宿主機上傳檔案,對應的容器內部環境執行時,會執行對應掛載的檔案或目錄。

#docker run -P 3306:3306 --name my-mysql  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
#docker run -P 80:80 --name my-lnmp -v mywwwpath:/var/www/html -d richarvey/nginx-php-fpm --link mysql:db

*需要注意映象中的檔案目錄,可以在nginx配置檔案中查詢和修改對應目錄。

*映象拉取pull可以省略,docker會自動拉取本地不存在的映象,docker images可檢視本地映象列表。

一些常用容器操作命令:

檢視當前執行的容器
#docker ps
檢視當前未執行的容器
#docker ps -l
檢視所有操作過的容器
#docker ps -a
啟動/關閉/重啟容器
#docker start/stop/restart container-name
進入容器內部
#docker exec -idt container-name /bin/bash
刪除容器
#docker rm container-name
檢視容器資訊
#docker inspect container-name

使用docker ps檢視容器狀態,確保容器執行後,測試環境部署狀態,在設定掛載目錄mywwwpath下新建php檔案index.php

<?php
    $mysqli = new mysqli("ipaddress","root", "password"); 
    if(!$mysqli)  { 
        echo"database error"; 
    }else{ 
        echo"connect db successful"; 
    } 
    $mysqli->close(); 
    echo phpinfo();
?>
*訪問ip地址可直接執行php檔案,返回熟悉的phpinfo介面。需要注意埠開放,測試環境中的阿里雲控制檯需設定埠訪問規則開啟80埠。