Docker下多容器搭建 lamp的詳細過程(httpd+mysql+php+redis)
說明
- LAMP架構(gòu)是 linux+apache+php+mysql
- 搭建的服務(wù)器環(huán)境,docker容器都基本都是基于linux的,所以實際需要部署的apache容器+php容器+mysql容器+redis容器
- 本內(nèi)容docker宿主機是windows
- 各個容器之間互聯(lián)關(guān)系:mysql容器、redis容器 只和 PHP容器有互聯(lián)(–link),httpd容器 只和 php容器有互聯(lián)(–link),所以創(chuàng)建容器的流程 依次 為 mysql 容器、redis容器、php容器(互聯(lián)mysql、redis)、httpd容器(互聯(lián)PHP)
- 宿主機和容器之間進行目錄或文件掛載時,需提前準備好相關(guān)目錄與文件,一旦創(chuàng)建,宿主機里面的目錄或文件 會 直接覆蓋容器內(nèi)對應(yīng)的目錄和文件
- 宿主機和容器之間掛載配置文件時,在宿主機內(nèi)修改配置文件后,需重啟對應(yīng)的容器
搭建
拉取所需鏡像
docker pull php:5.6-fpm
docker pull httpd
docker pull mysql:5.7
docker pull redis:3.2
#版本號可根據(jù)實際需求選擇
mysql
mysql創(chuàng)建
通過 mysql:5.7 鏡像創(chuàng)建一個 mysql 容器 docker run -d --name my-mysql -p 3333:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-d 后臺運行容器
-p 將宿主機端口映射到容器(3306是默認端口,若使用默認端口,請確保宿主機當(dāng)前端口未被占用)
-e MYSQL_ROOT_PASSWORD=123456 給root用戶設(shè)置一個初始密碼
–name 指定容器別名
mysql測試
第一種: 進入mysql容器 docker exec -it my-mysql /bin/bash 登錄mysql mysql -uroot -p123456 第二種: 通過Navicat進行連接測試 主機或IP地址:localhost 端口:宿主機映射的端口
redis
redis創(chuàng)建
通過 redis:3.2 鏡像創(chuàng)建一個 redis 容器 docker run -d --name my-redis -p 6389:6379 redis:3.2
-d 后臺運行容器
-p 將宿主機端口映射到容器(6379是默認端口,若使用默認端口,請確保宿主機當(dāng)前端口未被占用)
–name 指定容器別名
redis測試
第一種: 進入mysql容器 docker exec -it my-redis /bin/bash 切換到客戶端 redis-cli 創(chuàng)建一個key set name qyh 第二種: 通過redis管理工具(Redis Desktop Manager) 進行連接測試 Host:localhost Port:宿主機映射的端口
php
php創(chuàng)建
通過 php:5.6-fpm 鏡像創(chuàng)建一個 php 容器 docker run -d -p 9999:9000 --name my-php -v D:\DockerTest\damp\httpd\www\:/var/www/html --link my-mysql --link my-redis php:5.6-fpm
-d 后臺運行容器
-p 將宿主機端口映射到容器(9000是默認端口,若使用默認端口,請確保宿主機當(dāng)前端口未被占用)
-v D:\DockerTest\damp\httpd\www:/var/www/html 將宿主機的某目錄 到容器內(nèi)某目錄,實現(xiàn)文件同步
(掛載一個空文件夾是會覆蓋容器中的內(nèi)容,所以配置文件要事先準備好。這里要注意當(dāng)前項目的路徑,不要直接拷貝使用)
–link my-mysql 和 前面創(chuàng)建的mysql容器互聯(lián)
–link my-redis 和 前面創(chuàng)建的redis容器互聯(lián)
–name 指定當(dāng)前容器別名
php安裝擴展
進入php容器中 docker exec -it my-php /bin/bash 安裝擴展pdo_mysql docker-php-ext-install pdo_mysql 安裝擴展mysql docker-php-ext-install mysql 安裝擴展mysqli docker-php-ext-install mysqli 安裝擴展pdo docker-php-ext-install pdo 安裝擴展redis #由于php源碼中沒有redis,則需要手動拉取redis包 #拉取redis擴展包 curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/4.2.0.tar.gz #解壓包 tar zxvf /tmp/redis.tar.gz #刪除包 rm -r /tmp/redis.tar.gz #創(chuàng)建執(zhí)行目錄 mkdir -p /usr/src/php/ext #將解壓后的redis擴展移到執(zhí)行目錄 mv phpredis-4.2.0 /usr/src/php/ext/redis #安裝redis docker-php-ext-install redis
php測試
重啟php容器 docker restart my-php 進入php容器 docker exec -it my-php /bin/bash 在宿主機映射目錄 D:\DockerTest\damp\httpd\www\ 下創(chuàng)建一個 index.php <?php phpinfo(); 容器內(nèi)執(zhí)行 php -f index.php 返回PHP各配置信息,則表示創(chuàng)建成功
php與mysql互聯(lián)測試
進入php容器 docker exec -it my-php /bin/bash 在宿主機映射目錄 D:\DockerTest\damp\httpd\www\ 下創(chuàng)建一個 dbtest.php <?php $servername = "my-mysql"; //mysql容器別名 $username = "root"; $password = "123456"; try { $conn = new PDO("mysql:host=$servername;", $username, $password); echo "sucess\n"; } catch(PDOException $e) { echo $e->getMessage(); } 容器內(nèi)執(zhí)行 php -f dbtest.php 返回 sucess ,則表示數(shù)據(jù)庫連接成功
php與redis互聯(lián)測試
進入php容器 docker exec -it my-php /bin/bash 在宿主機映射目錄 D:\DockerTest\damp\httpd\www\ 下創(chuàng)建一個 redistest.php <?php $redis = new Redis(); $redis->connect('my-redis', 6379); //redis容器別名,默認端口 $count = $redis->exists('count') ? $redis->get('count') : 1; echo $count; if($redis->set('count', ++$count)){ echo "success"; }else{ echo "error"; } 容器內(nèi)執(zhí)行 php -f redistest.php 返回 sucess ,則表示redis操作成功
httpd(apache2)
配置文件準備
httpd涉及到一些相關(guān)配置,宿主機和容器掛載目錄或文件時,必須要保證存在,因為一旦創(chuàng)建,宿主機所掛載的內(nèi)容會直接覆蓋容器里對應(yīng)的內(nèi)容 1.隨便創(chuàng)建一個httpd容器 docker run -d --name test-httpd -p 80:80 httpd 2.進入容器 查看相關(guān)配置文件位置 docker exec -it test-httpd /bin/bash 3.將httpd相關(guān)配置 復(fù)制 到宿主機 docker cp test-httpd:/usr/local/apache2/conf/httpd.conf D:\DockerTest\damp\httpd\conf\ docker cp test-httpd:/usr/local/apache2/conf/extra D:\DockerTest\damp\httpd\conf\ 4.刪除當(dāng)前容器 docker rm -f test-httpd 5.修改 復(fù)制到宿主機的配置 在 httpd.conf 文件最后面添加 Include conf/extra/test.conf (test.conf可以隨便自定義) 在 extra目錄下 創(chuàng)建 test.conf 文件,并添加 <IfModule dir_module> DirectoryIndex index.html index.php </IfModule> <VirtualHost *:80> DocumentRoot "/usr/local/apache2/htdocs" ServerName localhost <Directory "/usr/local/apache2/htdocs"> Options None Require all granted </Directory> ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://172.17.0.9:9000/var/www/html/$1 </VirtualHost> LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so 6.注意: 配置文件中 fcgi://172.17.0.9:9000/ ip:為php容器在局域網(wǎng)中實際的ip,可以通過 docker network inspect bridge 進行查看 端口:為容器里默認端口 若PHP容器重新啟動,需查看對應(yīng)IP是否發(fā)生改變 除創(chuàng)建httpd,其他情況下修改配置文件,需重啟httpd服務(wù)
httpd創(chuàng)建
通過 httpd:latest 鏡像創(chuàng)建一個 httpd 容器 docker run -d --name my-httpd -p 8081:80 -v D:\DockerTest\damp\httpd\conf\httpd.conf:/usr/local/apache2/conf/httpd.conf -v D:\DockerTest\damp\httpd\conf\extra\:/usr/local/apache2/conf/extra/ -v D:\DockerTest\damp\httpd\www\:/usr/local/apache2/htdocs --link my-php httpd
-d 后臺運行容器
-p 將宿主機端口映射到容器(80是默認端口,若使用默認端口,請確保宿主機當(dāng)前端口未被占用)
-v D:\DockerTest\damp\httpd\www:/usr/local/apache2/htdocs 將宿主機的某目錄 到容器內(nèi)某目錄,實現(xiàn)文件同步
(掛載一個空文件夾是會覆蓋容器中的內(nèi)容,所以配置文件要事先準備好。這里要注意當(dāng)前項目的路徑,不要直接拷貝使用)
–link my-php 和 前面創(chuàng)建的php容器互聯(lián)
–name 指定當(dāng)前容器別名
httpd測試
瀏覽器 http://127.0.0.1:8081/index.php http://127.0.0.1:8081/dbtest.php //測試數(shù)據(jù)庫是否連接成功 http://127.0.0.1:8081/dbtest.php //測試redis是否正常
到此這篇關(guān)于Docker下多容器搭建 lamp (httpd+mysql+php+redis)的文章就介紹到這了,更多相關(guān)Docker多容器搭建 lamp內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- docker安裝mysql、redis鏡像方式
- Docker安裝MySQL和Redis的方法步驟
- 解決docker重啟redis,mysql數(shù)據(jù)丟失的問題
- Docker 部署Mysql 服務(wù)和Redis 服務(wù)的方法
- Docker安裝Tomcat、MySQL和Redis的步驟詳解
- Docker部署Django+Mysql+Redis+Gunicorn+Nginx的實現(xiàn)
- docker搭建php+nginx+swoole+mysql+redis環(huán)境的方法
- Docker安裝常用組件(mysql,redis)的方法
- Docker + Nodejs + Kafka + Redis + MySQL搭建簡單秒殺環(huán)境
- Docker一鍵部署MySQL和Redis數(shù)據(jù)庫的實現(xiàn)
相關(guān)文章
docker上快速搭建gitlab、gitlab-runer及實現(xiàn)CI/CD功能
這篇文章主要介紹了docker上快速搭建gitlab、gitlab-runer及實現(xiàn)CI/CD,本文給大家講解的非常詳細,包括docker上安裝gitlab的相關(guān)操作及配置root賬號密碼,需要的朋友可以參考下2022-04-04Centos7安裝docker compse踩過的坑及解決方法
本文,我們介紹如何在centos7環(huán)境下安裝docker-compose, 記錄下安裝過程步驟以及遇到的問題還有解決辦法,感興趣的朋友參考下吧2018-01-01docker覆蓋鏡像默認命令之docker?entrypoint詳解
entrypoint命令就是覆蓋ENTRYPOINT命令的,本文給大家介紹了docker覆蓋鏡像默認命令之docker?entrypoint的相關(guān)知識,需要的朋友可以參考下2023-10-10Linux環(huán)境下安裝docker環(huán)境(親測無坑)
大家好,本篇文章主要講的是Linux環(huán)境下安裝docker環(huán)境(親測無坑),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2021-12-12