欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker下多容器搭建 lamp的詳細過程(httpd+mysql+php+redis)

 更新時間:2024年01月29日 10:31:12   作者:Kang_Boy  
這篇文章主要介紹了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容器網絡端口配置過程詳解

    Docker容器網絡端口配置過程詳解

    這篇文章主要介紹了Docker容器網絡端口配置過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • 詳解ASP.NET Core 網站在Docker中運行

    詳解ASP.NET Core 網站在Docker中運行

    本篇文章主要介紹了詳解ASP.NET Core 網站在Docker中運行,非常具有實用價值,需要的朋友可以參考下
    2017-05-05
  • Docker鏡像壓縮與優(yōu)化操作

    Docker鏡像壓縮與優(yōu)化操作

    這篇文章主要介紹了Docker鏡像壓縮與優(yōu)化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 快速修改運行中的docker容器端口映射的三種方式

    快速修改運行中的docker容器端口映射的三種方式

    當docker?start運行容器后并沒有提供一個-p選項或設置,讓你修改指定端口映射規(guī)則,那么這種情況我們該怎么處理呢?今天教如何修改運行中的docker容器的端口映射,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • 通過Docker運行AnythingLLM的方法

    通過Docker運行AnythingLLM的方法

    這篇文章主要介紹了通過Docker運行AnythingLLM的方法,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-12-12
  • 清理docker在var目錄下的大量空間占用問題

    清理docker在var目錄下的大量空間占用問題

    這篇文章主要介紹了如何清理docker在var目錄下的大量空間占用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • 深入理解 Docker 數據卷(Data Volume)

    深入理解 Docker 數據卷(Data Volume)

    本文詳細介紹了Docker數據卷(DataVolume)的概念、作用、使用命令、掛載方式以及最佳實踐,數據卷是Docker中實現數據持久化和共享的關鍵機制之一,通過本文的學習,讀者可以更好地掌握數據卷的使用方法,從而在容器化應用中進行有效的數據管理
    2024-11-11
  • docker環(huán)境中websocket?通過nginx代理不通解決方案

    docker環(huán)境中websocket?通過nginx代理不通解決方案

    這篇文章主要介紹了docker環(huán)境中websocket?通過nginx代理不通解決方案,下面是一些可能會導致?WebSocket?代理失敗的問題以及相應的解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • 在Docker容器中不需要運行sshd的原因淺析

    在Docker容器中不需要運行sshd的原因淺析

    在一個容器中運行SSH服務器,這真的是一個錯誤(大寫字母W)嗎?老實說,沒那么嚴重。當你不去訪問Docker主機的時候,這樣做甚至是極其方便的,但是這仍然需要在容器中取得一個shell
    2016-11-11
  • 關于Dockerfile中COPY文件的使用

    關于Dockerfile中COPY文件的使用

    在使用Dockerfile創(chuàng)建鏡像時,如果使用COPY命令需要將文件或文件夾與Dockerfile放在同一目錄下,或者通過-dockerbuild-f指定Dockerfile的完整路徑來解決
    2025-02-02

最新評論