Docker下多容器搭建 lamp的详细过程(httpd+mysql+php+redis)

  目录

  说明

  搭建

  拉取所需镜像

  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:DockerTestdamphttpdwww:/var/www/html --link my-mysql --link my-redis php:5.6-fpm

  -d 后台运行容器

  -p 将宿主机端口映射到容器(9000是默认端口,若使用默认端口,请确保宿主机当前端口未被占用)

  -v D:DockerTestdamphttpdwww:/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:DockerTestdamphttpdwww 下创建一个 index.php

  <?php

  phpinfo();

  容器内执行 php -f index.php

  返回PHP各配置信息,则表示创建成功

  php与mysql互联测试

  进入php容器

  docker exec -it my-php /bin/bash

  在宿主机映射目录 D:DockerTestdamphttpdwww 下创建一个 dbtest.php

  <?php

  $servername = "my-mysql"; //mysql容器别名

  $username = "root";

  $password = "123456";

  try {

  $conn = new PDO("mysql:host=$servername;", $username, $password);

  echo "sucess

  ";

  }

  catch(PDOException $e)

  {

  echo $e->getMessage();

  }

  容器内执行 php -f dbtest.php

  返回 sucess ,则表示数据库连接成功

  php与redis互联测试

  进入php容器

  docker exec -it my-php /bin/bash

  在宿主机映射目录 D:DockerTestdamphttpdwww 下创建一个 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:DockerTestdamphttpdconf

  docker cp test-httpd:/usr/local/apache2/conf/extra D:DockerTestdamphttpdconf

  4.删除当前容器

  docker rm -f test-httpd

  5.修改 复制到宿主机的配置

  在 httpd.conf 文件最后面添加

  Include conf/extra/test.conf (test.conf可以随便自定义)

  在 extra目录下 创建 test.conf 文件,并添加

  

  DirectoryIndex index.html index.php

  

  

  DocumentRoot "/usr/local/apache2/htdocs"

  ServerName localhost

  

  Options None

  Require all granted

  

  ProxyRequests Off

  ProxyPassMatch ^/(.*.php)$ fcgi://172.17.0.9:9000/var/www/html/$1

  

  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:DockerTestdamphttpdconfhttpd.conf:/usr/local/apache2/conf/httpd.conf -v D:DockerTestdamphttpdconfextra:/usr/local/apache2/conf/extra/ -v D:DockerTestdamphttpdwww:/usr/local/apache2/htdocs --link my-php httpd

  -d 后台运行容器

  -p 将宿主机端口映射到容器(80是默认端口,若使用默认端口,请确保宿主机当前端口未被占用)

  -v D:DockerTestdamphttpdwww:/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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  您可能感兴趣的文章: