构建良好的环境

构建良好的环境,第1张

docker灵活的构建PHP环境的实现

本文主要介绍docker灵活构建PHP环境的实现。通过示例代码进行了非常详细的介绍,对大家的学习或者工作都有一定的参考价值。有需要的朋友下面和边肖一起学习。

使用docker构建一个灵活的在线php环境有时候你可能不需要其他人已经集成的一些包或映像

我们可以使用以下方法逐一构建自己需要的环境结构,最终实现一键自动部署

逐步点亮码头工人技能树

##. ######== ##########=== /""""""""""""""""".__/=== ~~~{~~~~~~~~~~~~~~~~~/===-~~~ ._____o__/ ..__/ .___.______/

*首先将clone[server]项目放在服务器的根目录下(以后也可以构建自己风格的环境结构)

(一阶)使用docker构建

1。下载图像

FPM选择冒号后的版本

码头工人拉nginx

DockpullMySQL:5.7不要求忽略本地数据库。

Dockerpullredis:3.2不要求忽略本地redis。

Docker图像查看所有下载的图像

2。下载映像后运行容器[请注意下面使用-link方法的创建顺序]

注意:
-i表示允许我们对容器进行 *** 作
-t表示在新容器中指定一个终端
-d表示容器在后台执行
/bin/bash。Br/] -name为容器指定一个名称
-v将容器内的路径挂载到主机路径
-privileged=true赋予容器权限,在挂载目录后,容器可以访问目录下的文件或目录
[/

<运行mysql容器>:

dockerrun--namemydb-p3306:3306-eMYSQL_ROOT_PASSWORD=123456-dmysql:5.7

注意:-MYSQL_ROOT_PASSWORD=123456设置MYSQL的初始密码

如果您不需要构建本地数据库,请直接进入下一步

<运行redis容器>:

dockerrun--namemyredis-p6379:6379-dredis:3.2

注意:如果您不需要构建本地redis,请直接进入下一步

<运行php容器>:

dockerrun-d-p9000:9000--namemyphp-v/server/www:/var/www/html-v/server/php:/usr/local/etc/php--linkmydb:mydb--linkmyredis:myredis--privileged=truephp:7.2-fpm

注意:如果不需要构建本地数据库或redis,可以省略-LINKMYDB:MYDB-LINKmyredis:myredis

注意-v挂载空文件夹会覆盖容器的内容,所以应该提前准备好配置文件

<运行nginx容器>:

dockerrun--namemynginx-d-p80:80-v/server/www:/usr/share/nginx/html-v/server/nginx:/etc/nginx-v/server/logs/nginx.logs:/var/log/nginx--linkmyphp:myphp--privileged=truenginx

注意:

容器内的路径在-v语句的冒号之后。我把nginx的web项目目录配置目录日志目录挂载到我准备好的/server目录
-linkmyphp:myphp通过别名myphp连接nginx容器和php容器,所以不再需要指定myphp容器的IP

Dockerps-a检查所有容器运行成功,这里的环境基本搭建完成。

目录挂载后,可以通过修改相应挂载目录下的配置文件直接修改nginx配置,而无需进入容器修改配置。

转到/server/nginx/conf.d/default.conf

server{ listen80: server_namelocalhost: location/{ root/usr/share/nginx/html/blog/public:##/user/share/nginx/html是工作目录 indexindex.htmlindex.phpindex.htm } error-page500502503504/50x.html localtion=/50x.html{ root/usr/share/nginx/html } location~\.php${ fastcgi_passmyphp9000: ##容器与容器之间建立链接必须指定对方IP使用命令sudodockerinspectmyphp可以看到最下面IPAddress参数就是该容器的ip ##我们在创建容器时已经通过--link的方式创建容器,我们可以使用被Link容器的笔名惊醒访问,而不是通过IP,解除了对IP的依赖 fastcgi_indexindex.php fastcgi-paramSCRIPI_FILENAME/var/www/html/blog/public$fastcgi_script_name: ##myphp和mynginx的工作目录不同mynginx是/usr/share/nginx/html ##php是/var/www/html所以在创建容器时我们已经将两个目录都挂在到宿主机相同的目录上了/server/www但这里不能使用宿主机的公共挂载目录 includefastcgi_params: } }

3。PHP扩展库安装

Dockexec-timmyphp/bin/bash首先进入容器。

dock-PHP-ext-安装PDOpdo_mysql安装pdo_mysql扩展

docker-php-ext-installredis

注意:此时,redis.so会收到一条错误消息,因为PHP源文件中不包含某些扩展

方法1:

tarzxvf/server/PHP_lib/redis-4.1.0.tgz解压下载的redis扩展包。

dockerCP/server/PHP_lib/redis-4.1.0myPHP:/usr/src/PHP/ext/redis将扩展放入容器中,然后安装。

注意:

将扩展包直接放入容器的ext目录可能会报错:没有这样的容器:path:myphp:/usr/src/PHP/ext
可以打开一个额外的服务器窗口进入PHP容器,执行docker-php-ext-installredis。这时你会报错:/Usr/src/php/ext/redis不存在
保持这个状态然后在你的第一个服务器窗口执行最后一个命令,就会成功
(具体原因未知,但是你要先执行一次docker-php-ext-install命令,才会在容器中打开/Usr/src/PHP。

方法二:

注意:

推荐官方使用PECL(PHP的扩展库仓库,由PEAR打包)。使用peclinstall安装扩展,然后使用官方的docker-PHP-ext-enable
快捷脚本来启用扩展

peclinstallredis&&docker-php-ext-enableredis

DockrestartMyPHP安装扩展,退出容器并重启容器。

*其他命令

Dockerstop$(dockerps-q)停止所有容器。

Dockerrm$(dockerps-aq)删除所有容器

删除所有镜像

Dockinspectmyphp查看容器配置信息

*构建您自己的目录结构

您还可以构建自己的服务器目录结构。首先你要知道挂载一个空文件夹会清空空容器中的所有内容,所以在挂载之前要先拷贝一下
。例如,创建一个临时容器sudodockerrun-namemynginx-p80:80-it-dnginx。Br/] 进入容器查看你想要的配置文件的目录地址,例如:/etc/nginx退出容器
将容器中你想要的目录结构复制到主机上,例如:DockerCPMyDB:/etc/nginx/server/nginx
[/h/删除容器,新建容器时就可以挂载目录了。之后可以直接快速修改nginx的配置文件
DockerRun-namemynginx-d-p80:80-v/server/nginx:/etc/nginx-linkmyPHP:myPHP-privileged。

(二阶)docker-compose自动构造

完成以上步骤后,你对docker的基本容器 *** 作有了初步的了解
docker-compose排列容器。例如,您有一个php映像、一个mysql映像和一个nginx映像。如果没有docker-compose,
那么每次启动都需要键入每个容器的启动参数,环境变量,容器命名,指定不同容器的链接参数等等。
比较繁琐。使用docker-composer后,可以一次性在docker-composer.yml文件中编写这些命令。以后,每次启动整个环境
(包括3个容器)时,只需点击一个docker-composerup命令

1.安装docker-compose

curl-Lhttps://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname-s`-`uname-m`>/usr/local/bin/docker-compose chmod+x/usr/local/bin/docker-compose docker-compose--version

2.一键式部署环境

已经配置了/server/compose/docker-compose.yml。直接输入命令即可

cd/server/compose docker-composeup-d version:"2" sevices: mydb: container_name:"mydb" ports: -"3306:3306" volumes:#挂载的目录写在这里 -/server/mysql:/var/lib/mysql -/etc/localtime:/etc/localtime:re#设置容器和宿主机的时间同步 environment:#自定义环境变量 MYSQL_ROOT_PASSWORD:123456 images:mysql:8.0#容器引用镜像 myredis: container_name:"myredis" restart:always ports: -"6379:6379" volumes: -/server/redis:/data -/etc/localtime:etc/localtime:re image:redis:3.2 myphp: container_name:"myphp" restart:always ports: -"9000:9000" volumes: -/server/www:/var/www/html -/sever/php:/usr/local/etc/php -/etc/localtime:/etc/localtime:re links: -"mydb" -"myredis" image:php:7.2-fpm mynginx: container_name:"mynginx" restart:always ports: -"80:80" links: -"myphp" volnmes: -/server/www:/usr/share/nginx/html -/server/nginx:/etc/nginx -/server/logs/nginx.logsL/var/log/nginx -/etc/localtime:/etc/localtime:re image:nginx:latest

对比上面运行容器的命令,docker_yml的配置结构和语义就一目了然了。

(第三阶)完成dokcer-compose和dockerfile的构造

Docker-compose用来实现一键 *** 作,但问题是PHP的扩展库要单独安装,所以这里需要Dockerfile来构建自定义容器镜像

实现真正的一键完成。

目录:

server-| -|compose.dockerfiles-|docker-compose.yml -|mysql-|Dockerfile这里设置我们自定的dockerfile来构建mysql镜像 | -|nginx-|Dockerfile这里设置我们自定的dockerfile来构建nginx镜像 | -|php-|Dockerfile这里设置我们自定的dockerfile来构建php镜像 | -|redis-|Dockerfile这里设置我们自定的dockerfile来构建redis镜像 FROMphp:7.2-fpm#构建自定义镜像过映入的官方镜像 MAINTAINERgoozp"用户名" #设置容器时区和宿主机相同 ENVTZ=Asia/Shanghai RUNln-snf/usr/share/zoneinfo/$TZ/etc/localtome&&echo$TZ>/etc/timezone #更新安装依赖包和PHP核心拓展 RUNapt-getupdate&&apt-getinstall-y\ libfreetype6-dev\ libhpeg62-turbo-dev\ libpng-dev\ &&docker-php-ext-configuregd--with-freetype-dir=/usr/include/--with-jpeg-dir=/usr/include/\ &&docker-php-ext-install-j$(nproc)gd\ &&docker-php-ext-installzip\ &&docker-php-ext-installpdo_mysql\ &&docker-php-ext-installopcache &&docker-php-ext-installmysqli rm-r/var/lib/apt/lists/* #源码包不存在的扩展使用pecl装 RUNpeclinstallredis\ &&peclinstallxdebug\ &&docker-php-ext-enableredisxdebug WORKDIR/data #权限设置 RUNusermod-u1000www-data

php的自定义dockerfile构建一个自定义镜像,同时安装扩展。所有dockerfile配置完成后,docker-compose.yml文件不需要
使用官方镜像image:php-fpm:7.2,直接构建:。/PHP直接引用目录中配置的dockerfile[/Br/] 最后提示:一旦创建了映像,下次docker-compose将直接取已有的映像,而不是构建它。如果您修改Dockerfile配置,请记得删除之前的图像

cd/server/compose.dockerfiles docker-composeup-d

以上就是docker的所有环境配置方法

*当您需要使用shell来调度php在主机上执行脚本时

dockerexec-itmyphp/bin/bash-c'/usr/local/bin/php/var/www/html/blog/public/index.php'

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/774721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存