docker 安装PHP环境(PHP + nginx + mysql+phpmyadmin)
发布时间:2018-11-09 13:44:54作者:wangjian浏览量:834点赞量:0
一:安装docker
参考 centos下安装docker windows 下安装docker
二:拉取相关镜像
这里我拉去的镜像分别为 nginx ,php:7.1.0-fpm ,mysql:5.7,phpmyadmin/phpmyadmin
你可以通过docker search命令查看相关镜像
docker search php docker search nginx docker search mysql docker search phpmyadmin
拉取mysql镜像
docker pull mysql:5.7
拉取phpmyadmin镜像
docker pull phpmyadmin/phpmyadmin
拉取PHP镜像
docker pull php:7.1.0-fpm
拉取nginx镜像
docker pull nginx
等待下载完成后,我们就可以在本地镜像列表里查到我们下载的相关镜像
docker images
三:建立相关目录(用于存放PHP nginx mysql的配置文件)
mkdir /srv/nginx mkdir /srv/mysql mkdir /srv/php
四:安装mysql
1:以mysql镜像运行为mysql的容器,mysql的密码设为123456
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
2:查看容器中mysql的配置内容
docker exec mysql ls /etc/mysql
3:把mysql容器中的配置目录conf.d复制到本地(宿主机)
docker cp -a mysql:/etc/mysql/conf.d /srv/mysql/conf.d/
4:停止mysql容器并删除
docker stop mysql docker rm mysql
5:重新运行mysql容器,并挂载我们复制出来的配置文件目录及mysql日志目录,mysql表信息目录
docker run -p 3306:3306 --restart=always --name mysql -v /srv/mysql/conf.d:/etc/mysql/conf.d -v /srv/mysql/logs:/logs -v /srv/mysql/data:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
命令说明
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
--restart=always:docker启动时容器自动启动
--name mysql :将容器命名为mysql
-v /srv/mysql/conf.d:/etc/mysql/conf.d:将主机的 /srv/mysql/conf.d挂载到容器的 /etc/mysql/conf.d (这里是mysql的配置目录)
-v /srv/mysql/logs:/logs:将主机 /srv/mysql/logs 目录挂载到容器的 /logs(这里是mysql的日志目录)
-v /srv/mysql/data:/var/lib/mysql :将主机/srv/mysql/data目录挂载到容器的 /var/lib/mysql (这里是mysql的表信息目录)
--privileged=true :使用该参数,container(容器)内的root拥有真正的root权限。否则,container(容器)内的root只是外部的一个普通用户权限
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
-d :后台运行容器,并返回容器ID
mysql:5.7:表示使用mysql:5.7镜像运行mysql容器
6:查看mysql容器是否运行
docker ps
如上图表示mysql容器运行成功
7:配置mysql容器使其可以远程连接mysql
(1)进入mysql容器
docker exec -it mysql /bin/bash
(2):设置容器mysql可以远程连接
mysql -u root -p #回车后会让你输入密码,密码是上面你创建出容器时设置的密码 GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123456'; FLUSH PRIVILEGES; exit;
设置好远程连接后按Ctrl+D就可以退出mysql容器
使用客户端进行远程连接测试:
这时候使用docker安装mysql成功
五:安装phpmyadmin
1使用phpmyadmin镜像运行容器
docker run --name phpadmin --link mysql:db -p 9998:80 --restart=always -d phpmyadmin/phpmyadmin
命令说明
-p 9998:80:将容器的 80端口映射到主机的 9998端口。
--restart=always:docker启动时容器自动启动
--name phpmyadmin:将容器命名为phpmyadmin
--link mysql:db:将mysql容器和phpmyadmin容器进行连接,并将mysql容器命名为db
-d :后台运行容器,并返回容器ID
phpmyadmin/phpmyadmin:表示使用phpmyadmin/phpmyadmin镜像运行phpmyadmin容器
2:在浏览器输入:localhost:9998
phpmyadmin安装成功
六:安装PHP
1:使用php-fpm镜像运行容器
docker run -p 9000:9000 --restart=always --name php -v /srv/php/logs:/phplogs -v /data/www:/www --privileged=true --link mysql:mysql -d php:7.1.0-fpm
命令说明
-p 3306:3306:将容器的 9000 端口映射到主机的 9000 端口。
--restart=always:docker启动时容器自动启动
--name php:将容器命名为php
-v /srv/php/logs:/phplogs:将主机的 /srv/php/logs挂载到容器的 /phplogs (这里是php的日志目录)
-v /data/www:/www:将主机 /data/www 目录挂载到容器的 /www(这里是php的项目目录)
--privileged=true :使用该参数,container(容器)内的root拥有真正的root权限。否则,container(容器)内的root只是外部的一个普通用户权限
--link mysql:mysql:将mysql容器和php容器进行连接,并将mysql容器命名为mysql
-d :后台运行容器,并返回容器ID
php:7.1.0-fpm:表示使用php:7.1.0-fpm镜像运行php容器
2:安装php拓展
进入php容器
docker exec -it php /bin/bash
安装相关依赖
apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev
安装iconv拓展
docker-php-ext-install iconv
安装mcrypt拓展
docker-php-ext-install mcrypt
安装gd拓展
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install gd
安装mysqli拓展
docker-php-ext-install pdo_mysql && docker-php-ext-install mysqli
其他你所需要的拓展安装方法大体差不多
按Ctrl+D就可以退出php容器,重启容器 docker restart php
七:安装nginx
(1):使用默认配置运行nginx容器
docker run -p 80:80 --name nginx -d nginx
(2):查看容器中nginx的配置文件目录
docker exec nginx ls /etc/nginx
(3)复制容器内的配置文件文件夹conf.d内的配置文件到本地(宿主机)
docker cp -a nginx:/etc/nginx/conf.d /srv/nginx/conf.d
(4)停止Nginx容器并删除
docker stop nginx docker rm nginx
(5)重新运行nginx容器,并挂载配置文件及nginx日志
docker run -p 80:80 --restart=always --name nginx -v /srv/nginx/conf.d:/etc/nginx/conf.d -v /srv/nginx/logs:/wwwlogs --privileged=true --link php:php -d nginx
命令说明:
-p 80:80:将容器的 80端口映射到主机的 80端口。
--restart=always:docker启动时容器自动启动
--name nginx:将容器命名为nginx
-v /srv/nginx/conf.d:/etc/nginx/conf.d:将主机 /srv/nginx/conf.d目录挂载到容器的 /etc/nginx/conf.d(这里是nginx的配置目录)
-v /srv/nginx/logs:/wwwlogs:将主机的 /srv/nginx/logs挂载到容器的 /wwwlogs(这里是nginx的日志目录)
--privileged=true :使用该参数,container(容器)内的root拥有真正的root权限。否则,container(容器)内的root只是外部的一个普通用户权限
--link php:php:将php容器和nginx容器进行连接,并将php容器命名为php
-d :后台运行容器,并返回容器ID
nginx:表示使用nginx镜像运行nginx容器
(6):通过浏览器访问localhost
(7)nginx配置phpinfo
[1]:新建一个phpinfo.php文件
vim /data/www/phpinfo.php
注意:这里创建phpinfo.php文件时必须要创建在/data/www目录下,因为只有这样才能够挂载到php容器中
输入如下内容
<?php phpinfo(); ?>
[2]:修改nginx的配置项
vim /srv/nginx/conf.d/default.conf
将其修改为:
server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass https://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root html; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
修改的是下图部分
上图中的主要参数说明
1:php:9000 :
php表示的是在运行nginx容器时使用的--link php:php 连接php容器时对于php容器的命名,9000表示在运行php容器时开放的端口
如果在运行nginx容器时没有使用--link php:php时,使用
docker inspect 容器ID或容器名 |grep '"IPAddress"
上面的命令可以查看容器的IP,如果没有使用--link php:php时将php:9000改为127.17.0.3:9000
2:/www$fastcgi_script_name :
/www表示的是在运行php容器时挂载本地/data/www目录的php容器的目录地址
重新启动nginx
docker restart nginx
[3]:在浏览器上输入localhost/phpinfo.php
(8)测试数据库连接
1:使用客户端软件登录mysql创建一个test库,在test库中创建一个test表
2:在/data/www目录下创建一个ceshi.php文件
vim /data/www/ceshi.php
ceshi.php文件的内容为:
<?php $con = @mysqli_connect("mysql","root","123456"); #连接数据库第一个参数为在运行php容器时连接mysql容器时给mysql容器命名的名字,如果在运行php容器时没有使用--link mysql:mysql 使用(docker inspect 容器ID或容器名 |grep '"IPAddress")获取到mysql容器的ip把第一个参数换成mysql容器ip,第二个参数为用户名,第三个为密码 if (!$con){ echo '失败'; } else{ $db = $con->select_db("test"); if ($db){ $res = $con->query("select * from test"); while($row = $res->fetch_assoc()){ var_dump($row); } } }
在浏览器上输入localhost/ceshi.php
上一篇:docker 安装Python