Docker下多容器搭建 lamp的详细过程(httpd+mysql+php+redis)
作者:Kang_Boy
说明
- 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!