Docker下多容器搭建 lamp的詳細過程(httpd+mysql+php+redis)
說明
- LAMP架構是 linux+apache+php+mysql
- 搭建的服務器環(huán)境,docker容器都基本都是基于linux的,所以實際需要部署的apache容器+php容器+mysql容器+redis容器
- 本內容docker宿主機是windows
- 各個容器之間互聯關系:mysql容器、redis容器 只和 PHP容器有互聯(–link),httpd容器 只和 php容器有互聯(–link),所以創(chuàng)建容器的流程 依次 為 mysql 容器、redis容器、php容器(互聯mysql、redis)、httpd容器(互聯PHP)
- 宿主機和容器之間進行目錄或文件掛載時,需提前準備好相關目錄與文件,一旦創(chuàng)建,宿主機里面的目錄或文件 會 直接覆蓋容器內對應的目錄和文件
- 宿主機和容器之間掛載配置文件時,在宿主機內修改配置文件后,需重啟對應的容器
搭建
拉取所需鏡像
docker pull php:5.6-fpm
docker pull httpd
docker pull mysql:5.7
docker pull redis:3.2
#版本號可根據實際需求選擇
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是默認端口,若使用默認端口,請確保宿主機當前端口未被占用)
-e MYSQL_ROOT_PASSWORD=123456 給root用戶設置一個初始密碼
–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是默認端口,若使用默認端口,請確保宿主機當前端口未被占用)
–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是默認端口,若使用默認端口,請確保宿主機當前端口未被占用)
-v D:\DockerTest\damp\httpd\www:/var/www/html 將宿主機的某目錄 到容器內某目錄,實現文件同步
(掛載一個空文件夾是會覆蓋容器中的內容,所以配置文件要事先準備好。這里要注意當前項目的路徑,不要直接拷貝使用)
–link my-mysql 和 前面創(chuàng)建的mysql容器互聯
–link my-redis 和 前面創(chuàng)建的redis容器互聯
–name 指定當前容器別名
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(); 容器內執(zhí)行 php -f index.php 返回PHP各配置信息,則表示創(chuàng)建成功
php與mysql互聯測試
進入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(); } 容器內執(zhí)行 php -f dbtest.php 返回 sucess ,則表示數據庫連接成功
php與redis互聯測試
進入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"; } 容器內執(zhí)行 php -f redistest.php 返回 sucess ,則表示redis操作成功
httpd(apache2)
配置文件準備
httpd涉及到一些相關配置,宿主機和容器掛載目錄或文件時,必須要保證存在,因為一旦創(chuàng)建,宿主機所掛載的內容會直接覆蓋容器里對應的內容 1.隨便創(chuàng)建一個httpd容器 docker run -d --name test-httpd -p 80:80 httpd 2.進入容器 查看相關配置文件位置 docker exec -it test-httpd /bin/bash 3.將httpd相關配置 復制 到宿主機 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.刪除當前容器 docker rm -f test-httpd 5.修改 復制到宿主機的配置 在 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容器在局域網中實際的ip,可以通過 docker network inspect bridge 進行查看 端口:為容器里默認端口 若PHP容器重新啟動,需查看對應IP是否發(fā)生改變 除創(chuàng)建httpd,其他情況下修改配置文件,需重啟httpd服務
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是默認端口,若使用默認端口,請確保宿主機當前端口未被占用)
-v D:\DockerTest\damp\httpd\www:/usr/local/apache2/htdocs 將宿主機的某目錄 到容器內某目錄,實現文件同步
(掛載一個空文件夾是會覆蓋容器中的內容,所以配置文件要事先準備好。這里要注意當前項目的路徑,不要直接拷貝使用)
–link my-php 和 前面創(chuàng)建的php容器互聯
–name 指定當前容器別名
httpd測試
瀏覽器 http://127.0.0.1:8081/index.php http://127.0.0.1:8081/dbtest.php //測試數據庫是否連接成功 http://127.0.0.1:8081/dbtest.php //測試redis是否正常
到此這篇關于Docker下多容器搭建 lamp (httpd+mysql+php+redis)的文章就介紹到這了,更多相關Docker多容器搭建 lamp內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
docker環(huán)境中websocket?通過nginx代理不通解決方案
這篇文章主要介紹了docker環(huán)境中websocket?通過nginx代理不通解決方案,下面是一些可能會導致?WebSocket?代理失敗的問題以及相應的解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05