mac上利用docker搭建lnmp開發(fā)環(huán)境

項(xiàng)目地址:https://github.com/shmilylbelva/dnmp

安裝docker

新版的docker for mac 下載地址docker-ce-desktop-mac,不需要安裝docker toolbox 骚揍,安裝好后大概是這樣的

docker
撇簿,可以在終端測(cè)試

$ docker -v
$ docker-compose -v

修改docker 鏡像倉庫

首先是到阿里云獲取專屬加速地址

阿里云Docker官方鏡像
,打開docker->preferences->Daemon->Registry mirrors 點(diǎn)擊加號(hào)提鸟,粘貼剛剛獲取到的加速地址匹舞,點(diǎn)擊Apply & Restart。

使用git快速獲取lnmp

進(jìn)入到當(dāng)前用戶mac終端窟哺,以次執(zhí)行

$ git clone https://github.com/shmilylbelva/dnmp.git
$ cd dnmp
$ docker-compose up

即開始安裝資源涛菠,如下圖


,完成以后可以在瀏覽器中訪問localhost疙渣,出現(xiàn)以下界面代表ok匙奴。


localhost

站點(diǎn)部署

本文有默認(rèn)加了兩個(gè)站點(diǎn):www.site1.com(同localhost)和www.site2.com妄荔。

要在本地訪問這兩個(gè)域名泼菌,需要修改你的hosts文件谍肤,添加以下兩行:

127.0.0.1 www.site1.com
127.0.0.1 www.site2.com
其中,www.site2.com為支持SSL/https和HTTP/2的示例站點(diǎn)哗伯。

因?yàn)檎军c(diǎn)2的SSL采用自簽名方式谣沸,所以瀏覽器有安全提示,繼續(xù)訪問就可以了笋颤,自己的站點(diǎn)用第三方SSL認(rèn)證證書替換即可乳附。

如果只用到站點(diǎn)1,把站點(diǎn)2相關(guān)的目錄和配置文件刪除:

./conf/nginx/conf.d/certs/site2/
./conf/nginx/conf.d/site2.conf
./www/site2/
重啟容器內(nèi)的Nginx生效:

docker exec -it dlnmp_nginx nginx -s reload

dnmp目錄結(jié)構(gòu)

.
├── conf                        配置目錄
│   ├── conf.d              站點(diǎn)配置文件目錄
│   │   ├── certs           SSL認(rèn)證文件伴澄、密鑰和加密文件目錄
│   │   │   └── site2       站點(diǎn)2的認(rèn)證文件目錄
│   │   ├── site1.conf      站點(diǎn)1 Nginx配置文件
│   │   └── site2.conf      站點(diǎn)2 Nginx配置文件 
│   ├── my.cnf              MySQL配置文件           
│   ├── nginx.conf          Nginx通用配置文件
│   ├── php-fpm.d           PHP-FPM配置目錄
│   │   └── www.conf        PHP-FPM配置文件
│   ├── php.ini             PHP配置文件
├── docker-compose.yml        默認(rèn)容器啟動(dòng)配置文件
├── docker-compose54.yml      php5.4容器啟動(dòng)配置文件
├── docker-compose56.yml      php5.6容器啟動(dòng)配置文件
├── log                         日志目錄
│   ├── mysql.slow.log                   MySQL日志
│   ├── nginx.error.log                   Nginx日志
│   ├── nginx.site1.error.log          
│   ├── nginx.site2.error.log           
├── mysql                       MySQL數(shù)據(jù)文件目錄
├── php                          PHP版本目錄
└── www                         站點(diǎn)根目錄
    ├── site1                   站點(diǎn)1根目錄
    └── site2                   站點(diǎn)2根目錄

MYSQL說明

在docker-compose.yml文件中赋除,我們指定了MySQL數(shù)據(jù)庫root用戶的密碼為123456。
所以非凌,我們就可以在主機(jī)中通過:

$ mysql -h 127.0.0.1 -u root -p  #linux中
#在mac中需要先切換到mysql容器
$ docker container ls  #列出容器列表
$ docker exec -it 775c7c9ee1e1 /bin/bash  #其中的容器id不用輸入完整的mysql容器id,一般3位就能區(qū)分举农。
$ mysql -h 127.0.0.1 -uroot -p

輸入密碼,就可以進(jìn)入MySQL命令行敞嗡。


mysql

說明:這里MySQL的連接主機(jī)不能用localhost颁糟,因?yàn)镸ySQL客戶端默認(rèn)使用unix socket方式連接,應(yīng)該直接用本地IP喉悴。
在PHP代碼中的使用方式與在主機(jī)中使用稍有不同棱貌,如下:
$pdo = new PDO('mysql:host=mysql;dbname=site1', 'root', '123456');
其中,host的值就是在docker-compose.yml里面指定的MySQL容器的名稱箕肃。
這是因?yàn)镻HP代碼是在FPM容器中婚脱,F(xiàn)PM容器啟動(dòng)時(shí)會(huì)自動(dòng)在/etc/hosts中加上:
172.17.0.2 mysql 11e55f91c4c3 dnmp_mysql
就是說,mysql自動(dòng)指向了MySQL容器動(dòng)態(tài)生成的IP勺像。
注意障贸,這里用php進(jìn)行mysql連接測(cè)試會(huì)失敗(在docker-compose up的時(shí)候注意到存在mbind:Operation not permitted 這個(gè)提示)


mbind:Operation not permitted

吟宦,所以還需要處理上述問題篮洁。
進(jìn)入剛剛的mysql終端,內(nèi)容大致如下。host為 % 表示不限制ip localhost表示本機(jī)使用 plugin非mysql_native_password 則需要修改密碼

mysql> select host,user,plugin,authentication_string from mysql.user;    
+-----------+------------------+-----------------------+------------------------------------------------------------------------+  
| host      | user             | plugin                | authentication_string                                                  |  
+-----------+------------------+-----------------------+------------------------------------------------------------------------+  
| %         | root             | caching_sha2_password | $A$005$^]RQB}j~t!      .#v)3.UogPRFu8VJA5/GKEbK5edEQlMT5sHw2n72zYJNlIbo3 |  
| localhost | mysql.infoschema | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE                              |  
| localhost | mysql.session    | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE                              |  
| localhost | mysql.sys        | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE                              |  
| localhost | root             | caching_sha2_password | $A$005$Y6&q!59^Fmh)@-6TG58J3F5+3I/HI9L|JCadNG+-+d6W+1D_UFW+7MRD7F3 |  
+-----------+------------------+-----------------------+------------------------------------------------------------------------+  

依次進(jìn)行如下操作

#更新一下用戶的密碼 root用戶密碼為newpassword  
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;

mysql連接問題解決殃姓。

修改docker-compose.yml

如果容器已經(jīng)生成袁波,回頭再編輯docker-compose.yml,用
docker-compose up
命令會(huì)直接啟動(dòng)原來的容器辰狡,修改的內(nèi)容不會(huì)體現(xiàn)在啟動(dòng)的容器里锋叨。
所以,要使修改的docker-compose.yml生效宛篇,需要以下4步:

$ docker stop dnmp_nginx                      # 第一步:停止容器
$ docker rm dnmp_nginx                        # 第二步:刪除容器
# !!第三步:重啟Docker服務(wù)!!
$ docker-compose up -d --no-deps --build mysql  # 第四步:重新啟動(dòng)容器

其中最后一條命令參數(shù)作用:/
-d:后臺(tái)執(zhí)行
--no-deps:不啟動(dòng)link的容器
--build:啟動(dòng)容器前先構(gòu)建鏡像

使用Redis

Redis使用和MySQL類似娃磺。
不過需要注意的是在./php/php72中的Dockerfile末尾的

#源碼安裝方式
#php7 can install

ENV PHPREDIS_VERSION 4.0.0
RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \
    && tar xfz /tmp/redis.tar.gz \
    && rm -r /tmp/redis.tar.gz \
    && mkdir -p /usr/src/php/ext \
    && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \
    && docker-php-ext-install redis \
    && rm -rf /usr/src/php

如果是php5.X那么這里應(yīng)該是這樣的(需要自己添加到對(duì)應(yīng)的Dockerfile中,然后再docker-compose up)

#PECL安裝方式
#php5 can install

#添加擴(kuò)展 redis pecl方式
RUN apk add --no-cache --update libmemcached-libs zlib
RUN set -xe \
    && apk add --no-cache --update --virtual .phpize-deps $PHPIZE_DEPS \
    && pecl install -o -f redis  \
    && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini
    && rm -rf /usr/share/php \
    && rm -rf /tmp/* \
    && apk del  .phpize-deps

在主機(jī)和容器內(nèi)部都通過地址127.0.0.1叫倍,端口6379訪問偷卧。

PHP則是跨容器訪問豺瘤,host參數(shù)用redis(links指定的名稱),端口用6379听诸。
修改site2的index.php文件內(nèi)容如下

<?php
    $redis = new Redis();
    $redis->connect('192.168.1.11',6379);//修改成自己的ip
    $redis->set('name','青波');
    echo $redis->get('name');
        //檢測(cè)是否連接成功

瀏覽器訪問www.site2.com,出現(xiàn)‘青波’即代表redis擴(kuò)展正常坐求。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市晌梨,隨后出現(xiàn)的幾起案子桥嗤,更是在濱河造成了極大的恐慌,老刑警劉巖仔蝌,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泛领,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡敛惊,警方通過查閱死者的電腦和手機(jī)渊鞋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞧挤,“玉大人锡宋,你說我怎么就攤上這事√靥瘢” “怎么了执俩?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鸵鸥。 經(jīng)常有香客問我奠滑,道長,這世上最難降的妖魔是什么妒穴? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮摊崭,結(jié)果婚禮上讼油,老公的妹妹穿的比我還像新娘。我一直安慰自己呢簸,他們只是感情好矮台,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著根时,像睡著了一般瘦赫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛤迎,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天确虱,我揣著相機(jī)與錄音,去河邊找鬼替裆。 笑死校辩,一個(gè)胖子當(dāng)著我的面吹牛窘问,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宜咒,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼惠赫,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了故黑?” 一聲冷哼從身側(cè)響起儿咱,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎场晶,沒想到半個(gè)月后混埠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡峰搪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年岔冀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片概耻。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡使套,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鞠柄,到底是詐尸還是另有隱情侦高,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布厌杜,位于F島的核電站奉呛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏夯尽。R本人自食惡果不足惜瞧壮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匙握。 院中可真熱鬧咆槽,春花似錦、人聲如沸圈纺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛾娶。三九已至灯谣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛔琅,已是汗流浹背胎许。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呐萨。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓杀饵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谬擦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子切距,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容