摘要:最近部署上線一個項目,新的服務器,在生產環境安裝配置等各種東西一大堆很麻煩。本文是我學習并使用部署項目的一個記錄。另外我們可以部署不同版本的應用,例如,并且互不干擾。之后部署只需要移植鏡像生成容器,就能保證環境的一致。需要使用三個鏡像。
最近部署上線一個項目,新的服務器,在生產環境安裝配置nginx、php、mysql、git、composer等各種東西一大堆很麻煩。docker已經火了一段時間,已經成了后端和運維的必備技能,之前老大也說要嘗試下,于是就來體驗一下docker的魅力。本文是我學習并使用docker部署項目的一個記錄。
docker優勢docker的主要優勢可以總結為:一次構建,到處部署。當我們使用docker構建好項目后,在開發環境、測試環境、生產環境都可以使用統一的鏡像來部署,保證了環境的一致。并且docker支持linux、mac os、windows三大平臺,代碼運行在容器中,不受外部操作系統的影響,只和你的鏡像有依賴關系。
另外我們可以部署不同版本的應用,例如mysql5.5、mysql5.7,并且互不干擾。
操作思路關于docker的安裝和相關概念在此都不贅述了,網上有很多資料,說下具體實施的思路。
正確的使用方式不是項目完成后才開始構建docker鏡像,而是項目架構、依賴、環境確定了之后就構建和配置好docker鏡像,之后代碼的開發和運行都在容器之中。之后部署只需要移植鏡像生成容器,就能保證環境的一致。
我這個項目很簡單,只用到nginx、php、mysql這三件套,nginx使用php-fpm作為cgi解析器。需要使用三個鏡像:nginx、php-fpm、mysql。為什么要用三個鏡像而不是把這三個集成到一個大鏡像中?這是docker推薦的做法,鏡像之間盡量解耦,方便復用,避免臃腫的鏡像,容器間通過網絡連接起來。
官方提供了很多優質鏡像,我們只需要挑選并基于官方鏡像來配置就好。
構建鏡像完整文件詳見我的github
nginx鏡像DockerFile:
FROM nginx:1.10 ADD nginx.conf /etc/nginx/nginx.conf ADD site.conf /etc/nginx/conf.d/ ADD mkdir.sh /opt/ RUN chmod +x /opt/mkdir.sh && /opt/mkdir.sh
將基本配置和站點配置復制進去,用shell腳步來創建好log文件夾
php-fpm鏡像DockerFile:
FROM php:7.0-fpm ADD apt-list /opt/ RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak && cat /opt/apt-list > /etc/apt/sources.list && apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev RUN docker-php-ext-install -j$(nproc) iconv mcrypt && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install -j$(nproc) gd && docker-php-ext-install pdo_mysql && docker-php-ext-install zip RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && composer config -g repo.packagist composer https://packagist.phpcomposer.com
php鏡像的是最麻煩的,要裝系統依賴,php擴展,composer,還要設置環境變量。php擴展那塊參考官方鏡像dockr-hub-php
使用了apt,所以我們要修改apt源,官方php鏡像是基于debian的,不是ubuntu的源。
dockerfile一個run建一層,這里建議apt install作為一層,安裝php擴展作為一層,而不是都放在一層。這樣的好處就是如果第二層php擴展裝失敗了,不用再跑一遍apt install。最后一層我們裝上composer。
為了讓php版本一致,我們應該調用php容器內的php作為cli:
docker run -it -v $PWD:/opt/code -w /opt/code my-php php -v
命令太長了,我們可以做個alias,在~/.bash_aliases中加入一行(注意最后空格):
alias myphp="docker run -it -v $PWD:/opt/code -w /opt/code --rm my-php "
我們在yourpath/opt/code下創建laravel應用,修改權限,注意在宿主機將你加入www-data group:
cd ~/docker-php/opt/code myphp composer create-project --prefer-dist laravel/laravel . sudo chown -R www-data:www-data . && sudo chmod -R 775 .mysql鏡像
DockerFile:
FROM mysql:5.7
mysql最簡單,直接用官方的就行了
docker-compose啟動容器我們現在有三個鏡像,如果一個個啟動、連接、掛載很麻煩,官方提供了docker-compose工具,將配置寫在一起,一鍵啟動。
docker-compose.yml:
nginx: build: ./nginx ports: - "80:80" links: - "php" volumes: - ~/docker-php/opt:/opt php: build: ./php ports: - "9000:9000" links: - "mysql" volumes: - ~/docker-php/opt:/opt mysql: build: ./mysql ports: - "3306:3306" volumes: - ~/docker-php/opt/data/mysql:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 123456
使用docker-compose up命令啟動容器組:
啟動訪問 yourhost:80 可以看到熟悉的laravel歡迎頁面:
進入mysql容器建個數據庫建個表測試一下數據庫連接:
docker exec -it dockerphp_mysql_1 bash
修改yourpath/opt/code/routes:
測試了一下報錯:
SQLSTATE[HY000] [2002] Connection refused
google了一下,修改一下.env,把db_host改為你的ip:
DB_HOST=127.0.0.1 -> DB_HOST=yourhost
訪問/mysql,頁面輸出,大功告成:
Reference:
docker入門到實踐
Docker在PHP項目開發環境中的應用
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27221.html
摘要:最近部署上線一個項目,新的服務器,在生產環境安裝配置等各種東西一大堆很麻煩。本文是我學習并使用部署項目的一個記錄。另外我們可以部署不同版本的應用,例如,并且互不干擾。之后部署只需要移植鏡像生成容器,就能保證環境的一致。需要使用三個鏡像。 最近部署上線一個項目,新的服務器,在生產環境安裝配置nginx、php、mysql、git、composer等各種東西一大堆很麻煩。docker已經火...
摘要:最佳實踐良好的編碼規范單元測試持續集成文檔,從一開始就形成良好的編碼習慣。真實的電商業務所有的業務需求來自真實的客戶,并且線上良好運營中。 重要通知: Laravel + 小程序的開源電商版本源碼已經在 github 上拉,歡迎提交 issue 和 star :) 開源電商 Server 端: Laravel API源碼 開源電商 client 端:小程序源碼 iBrand 簡介...
摘要:有些人將其稱為容器編排平臺,而并非唯一的此類平臺。但是在中,您可以快速擴展出多個實例你看看使用擴展你的網站是何其便捷。當你指向群集的地址和節點的端口號時,你就已經可見瀏覽器中正在運行的程序了。 showImg(https://segmentfault.com/img/remote/1460000017838786?w=1120&h=757); Laravel 是開發 PHP 應用程序的...
摘要:能跑應用就不錯了,周六想在服務器用試試部署開發環境。官網內測申請方式提供個人企業聯系方式及認證信息實名企業營業執照照片或掃描件及申請說明,發送郵件至即可獲得內測資格,申請從速。 前段時間不知道抽上面瘋,買了一臺低配的 ECS,配置就是 1m1u。能跑應用就不錯了,周六想在服務器用 Laradock 試試部署開發環境。 安裝 Docker 因為我的系統是 CentOS 7 并且對比 Do...
閱讀 2579·2023-04-26 03:00
閱讀 1392·2021-10-12 10:12
閱讀 4190·2021-09-22 15:33
閱讀 2908·2021-09-22 15:06
閱讀 1530·2019-08-30 15:44
閱讀 2145·2019-08-30 13:59
閱讀 534·2019-08-30 11:24
閱讀 2407·2019-08-29 17:07