我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Docker下多容器搭建 lamp (httpd+mysql+php+redis)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Docker下多容器搭建 lamp (httpd+mysql+php+redis)

Docker下多容器搭建lamp环境

说明

  • 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-fpmdocker pull httpddocker pull mysql:5.7docker 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登录mysqlmysql -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创建一个keyset 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_mysqldocker-php-ext-install pdo_mysql安装扩展mysqldocker-php-ext-install mysql安装扩展mysqlidocker-php-ext-install mysqli安装扩展pdodocker-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/class="lazy" data-src/php/ext#将解压后的redis扩展移到执行目录mv phpredis-4.2.0 /usr/class="lazy" data-src/php/ext/redis#安装redisdocker-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与mysql互联测试
进入php容器docker exec -it my-php /bin/bash在宿主机映射目录 D:\DockerTest\damp\httpd\www\ 下创建一个 dbtest.phpgetMessage();}容器内执行 php -f dbtest.php返回 sucess  ,则表示数据库连接成功
php与redis互联测试
进入php容器docker exec -it my-php /bin/bash在宿主机映射目录 D:\DockerTest\damp\httpd\www\ 下创建一个 redistest.phpconnect('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 httpd2.进入容器 查看相关配置文件位置docker exec  -it test-httpd /bin/bash3.将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-httpd5.修改 复制到宿主机的配置    在 httpd.conf 文件最后面添加         Include conf/extra/test.conf (test.conf可以随便自定义)        在 extra目录下 创建 test.conf 文件,并添加         DirectoryIndex index.html index.phpDocumentRoot "/usr/local/apache2/htdocs"ServerName localhost Options None Require all granted    ProxyRequests OffProxyPassMatch ^/(.*\.php)$ fcgi://172.17.0.9:9000/var/www/html/$1LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so6.注意: 配置文件中 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.phphttp://127.0.0.1:8081/dbtest.php   //测试数据库是否连接成功http://127.0.0.1:8081/dbtest.php   //测试redis是否正常

来源地址:https://blog.csdn.net/u011598235/article/details/126283972

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Docker下多容器搭建 lamp (httpd+mysql+php+redis)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录