摘要:最近部署上線一個項目,新的服務器,在生產(chǎn)環(huán)境安裝配置等各種東西一大堆很麻煩。本文是我學習并使用部署項目的一個記錄。另外我們可以部署不同版本的應用,例如,并且互不干擾。之后部署只需要移植鏡像生成容器,就能保證環(huán)境的一致。需要使用三個鏡像。
最近部署上線一個項目,新的服務器,在生產(chǎn)環(huán)境安裝配置nginx、php、mysql、git、composer等各種東西一大堆很麻煩。docker已經(jīng)火了一段時間,已經(jīng)成了后端和運維的必備技能,之前老大也說要嘗試下,于是就來體驗一下docker的魅力。本文是我學習并使用docker部署項目的一個記錄。
docker優(yōu)勢docker的主要優(yōu)勢可以總結為:一次構建,到處部署。當我們使用docker構建好項目后,在開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境都可以使用統(tǒng)一的鏡像來部署,保證了環(huán)境的一致。并且docker支持linux、mac os、windows三大平臺,代碼運行在容器中,不受外部操作系統(tǒng)的影響,只和你的鏡像有依賴關系。
另外我們可以部署不同版本的應用,例如mysql5.5、mysql5.7,并且互不干擾。
操作思路關于docker的安裝和相關概念在此都不贅述了,網(wǎng)上有很多資料,說下具體實施的思路。
正確的使用方式不是項目完成后才開始構建docker鏡像,而是項目架構、依賴、環(huán)境確定了之后就構建和配置好docker鏡像,之后代碼的開發(fā)和運行都在容器之中。之后部署只需要移植鏡像生成容器,就能保證環(huán)境的一致。
我這個項目很簡單,只用到nginx、php、mysql這三件套,nginx使用php-fpm作為cgi解析器。需要使用三個鏡像:nginx、php-fpm、mysql。為什么要用三個鏡像而不是把這三個集成到一個大鏡像中?這是docker推薦的做法,鏡像之間盡量解耦,方便復用,避免臃腫的鏡像,容器間通過網(wǎng)絡連接起來。
官方提供了很多優(yōu)質鏡像,我們只需要挑選并基于官方鏡像來配置就好。
構建鏡像完整文件詳見我的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腳步來創(chuàng)建好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鏡像的是最麻煩的,要裝系統(tǒng)依賴,php擴展,composer,還要設置環(huán)境變量。php擴展那塊參考官方鏡像dockr-hub-php
使用了apt,所以我們要修改apt源,官方php鏡像是基于debian的,不是ubuntu的源。
dockerfile一個run建一層,這里建議apt install作為一層,安裝php擴展作為一層,而不是都放在一層。這樣的好處就是如果第二層php擴展裝失敗了,不用再跑一遍apt install。最后一層我們裝上composer。
為了讓php版本一致,我們應該調(diào)用php容器內(nèi)的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下創(chuàng)建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啟動容器我們現(xiàn)在有三個鏡像,如果一個個啟動、連接、掛載很麻煩,官方提供了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容器建個數(shù)據(jù)庫建個表測試一下數(shù)據(jù)庫連接:
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項目開發(fā)環(huán)境中的應用
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27221.html
摘要:最近部署上線一個項目,新的服務器,在生產(chǎn)環(huán)境安裝配置等各種東西一大堆很麻煩。本文是我學習并使用部署項目的一個記錄。另外我們可以部署不同版本的應用,例如,并且互不干擾。之后部署只需要移植鏡像生成容器,就能保證環(huán)境的一致。需要使用三個鏡像。 最近部署上線一個項目,新的服務器,在生產(chǎn)環(huán)境安裝配置nginx、php、mysql、git、composer等各種東西一大堆很麻煩。docker已經(jīng)火...
摘要:最佳實踐良好的編碼規(guī)范單元測試持續(xù)集成文檔,從一開始就形成良好的編碼習慣。真實的電商業(yè)務所有的業(yè)務需求來自真實的客戶,并且線上良好運營中。 重要通知: Laravel + 小程序的開源電商版本源碼已經(jīng)在 github 上拉,歡迎提交 issue 和 star :) 開源電商 Server 端: Laravel API源碼 開源電商 client 端:小程序源碼 iBrand 簡介...
摘要:有些人將其稱為容器編排平臺,而并非唯一的此類平臺。但是在中,您可以快速擴展出多個實例你看看使用擴展你的網(wǎng)站是何其便捷。當你指向群集的地址和節(jié)點的端口號時,你就已經(jīng)可見瀏覽器中正在運行的程序了。 showImg(https://segmentfault.com/img/remote/1460000017838786?w=1120&h=757); Laravel 是開發(fā) PHP 應用程序的...
摘要:能跑應用就不錯了,周六想在服務器用試試部署開發(fā)環(huán)境。官網(wǎng)內(nèi)測申請方式提供個人企業(yè)聯(lián)系方式及認證信息實名企業(yè)營業(yè)執(zhí)照照片或掃描件及申請說明,發(fā)送郵件至即可獲得內(nèi)測資格,申請從速。 前段時間不知道抽上面瘋,買了一臺低配的 ECS,配置就是 1m1u。能跑應用就不錯了,周六想在服務器用 Laradock 試試部署開發(fā)環(huán)境。 安裝 Docker 因為我的系統(tǒng)是 CentOS 7 并且對比 Do...
閱讀 2589·2023-04-26 03:00
閱讀 1405·2021-10-12 10:12
閱讀 4200·2021-09-22 15:33
閱讀 2927·2021-09-22 15:06
閱讀 1540·2019-08-30 15:44
閱讀 2152·2019-08-30 13:59
閱讀 541·2019-08-30 11:24
閱讀 2421·2019-08-29 17:07