docker 安装多版本php,【docker专题(5)】安装Lnmp(多PHP版本与宝塔)

[info] 稍微了解一下即可,实际上不会这样操作,都是通过docker-compose来进行编排的。

安装Lnmp(多PHP版本)

下载对应的镜像版本

106502c41ac793182d51a35256ffc37d.png

docker pull mysql:8.0

docker pull mysql:5.7

docker pull php:7.2-fpm

docker pull php:5.6-fpm

docker pull nginx:1.15

创建容器,映射工作目录和端口

# 创建php:5.6-fpm的容器并命名php56,将容器的9000端口映射到主机的9000端口。

# 注意:左边是宿主机,右边是docker

# 注意:挂载的目录要和nginx配置的root目录一致

docker run -d -p 9000:9000 --name php56 -v /home/docker/wwwroot:/usr/share/nginx/html php:5.6-fpm

# 停止上面版本之后再创建其他版本的PHP

# 进入容器后再通过docker-php-ext-install来安装对应的扩展 docker-php-ext-install mysqli

docker run -d -p 9000:9000 --name php72 -v /home/docker/wwwroot:/usr/share/nginx/html php:7.2-fpm

# 创建mysql容器,同一个镜像可以创建多容器(镜像就像是类,容器就像是实例)

docker run -d -p 3307:3306 --name mysql57-master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

docker run -d -p 3308:3306 --name mysql57-slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

# 创建nginx容器

# 1. 第一个“-v”,是项目位置,把项目放到挂载到的目录下即可

# 2. 第二个“-v”,是挂载的主配置文件"nginx.conf",注意"nginx.conf"文件内有一行

# "include /etc/nginx/conf.d/*.conf;" ,

# 这个include指向了子配置文件的路径,此处注意include后所跟的路径一定不能出错

# 3. 第三个“-v”,把docker内子配置文件的路径也挂载了出来,注意要与 “2.” 中include指向路径一致

# 4. nginx.conf是挂载了一个文件(docker是不推荐这样用的),conf.d挂载的是一个目录

# 注意,一定要先创建目录再挂载

docker run \

--name nginx115 \

-d -p 80:80 \

-v /home/docker/wwwroot:/usr/share/nginx/html \

-v /home/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \

-v /home/docker/nginx/vhost:/etc/nginx/conf.d \

nginx:1.15

[info] 1. 挂载的目录可以用nsenter命令进入容器中查看,注意,不要用docker attach。 甚至还可以用 docker exec -i -t container_name /bin/bash

要理解映射目录,宿主目录只是映射到容器目录,要站在容器目录的角度来做相应的配置!

注意,php的挂载目录要与nginx的挂载目录要一致,否则会出现File not found.错误!

配置

[danger] 注意,所有的配置是以容器根目录开始;不要设置成映射的宿主机目录。

nginx.conf

user nginx;

worker_processes 1;

error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;

events {

worker_connections 1024;

}

http {

include /etc/nginx/mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;

#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

include /etc/nginx/conf.d/*.conf;

}

hello_world.conf

server {

listen 80;

server_name localhost;

# 这里是容器的位置!

root /usr/share/nginx/html;

index index.php index.html;

location / {

index index.php index.html index.htm;

if (!-e $request_filename) {

rewrite ^/(.*)$ /index.php?$1 last;

break;

}

}

location ~ \.php$ {

# 这里的ip是对应PHP版本的容器的ip地址

# docker inspect -f '{{.NetworkSettings.IPAddress}}' 容器名

# 版本切换的话,就是停止和启动对应版本的容器即可

fastcgi_pass 172.17.0.2:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

}

安装PHP扩展

docker exec -it php5.6 /bin/bash

docker-php-ext-install mysqli (mysql,gd,curl,...)

安装镜像中非自带的php扩展:例如 php-redis扩展:

php-redis扩展下载地址:https://github.com/phpredis/p... (选择适合的版本下载)

可以在php容器内使用wget下载,也可以在ubuntu中下载后拷贝到容器中。

#将ubuntu中的/data/phpredis3.1.2拷贝到容器的/usr/src/php/ext/目录下并重命名为redis 。

docker cp /data/phpredis3.1.2 php5.6:/usr/src/php/ext/redis

PHP链接其他容器的mysql

$dbms='mysql'; //数据库类型

$host='172.17.0.3'; //容器ip

$port=3306;

/*

$host='172.28.3.199'; //宿主机ip

$port=3307;

注意:

端口映射: 3307:3306

容器ip:172.17.0.3

宿主机ip:172.28.3.199

如果要通过容器ip来链接的话,端口要填写容器ip的端口3306。

而不是映射到宿主机的3307端口。

如果要通过宿主机ip来链接的话,端口要写映射到宿主机的端口3307。

*/

$dbName='test'; //使用的数据库

$user='root'; //数据库连接用户名

$pass='123456'; //对应的密码

$dsn="$dbms:host=$host;port=$port;dbname=$dbName";

try {

$dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象

echo "连接成功
";

foreach ($dbh->query('SELECT * from test') as $row) {

print_r($row);

}

$dbh = null;

} catch (PDOException $e) {

die ("Error!: " . $e->getMessage() . "
");

}

docker宝塔面板安装(不建议,做测试可以用)

docker pull centos:7

# 因为要用于swoole开发,所以开的端口比较多

# 只用在开发环境

docker run -it -p 20:20 -p 21:21 -p 80:80 -p 8080:8080 -p 443:443 -p 3366:3306 -p 6399:6379 -p 888:888 -p 8888:8888 -p 9500:9500 -p 9501:9501 -p 9502:9502 -p 9503:9503 -p 9504:9504 -p 9505:9505 --name bt_panel -v /home/docker/wwwroot:/home/wwwroot centos:7

# 下载必要工具

yum -y update && yum -y install initscripts screen wget

# 防止网络掉线或意外退出,可以使用screen工具

screen -S install_bt

# 安装宝塔面板

wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

安装完输出以下内容

==================================================================

Congratulations! Installed successfully!

==================================================================

# 自行替换成内网ip

Bt-Panel: http://180.168.76.242:8888/6a863329

username: vzsybxji

password: 455e4a2a

# 宝塔命令

https://www.bt.cn/btcode.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值