摘要:因為站點的采用自簽名方式,所以瀏覽器有安全提示,繼續訪問就可以了,自己的站點用第三方認證證書替換即可。這是因為代碼是在容器中,容器啟動時會自動在中加上就是說,自動指向了容器動態生成的。則是跨容器訪問,參數用指定的名稱,端口用。
項目地址https://github.com/shmilylbel...
安裝docker新版的docker for mac 下載地址docker-ce-desktop-mac,不需要安裝docker toolbox ,安裝好后大概是這樣的,可以在終端測試
$ docker -v $ docker-compose -v修改docker 鏡像倉庫
首先是到阿里云獲取專屬加速地址,打開docker->preferences->Daemon->Registry mirrors 點擊加號,粘貼剛剛獲取到的加速地址,點擊Apply & Restart。
使用git快速獲取lnmp進入到當前用戶mac終端,以次執行
$ git clone https://github.com/shmilylbelva/dnmp.git $ cd dnmp $ docker-compose up
即開始安裝資源,如下圖
,完成以后可以在瀏覽器中訪問localhost,出現以下界面代表ok。
。
本文有默認加了兩個站點:www.site1.com(同localhost)和www.site2.com。
要在本地訪問這兩個域名,需要修改你的hosts文件,添加以下兩行:
127.0.0.1 www.site1.com
127.0.0.1 www.site2.com
其中,www.site2.com為支持SSL/https和HTTP/2的示例站點。
因為站點2的SSL采用自簽名方式,所以瀏覽器有安全提示,繼續訪問就可以了,自己的站點用第三方SSL認證證書替換即可。
如果只用到站點1,把站點2相關的目錄和配置文件刪除:
./conf/nginx/conf.d/certs/site2/
./conf/nginx/conf.d/site2.conf
./www/site2/
重啟容器內的Nginx生效:
docker exec -it dlnmp_nginx nginx -s reload
dnmp目錄結構. ├── conf 配置目錄 │ ├── conf.d 站點配置文件目錄 │ │ ├── certs SSL認證文件、密鑰和加密文件目錄 │ │ │ └── site2 站點2的認證文件目錄 │ │ ├── site1.conf 站點1 Nginx配置文件 │ │ └── site2.conf 站點2 Nginx配置文件 │ ├── my.cnf MySQL配置文件 │ ├── nginx.conf Nginx通用配置文件 │ ├── php-fpm.d PHP-FPM配置目錄 │ │ └── www.conf PHP-FPM配置文件 │ ├── php.ini PHP配置文件 ├── docker-compose.yml 默認容器啟動配置文件 ├── docker-compose54.yml php5.4容器啟動配置文件 ├── docker-compose56.yml php5.6容器啟動配置文件 ├── log 日志目錄 │ ├── mysql.slow.log MySQL日志 │ ├── nginx.error.log Nginx日志 │ ├── nginx.site1.error.log │ ├── nginx.site2.error.log ├── mysql MySQL數據文件目錄 ├── php PHP版本目錄 └── www 站點根目錄 ├── site1 站點1根目錄 └── site2 站點2根目錄MYSQL說明
在docker-compose.yml文件中,我們指定了MySQL數據庫root用戶的密碼為123456。
所以,我們就可以在主機中通過:
$ 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位就能區分。 $ mysql -h 127.0.0.1 -uroot -p
輸入密碼,就可以進入MySQL命令行。
說明:這里MySQL的連接主機不能用localhost,因為MySQL客戶端默認使用unix socket方式連接,應該直接用本地IP。
在PHP代碼中的使用方式與在主機中使用稍有不同,如下:
$pdo = new PDO("mysql:host=mysql;dbname=site1", "root", "123456");
其中,host的值就是在docker-compose.yml里面指定的MySQL容器的名稱。
這是因為PHP代碼是在FPM容器中,FPM容器啟動時會自動在/etc/hosts中加上:
172.17.0.2 mysql 11e55f91c4c3 dnmp_mysql
就是說,mysql自動指向了MySQL容器動態生成的IP。
注意,這里用php進行mysql連接測試會失敗(在docker-compose up的時候注意到存在mbind:Operation not permitted 這個提示)
,所以還需要處理上述問題。
進入剛剛的mysql終端,內容大致如下。host為 % 表示不限制ip localhost表示本機使用 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 | +-----------+------------------+-----------------------+------------------------------------------------------------------------+
依次進行如下操作
ALTER USER "root"@"%" IDENTIFIED WITH mysql_native_password BY "newpassword"; #更新一下用戶的密碼 root用戶密碼為newpassword mysql> ALTER USER "root"@"%" IDENTIFIED WITH mysql_native_password BY "123456"; Query OK, 0 rows affected (0.06 sec)
mysql連接問題解決。
修改docker-compose.yml如果容器已經生成,回頭再編輯docker-compose.yml,用
docker-compose up
命令會直接啟動原來的容器,修改的內容不會體現在啟動的容器里。
所以,要使修改的docker-compose.yml生效,需要以下4步:
$ docker stop dnmp_nginx # 第一步:停止容器 $ docker rm dnmp_nginx # 第二步:刪除容器 # !!第三步:重啟Docker服務!! $ docker-compose up -d --no-deps --build mysql # 第四步:重新啟動容器
其中最后一條命令參數作用:/
-d:后臺執行
--no-deps:不啟動link的容器
--build:啟動容器前先構建鏡像
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那么這里應該是這樣的(需要自己添加到對應的Dockerfile中,然后再docker-compose up)
#PECL安裝方式 #php5 can install #添加擴展 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
在主機和容器內部都通過地址127.0.0.1,端口6379訪問。
PHP則是跨容器訪問,host參數用redis(links指定的名稱),端口用6379。
修改site2的index.php文件內容如下
connect("192.168.1.11",6379);//修改成自己的ip $redis->set("name","青波"); echo $redis->get("name"); //檢測是否連接成功
瀏覽器訪問www.site2.com,出現‘青波’即代表redis擴展正常。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27337.html
摘要:因為站點的采用自簽名方式,所以瀏覽器有安全提示,繼續訪問就可以了,自己的站點用第三方認證證書替換即可。這是因為代碼是在容器中,容器啟動時會自動在中加上就是說,自動指向了容器動態生成的。則是跨容器訪問,參數用指定的名稱,端口用。 項目地址https://github.com/shmilylbel... 安裝docker 新版的docker for mac 下載地址docker-ce-de...
摘要:因為站點的采用自簽名方式,所以瀏覽器有安全提示,繼續訪問就可以了,自己的站點用第三方認證證書替換即可。這是因為代碼是在容器中,容器啟動時會自動在中加上就是說,自動指向了容器動態生成的。則是跨容器訪問,參數用指定的名稱,端口用。 項目地址https://github.com/shmilylbel... 安裝docker 新版的docker for mac 下載地址docker-ce-de...
摘要:如果不用我們可能將上述講的命令每搭建一次就需要執行一遍,有沒有能統一管理的有,就是在環境搭建中的作用快速創建鏡像,快速創建并運行容器,實現統一管理。 前言 初學者在dcoker學習過程中,可能不太清楚docker中那么多的命令,參數,工具在lnmp環境搭建中起了什么作用,下面跟著我來熟悉一下。(本文面向的是不怎么熟悉linux的:phper) 鏡像,容器,倉庫 鏡像:Docker 鏡像...
閱讀 1503·2021-11-22 09:34
閱讀 3320·2021-09-29 09:35
閱讀 562·2021-09-04 16:40
閱讀 2912·2019-08-30 15:53
閱讀 2582·2019-08-30 15:44
閱讀 2584·2019-08-30 14:10
閱讀 1328·2019-08-29 18:43
閱讀 2205·2019-08-29 13:26