摘要:最近部署上線一個(gè)項(xiàng)目,新的服務(wù)器,在生產(chǎn)環(huán)境安裝配置等各種東西一大堆很麻煩。本文是我學(xué)習(xí)并使用部署項(xiàng)目的一個(gè)記錄。另外我們可以部署不同版本的應(yīng)用,例如,并且互不干擾。之后部署只需要移植鏡像生成容器,就能保證環(huán)境的一致。需要使用三個(gè)鏡像。
最近部署上線一個(gè)項(xiàng)目,新的服務(wù)器,在生產(chǎn)環(huán)境安裝配置nginx、php、mysql、git、composer等各種東西一大堆很麻煩。docker已經(jīng)火了一段時(shí)間,已經(jīng)成了后端和運(yùn)維的必備技能,之前老大也說要嘗試下,于是就來體驗(yàn)一下docker的魅力。本文是我學(xué)習(xí)并使用docker部署項(xiàng)目的一個(gè)記錄。
docker優(yōu)勢(shì)docker的主要優(yōu)勢(shì)可以總結(jié)為:一次構(gòu)建,到處部署。當(dāng)我們使用docker構(gòu)建好項(xiàng)目后,在開發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境都可以使用統(tǒng)一的鏡像來部署,保證了環(huán)境的一致。并且docker支持linux、mac os、windows三大平臺(tái),代碼運(yùn)行在容器中,不受外部操作系統(tǒng)的影響,只和你的鏡像有依賴關(guān)系。
另外我們可以部署不同版本的應(yīng)用,例如mysql5.5、mysql5.7,并且互不干擾。
操作思路關(guān)于docker的安裝和相關(guān)概念在此都不贅述了,網(wǎng)上有很多資料,說下具體實(shí)施的思路。
正確的使用方式不是項(xiàng)目完成后才開始構(gòu)建docker鏡像,而是項(xiàng)目架構(gòu)、依賴、環(huán)境確定了之后就構(gòu)建和配置好docker鏡像,之后代碼的開發(fā)和運(yùn)行都在容器之中。之后部署只需要移植鏡像生成容器,就能保證環(huán)境的一致。
我這個(gè)項(xiàng)目很簡(jiǎn)單,只用到nginx、php、mysql這三件套,nginx使用php-fpm作為cgi解析器。需要使用三個(gè)鏡像:nginx、php-fpm、mysql。為什么要用三個(gè)鏡像而不是把這三個(gè)集成到一個(gè)大鏡像中?這是docker推薦的做法,鏡像之間盡量解耦,方便復(fù)用,避免臃腫的鏡像,容器間通過網(wǎng)絡(luò)連接起來。
官方提供了很多優(yōu)質(zhì)鏡像,我們只需要挑選并基于官方鏡像來配置就好。
構(gò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
將基本配置和站點(diǎn)配置復(fù)制進(jìn)去,用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擴(kuò)展,composer,還要設(shè)置環(huán)境變量。php擴(kuò)展那塊參考官方鏡像dockr-hub-php
使用了apt,所以我們要修改apt源,官方php鏡像是基于debian的,不是ubuntu的源。
dockerfile一個(gè)run建一層,這里建議apt install作為一層,安裝php擴(kuò)展作為一層,而不是都放在一層。這樣的好處就是如果第二層php擴(kuò)展裝失敗了,不用再跑一遍apt install。最后一層我們裝上composer。
為了讓php版本一致,我們應(yīng)該調(diào)用php容器內(nèi)的php作為cli:
docker run -it -v $PWD:/opt/code -w /opt/code my-php php -v
命令太長(zhǎng)了,我們可以做個(gè)alias,在~/.bash_aliases中加入一行(注意最后空格):
alias myphp="docker run -it -v $PWD:/opt/code -w /opt/code --rm my-php "
我們?cè)趛ourpath/opt/code下創(chuàng)建laravel應(yīng)用,修改權(quán)限,注意在宿主機(jī)將你加入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最簡(jiǎn)單,直接用官方的就行了
docker-compose啟動(dòng)容器我們現(xiàn)在有三個(gè)鏡像,如果一個(gè)個(gè)啟動(dòng)、連接、掛載很麻煩,官方提供了docker-compose工具,將配置寫在一起,一鍵啟動(dòng)。
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命令啟動(dòng)容器組:
啟動(dòng)訪問 yourhost:80 可以看到熟悉的laravel歡迎頁(yè)面:
進(jìn)入mysql容器建個(gè)數(shù)據(jù)庫(kù)建個(gè)表測(cè)試一下數(shù)據(jù)庫(kù)連接:
docker exec -it dockerphp_mysql_1 bash
修改yourpath/opt/code/routes:
測(cè)試了一下報(bào)錯(cuò):
SQLSTATE[HY000] [2002] Connection refused
google了一下,修改一下.env,把db_host改為你的ip:
DB_HOST=127.0.0.1 -> DB_HOST=yourhost
訪問/mysql,頁(yè)面輸出,大功告成:
Reference:
docker入門到實(shí)踐
Docker在PHP項(xiàng)目開發(fā)環(huán)境中的應(yīng)用
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28184.html
摘要:最近部署上線一個(gè)項(xiàng)目,新的服務(wù)器,在生產(chǎn)環(huán)境安裝配置等各種東西一大堆很麻煩。本文是我學(xué)習(xí)并使用部署項(xiàng)目的一個(gè)記錄。另外我們可以部署不同版本的應(yīng)用,例如,并且互不干擾。之后部署只需要移植鏡像生成容器,就能保證環(huán)境的一致。需要使用三個(gè)鏡像。 最近部署上線一個(gè)項(xiàng)目,新的服務(wù)器,在生產(chǎn)環(huán)境安裝配置nginx、php、mysql、git、composer等各種東西一大堆很麻煩。docker已經(jīng)火...
摘要:最佳實(shí)踐良好的編碼規(guī)范單元測(cè)試持續(xù)集成文檔,從一開始就形成良好的編碼習(xí)慣。真實(shí)的電商業(yè)務(wù)所有的業(yè)務(wù)需求來自真實(shí)的客戶,并且線上良好運(yùn)營(yíng)中。 重要通知: Laravel + 小程序的開源電商版本源碼已經(jīng)在 github 上拉,歡迎提交 issue 和 star :) 開源電商 Server 端: Laravel API源碼 開源電商 client 端:小程序源碼 iBrand 簡(jiǎn)介...
摘要:有些人將其稱為容器編排平臺(tái),而并非唯一的此類平臺(tái)。但是在中,您可以快速擴(kuò)展出多個(gè)實(shí)例你看看使用擴(kuò)展你的網(wǎng)站是何其便捷。當(dāng)你指向群集的地址和節(jié)點(diǎn)的端口號(hào)時(shí),你就已經(jīng)可見瀏覽器中正在運(yùn)行的程序了。 showImg(https://segmentfault.com/img/remote/1460000017838786?w=1120&h=757); Laravel 是開發(fā) PHP 應(yīng)用程序的...
摘要:能跑應(yīng)用就不錯(cuò)了,周六想在服務(wù)器用試試部署開發(fā)環(huán)境。官網(wǎng)內(nèi)測(cè)申請(qǐng)方式提供個(gè)人企業(yè)聯(lián)系方式及認(rèn)證信息實(shí)名企業(yè)營(yíng)業(yè)執(zhí)照照片或掃描件及申請(qǐng)說明,發(fā)送郵件至即可獲得內(nèi)測(cè)資格,申請(qǐng)從速。 前段時(shí)間不知道抽上面瘋,買了一臺(tái)低配的 ECS,配置就是 1m1u。能跑應(yīng)用就不錯(cuò)了,周六想在服務(wù)器用 Laradock 試試部署開發(fā)環(huán)境。 安裝 Docker 因?yàn)槲业南到y(tǒng)是 CentOS 7 并且對(duì)比 Do...
閱讀 2431·2021-09-22 15:41
閱讀 1448·2021-08-19 10:54
閱讀 1755·2019-08-23 15:11
閱讀 3402·2019-08-23 10:23
閱讀 1428·2019-08-22 16:28
閱讀 799·2019-08-22 15:11
閱讀 739·2019-08-22 14:53
閱讀 710·2019-08-22 13:49