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
  • 搭建的服务器环境,docker容器都基本都是基于linux的,所以实际需要部署的apache容器+php容器+mysql容器+redis容器
  • 本内容docker宿主机是windows
  • 各个容器之间互联关系:mysql容器、redis容器 只和 PHP容器有互联(–link),httpd容器 只和 php容器有互联(–link),所以创建容器的流程 依次 为 mysql 容器、redis容器、php容器(互联mysql、redis)、httpd容器(互联PHP)
  • 宿主机和容器之间进行目录或文件挂载时,需提前准备好相关目录与文件,一旦创建,宿主机里面的目录或文件 会 直接覆盖容器内对应的目录和文件
  • 宿主机和容器之间挂载配置文件时,在宿主机内修改配置文件后,需重启对应的容器

搭建

拉取所需镜像

docker pull php:5.6-fpm
docker pull httpd    
docker pull mysql:5.7
docker pull redis:3.2
#版本号可根据实际需求选择

mysql

mysql创建

通过 mysql:5.7 镜像创建一个 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创建

通过 redis:3.2 镜像创建一个 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
	创建一个key
		set name qyh
第二种:
	通过redis管理工具(Redis Desktop Manager) 进行连接测试
	Host:localhost
    Port:宿主机映射的端口

php

php创建

通过 php:5.6-fpm 镜像创建一个 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 和 前面创建的mysql容器互联

–link my-redis 和 前面创建的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
	#创建执行目录
	mkdir -p /usr/src/php/ext
	#将解压后的redis扩展移到执行目录
	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\ 下创建一个 index.php
		<?php
		phpinfo();
容器内执行 php -f index.php
返回PHP各配置信息,则表示创建成功

php与mysql互联测试

进入php容器
		docker exec -it my-php /bin/bash
在宿主机映射目录 D:\DockerTest\damp\httpd\www\ 下创建一个 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();
		}
容器内执行 php -f dbtest.php
返回 sucess  ,则表示数据库连接成功

php与redis互联测试

进入php容器
		docker exec -it my-php /bin/bash
在宿主机映射目录 D:\DockerTest\damp\httpd\www\ 下创建一个 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";
				}
容器内执行 php -f redistest.php
返回 sucess  ,则表示redis操作成功

httpd(apache2)

配置文件准备

httpd涉及到一些相关配置,宿主机和容器挂载目录或文件时,必须要保证存在,因为一旦创建,宿主机所挂载的内容会直接覆盖容器里对应的内容
1.随便创建一个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目录下 创建 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是否发生改变
除创建httpd,其他情况下修改配置文件,需重启httpd服务

httpd创建

通过 httpd:latest 镜像创建一个 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 和 前面创建的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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何清理docker产生的垃圾文件

    如何清理docker产生的垃圾文件

    这篇文章主要介绍了如何清理docker产生的垃圾文件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Docker 镜像分层及dockerfile 编写技巧

    Docker 镜像分层及dockerfile 编写技巧

    Docker镜像是由特殊的文件系统叠加而成,镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件,这篇文章主要介绍了Docker 镜像分层及dockerfile 编写,需要的朋友可以参考下
    2022-01-01
  • 云原生自动化应用于docker仓库私有凭据secret创建

    云原生自动化应用于docker仓库私有凭据secret创建

    这篇文章主要为大家介绍了云原生自动化应用于docker仓库私有凭据secret创建,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Docker v1.13.0 正式版发布

    Docker v1.13.0 正式版发布

    本文给大家分享的是Docker v1.13.0 正式版发布的信息,最近一直在学习docker中,所以关注的比较多,这里分享给大家
    2017-01-01
  • Docker Compose中如何限制容器的CPU和内存使用

    Docker Compose中如何限制容器的CPU和内存使用

    这篇文章主要为大家介绍了Docker Compose中限制容器的CPU和内存使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • docker搭建logstash和使用方法详解

    docker搭建logstash和使用方法详解

    这篇文章主要介绍了docker搭建logstash和使用方法详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • Docker同时安装MySQL和MariaDB的方法步骤

    Docker同时安装MySQL和MariaDB的方法步骤

    这篇文章主要介绍了Docker同时安装MySQL和MariaDB的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • docker安装influxdb的详细教程(性能测试)

    docker安装influxdb的详细教程(性能测试)

    这篇文章主要介绍了docker安装influxdb的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 安装Docker Desktop报错WSL 2 installation is incomplete的问题(解决报错)

    安装Docker Desktop报错WSL 2 installation is incomplete的问题(解决报错)

    这篇文章主要介绍了安装Docker Desktop报错WSL 2 installation is incomplete的问题,解决方法很简单只需我们自己手动更新一下,我们根据提示去微软官网下载最新版的wsl2安装后即可正常打开,需要的朋友可以参考下
    2021-06-06
  • Docker容器操作方法详解

    Docker容器操作方法详解

    Docker 在隔离的容器中运行进程。之前总结了Docker镜像的使用详解,本篇按照之前测试openGauss容器过程中总结出来使用Docker容器的常用命令
    2022-08-08

最新评论