在一臺主機上部署lnmp,基於多個容器:
nginx服務:172.16.10.10
mysql服務:172.16.10.20
php服務:172.16.10.30php
解決容器固定ip地址問題:html
- 注意:由於當容器中止時或者將容器刪除,再次運行相同的容器,它的ip地址再也不時原來的地址,因此咱們須要自定義一個網段,來指定容器的ip地址。
(1) 首先自定義一個網絡:mysql
[root@sqm-docker01 ~]# docker network create -d bridge --subnet 172.16.10.0/24 --gateway 172.16.10.1 mynet1
(2)下載nginx,php:fpm,mysql-5.7鏡像:nginx
[root@sqm-docker01 ~]# docker pull nginx [root@sqm-docker01 ~]# docker pull php:7.2-fpm <!--使用的是php:7.2-fpm的鏡像--> [root@sqm-docker01 ~]# docker pull mysql:5.7 <!--使用的是mysql:5.7的鏡像-->
(3)####運行一個基於nginx鏡像的容器#####
#先將nginx服務運行,以拷貝出nginx的配置文件:web
- 參數解釋:
- run :建立一個新的容器
- -d:後臺運行
- --name:自定義名稱爲test1
在宿主機建立須要掛載文件的目錄:
網站主目錄:/wwwroot;
nginx的配置文件:/docker;sql
[root@sqm-docker01 ~]# mkdir /wwwroot [root@sqm-docker01 ~]# mkdir /docker
##使用docker cp命令將nginx存放配置文件的目錄拷貝到本機,docker
注意:docker cp命令能夠將宿主機上的文件拷貝到容器中,也能夠反向拷貝,將容器中的文件或目錄拷貝到本機
數據庫
[root@sqm-docker01 ~]# docker cp test1:/etc/nginx /docker/ #使用docker cp將nginx存放配置文件的目錄拷貝到宿主機。vim
[root@sqm-docker01 ~]# ls /docker/nginx/conf.d/ default.conf
#注意:須要修改的是nginx conf.d目錄下的default.conf文件,而不是nginx.conf 文件。
服務器
拷貝nginx網頁目錄:
[root@sqm-docker01 ~]# docker cp test1:/usr/share/nginx/html /wwwroot/ [root@sqm-docker01 ~]# ls /wwwroot/html/ 50x.html index.html
修改nginx默認的測試網頁:
[root@sqm-docker01 html]# echo "<h1>hello welcome to nginx web</h1>" > index.html
(4)運行nginx容器:
分別將容器中目錄掛載到本地目錄,而且指定ip地址
[root@sqm-docker01 ~]# docker run -itd --name nginx --network my_net1 --ip 172.16.10.10 -p 80:80 -v /docker/nginx:/etc/nginx -v /wwwroot/html:/usr/share/nginx/html nginx:latest
- 參數解釋:
- run:運行一個容器
- -itd: i:可交互
- t:僞終端
- d:保持容器後臺運行
- --network :基於哪張網卡建立網絡
- --ip: 定義容器的ip地址
- -v = --volume 數據卷,進行一個掛載
- 掛載格式: 宿主機:容器內
- p:映射端口,宿主機端口:容器內端口
(5)運行mysql容器:
[root@sqm-docker01 ~]# docker run --name mysql -e MYSQL_ROOT_PASSWORD=123.com -d -p 3306:3306 --network my_net1 --ip 172.16.10.20 mysql:5.7
- -e就是設置容器裏的環境變量,咱們設置了mysql的密碼環境變量,這個變量會傳入容器裏面來設置mysql的密碼
在本機測試root用戶是否可以登陸mysql:
首先須要下載mysql客戶端:[root@sqm-docker01 ~]# yum -y install mysql
(6)運行php容器:
[root@sqm-docker01 ~]# docker run -itd -p 9000:9000 --name phpfpm -v /wwwroot/html:/usr/share/nginx/html --network my_net1 --ip 172.16.10.30 php:7.2-fpm
注意:
保證nginx和php共享一個存放網頁的目錄,php建立和nginx相同的默認網頁根目錄(-v掛載時,若是容器中沒有該目錄,將會自動建立)。
(7)配置nginx和php-fpm:
咱們要對php解析nginx進行一個配置:
建立一個簡單的測試網頁:
[root@sqm-docker01 html]# vim /docker/nginx/conf.d/default.conf
(8)配置mysql:
搭建phpMyadmin:
- phpMyAdmin 是一個以PHP爲基礎,以Web-Base方式架構在網站主機上的MySQL的數據庫管理工具,讓管理者可用Web接口管理MySQL數據庫。藉由此Web接口能夠成爲一個簡易方式輸入繁雜SQL語法的較佳途徑,尤爲要處理大量數據的導入及導出更爲方便。其中一個更大的優點在於因爲phpMyAdmin跟其餘PHP程序同樣在網頁服務器上運行,可是您能夠在任何地方使用這些程序產生的HTML頁面,也就是於遠程管理MySQL數據庫,方便的建立、修改、刪除數據庫及數據表.
[root@sqm-docker01 html]# pwd /wwwroot/html
解壓到當前目錄:[root@sqm-docker01 html]# unzip phpMyAdmin-4.9.1-all-languages.zip
重命名:[root@sqm-docker01 html]# mv phpMyAdmin-4.9.1-all-languages phpmyadmin
修改nginx配置文件--配置與phpMyAdmin鏈接:
[root@sqm-docker01 html]# vim /docker/nginx/conf.d/default.conf
將原先的location配置項進行拷貝,再添加如下兩個location配置段。
修改完nginx配置文件,重啓nginx:
訪問測試網頁:
已經將容器中的端口映射到了宿主機上,因此直接訪問宿主機地址:172.16.1.30
訪問php解析nginx網頁:
接下來測試登錄 phpMyAdmin:
訪問url:http://172.16.1.30/phpmyadmin/index.php
缺乏mysqli模塊,因此沒法訪問,因此須要添加php支持mysql配置模塊:
怎樣針對容器進行添加擴展模塊,咱們能夠登錄dockerhub進行查詢相關文檔:
複製以上dockerfile腳本,到本地進行安裝:
注意還需添加部份內容:
[root@sqm-docker01 ~]# vim Dockerfile
FROM php:7.2-fpm RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-install -j$(nproc) iconv \ && 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 mysqli pdo pdo_mysql
進行構建dockerfile:[root@sqm-docker01 ~]# docker build -t phpfpm-mysqli .
- 參數解釋:
- build:進行構建
- -t :指定標籤
- . 表示當前目錄下的Dockerfile
構建完成後,將原有的php鏡像刪除,運行剛剛過構建成功的支持mysqli模塊的鏡像:
[root@sqm-docker01 ~]# docker stop phpfpm phpfpm [root@sqm-docker01 ~]# docker rm phpfpm phpfpm
[root@sqm-docker01 ~]# docker run --name phpfpm -d -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network my_net1 --ip 172.16.10.30 phpfpm-mysqli:latest
#鏡像指定剛剛構建dockerfile生成的鏡像名。
修改 phpMyAdmin默認的sample(樣例文件):
想要配置文件將其使用,必須進行重命名,將sample去掉。
[root@sqm-docker01 phpmyadmin]# pwd /wwwroot/html/phpmyadmin [root@sqm-docker01 phpmyadmin]# cp config.sample.inc.php config.inc.php
對配置文件進行修改:[root@sqm-docker01 phpmyadmin]# vim config.inc.php
修改完配置文件重啓php:
[root@sqm-docker01 phpmyadmin]# docker restart phpfpm phpfpm
訪問phpMyAdmin網頁:
輸入url:http://172.16.1.30/phpmyadmin/index.php
#用戶名和密碼,是數據庫的登錄密碼
成功訪問到mysql數據庫。。。。。。
至此在docker中多容器之間部署lnmp搭建完成。
———————— 本文至此結束,感謝閱讀 ————————