使用 docker 搭建 web 服務環境

weixin_33763244發表於2017-09-14

本文目的

做過開發的人對開發環境的安裝、配置應該都不會太陌生,不管你做什麼開發,對開發環境都會具有一定的依賴性的。對於 PHP 的 Web 開發來說,開發環境至少要有一個 Web 伺服器(如 Apache、Nginx)、一個資料庫伺服器(如 MySQL)和一個 PHP 解析器吧,如果你的 PHP 程式碼使用的一些擴充套件,那你還需要給你的 PHP 安裝上這些擴充套件,那樣你的 PHP 程式碼才能夠順利地跑起來。對於一個只想靜靜地敲程式碼的開發人員來說,開發環境的安裝與配置這種事情,只要經歷一次就已經很折騰人了。可是,事情往往不能按人們的意願進行的,你保不準會重灌下系統,也保不準會換一個新的環境。總之就是,你會偶爾需要重新安裝配置你的的開發環境!

你可以回想一下,上一次安裝配置你的開發環境花費了多少時間,你所需要的 PHP 擴充套件是不是到執行時報錯了才記起來沒安裝的呢?還好,自從有了 Docker 之後,媽媽再也不用擔心我的開發環境的問題了。使用 Docker ,開發環境只需要安裝配置一次,之後搭建相同的開發環境很簡單,只需要一條命令即可完成!

這就是本文的目的,介紹 Docker 下安裝配置 Web 的服務環境,實現一次安裝配置,多次重用、跨平臺重用的功能。

Docker 概述

Docker 是什麼?可以將 Docker 理解為打包環境的容器,它可以將環境打包成映象,在需要的時候,再基於該映象來建立容器,這樣所需要的環境就回來了。剛剛提到了 Docker 的兩大核心概念,映象和容器。

Docker映象是為了滿足特殊用途而按照Docker的規則製作的應用,有點兒類似於Win-dows裡面的安裝軟體包。容器都是基於映象而建立的,基於一個映象可以建立若干個名字不同但功能相同的容器。映象是靜態的,容器是動態的。

除了映象和容器之外,還有兩個概念需要了解一下的,那就是倉庫和 docker-compose。Docker 倉庫是存放映象的地方,我們可以從 Docker 倉庫中拉取映象到本地,然後再基於映象建立容器。docker-compose 是管理容器的。Docker 的思想是一個容器只做一件事情,一個開發環境中可能會使用到多個容器,比如 Web 服務環境會使用到 PHP 、Nginx、MySQL 等等。那麼一個 Web 服務環境就需要有三個容器,並且這些容器之間是存在依賴關係的,Nginx 依賴 PHP,PHP 依賴 MySQL。有了 docker-compose 就可以很好地管理這些容器了,它可以根據容器之間的依賴關係來決定每個容器的啟動順序和關閉順序,可以管理各容器與宿主機器之間的埠對映關係,也可以配置容器與宿主機器之間的資料共享策略等等。

國內的映象倉庫

由於地理位置的原因,國內訪問 Docker 的官方倉庫是比較慢的,所以在這裡介紹一個國內的 Docker 倉庫:靈雀雲。靈雀雲映象倉庫中彙集了大量來自社群的優質作品,讓使用者組合、複用容器化微服務,輕鬆搭建新一代雲端應用。

搭建 Web 服務環境

本文的重點是使用 Docker 搭建一套 Web 服務環境,如果在你的環境中還沒有安裝 Docker,可以參考這裡自行安裝。

安裝了 Docker 之後,搭建 Web 服務環境就很簡單了,只需要一個檔案,一條命令即可!

一個檔案: docker-compose.yml

nginx:
    image: index.alauda.cn/library/nginx
    links:
        - phpfpm
    ports:
        - "80:80"
        - "443:443"
    volumes:
        - /Users/chenishr/www:/usr/share/nginx/html
        - ./nginx.conf:/etc/nginx/nginx.conf
        - ./nginx.d:/etc/nginx/conf.d

mysql:
    image: index.alauda.cn/library/mysql
    environment:
        MYSQL_ROOT_PASSWORD: qazasdedc123
    ports:
        - "3306:3306"

phpfpm:
    image: index.alauda.cn/library/php:7.0-fpm
    links:
        - mysql
    volumes:
        - /Users/chenishr/www:/var/www/html
    ports:
        - "9000:9000"
上面的檔案內容很簡單,它定義了三個容器,分別是 nginx、mysql 和 phpfpm 。每個容器定義裡包含了一些資訊,這裡簡單介紹一下。

image:這個欄位表示該容器是基於那個映象來建立的
links:表示在該容器內部需要訪問那個其它的容器,該名字在容器內部的表現類似於域名,它會綁 定對應容器的 IP
ports:將容器內部的埠對映到宿主機器中
volumes:配置容器與宿主機器的共享檔案或者目錄

一條命令

有了上面的 docker-compose.yml 檔案之後,只需要一條命令即可啟動所有的容器,也就是搭建好了整個 Web 服務環境了!

docker-compose up -d

最後

有了 Docker 之後,搭建環境從未有過如此簡單。

本文只是介紹了 Docker 的最基本的應用而已,它還很多用途而不僅限於本文。它可以實現多種版本的軟體並存同時工作,比如,我可以在一個電腦上同時使用 PHP7 和 PHP5 而不會造成混淆。當然,還有其它的 …

相關文章