欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。

文摘  Docker搭建PHP运行的nginx-php-mysql+phpmyadmin开发环境

Docker 本站 547 0评论

本次使用的宿主机为Centos7,nginx、php、mysql将部署为独立的容器实例。为了快速部署,所以还是采用了官方镜像。安装docker步骤本文不再展示,可以自行搜索。


一、生成MySQL容器


mysql后面可以指定版本,本文发布时最新的mysql版本是8.0.11,可以运行docker search imageName查询。如果没有指定版本,则默认拉取最新的版本。可以运行docker images查看已下载的镜像。


拉去镜像

docker pull mysql:5.7

目录:

mkdir /home/www

mkdir -p /server/mysql


创建mysql容器

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 -v "$PWD"/data:/var/lib/mysql -v "$PWD"/conf:/etc/mysql/conf.d -d mysql:5.7

说明:

name 参数为mysql容器名称,可以自己定义。

-p 指定外部映射到容器的端口

-e 环境变量 MYSQL_ROOT_PASSWORD为指定root账号密码

-v 映射目录或者文件

    * /data 为mysql数据目录

    * /conf 为配置目录

-d 以守护进程的方式运行


docker ps -a 可以看到运行的容器。


一个小提示:

如果使用最新的mysql版本,例如使用mysql8.0.11,php在连接数据库的时候可能可能会连接不上,是因为mysql默认密码验证插件是caching_sha2_password,解决办法是修改数据库默认验证方式,可以创建新的数据库账号,然后修改验证插件为mysql_native_password。


另附sql:

# 修改

ALTER USER username IDENTIFIED WITH mysql_native_password BY '123456';

# 刷新权限,生效

FLUSH PRIVILEGES; 


二、生成PHP容器


拉取镜像

docker pull php:7.3-fpm

目录:

mkdir /server/php

cd /server/php


生成容器

docker run -d --name php -p 9000:9000 -v "$PWD"/etc/:/usr/local/etc/php -v /home/www/:/var/www/html:rw --link mysql php:7.3-fpm

说明:

-v 目录映射

    * /etc/ php 的配置目录,存放php.ini的地方

    * /home/www/ 映射php www目录

–link mysql 因为php和mysql都是独立的容器运行,所以这里需要通过参数连接。


安装php扩展

#进入php容器bash界面

docker exec -it php bash        显示结果:root@c97f5cad69d9:/var/www/html#

#以安装pdo_mysql扩展为例

cd /usr/local/bin

./docker-php-ext-install pdo_mysql


如果报  /usr/local/bin/docker-php-ext-enable: cannot create /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini: Directory nonexistent    

解决方案:

直接在/usr/local/etc/php目录下面新建 conf.d目录和对应的docker-php-ext-pdo_msql.ini文件

其中docker-php-ext-pdo_msql.ini的内容为:

extension=pdo_mysql.so


附:修改php.ini配置文件

只要在/usr/local/etc/php/conf.d目录下建立*.ini文件都可以自动加载,比如:php.ini(注:本文实例为 /server/php/etc/conf.d/)

修改php.ini文件上传大小限制:

memory_limit = 32m

file_uploads = on

upload_max_filesize = 100m

post_max_size = 100m


三、生成nginx容器


拉取镜像

docker pull nginx:1.16.1

目录

mkdir /server/nginx

cd /server/nginx


创建容器

docker run --name nginx -d -p 8080:8080 -p 443:443 -v /home/www:/home/www -v /home/www:/usr/share/nginx/html -v "$PWD"/nginx.conf:/etc/nginx/nginx.conf -v "$PWD"/logs:/var/log/nginx -v "$PWD"/conf.d:/etc/nginx/conf.d --link php -d nginx:1.16.1

说明:

-v 目录映射说明

    * /home/www:/usr/share/nginx/html 网站主目录映射

    */nginx.conf nginx配置文件

    * /logs 日志目录

    * /conf.d 配置目录

–link php 连接php容器


报错了:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/server/nginx/nginx.conf\\\" to rootfs \\\"/var/lib/docker/overlay2/317b260544e1c945dd3206f3551f2447186786a781aaaabc84278dc75bc057e5/merged\\\" at \\\"/var/lib/docker/overlay2/317b260544e1c945dd3206f3551f2447186786a781aaaabc84278dc75bc057e5/merged/etc/nginx/nginx.conf\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.


解决办法:

换一种方法不启动 -v "$PWD"/nginx.conf:/etc/nginx/nginx.conf \ 这个

启动之前先把刚刚已经启动的容器删除 docker rm -f nginx 然后记得删除掉/server/nginx/nginx.conf(注意这里帮你创建了个目录需要也删除 然后在执行下面命令其他不管)


然后发现没错 正常启动


然后进入nginx容器把配置文件复制到 /server/nginx/ 里面 然后再次启动就没毛病了 如下操作:

docker exec -it nginx /bin/bash (进入容器 获取文件)

cd /etc/nginx/ (这里主要获取配置文件路径的)

exit

cd /server/nginx(进入nginx目录)

docker cp 7af54045c3d6:/etc/nginx/nginx.conf .  (ps:文件copy成功后 把nginx容器先删除掉)

docker rm -f nginx


再次创建容器:

docker run --name nginx -d -p 8080:8080 -p 443:443 -v /home/www:/home/www -v /home/www:/usr/share/nginx/html -v "$PWD"/nginx.conf:/etc/nginx/nginx.conf -v "$PWD"/logs:/var/log/nginx -v "$PWD"/conf.d:/etc/nginx/conf.d --link php -d nginx:1.16.1


正常。


nginx配置


修改nginx.conf如下:

user nginx;
worker_processes auto;
error_log /server/nginx/logs/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    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;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include /server/nginx/conf.d/*.conf;
    server {
        #根据映射的端口确定
        listen       8080;
        listen       [::]:8080;
        server_name  localhost;
        root         /home/www/;
        index  index.php index.html index.htm;
        location ~ \.php$ {
                fastcgi_pass   php:9000;
                fastcgi_index  index.php;
                #此处 $fastcgi_script_name之前必须为/var/www/html
                fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
                include        fastcgi_params;
        }
        include /etc/nginx/default.d/*.conf;
        location / {
        }
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}


增加一个虚拟主机:

在conf.d目录下创建一个vhost.conf,写入如下内容。假设有一个test目录,为我们新的网站项目,解析的域名为test.com。重启nginx容器,访问http://test.com:8080。

server {
    listen       8080;
    listen       [::]:8080;
    server_name  test.com;
    root         /home/www/test/;
    index  index.php index.html index.htm;
    location ~ \.php$ {
            fastcgi_pass   php:9000;
            fastcgi_index  index.php;
            #注意这里的$fastcgi_script_name之前有变化
            fastcgi_param  SCRIPT_FILENAME  /var/www/html/test/$fastcgi_script_name;
            include        fastcgi_params;
    }
    include /etc/nginx/default.d/*.conf;
}

更多的nginx配置,请自行搜索。


四、生成phpmyadmin容器


拉取镜像

docker pull phpmyadmin/phpmyadmin


执行镜像

docker run --name myadmin -d --link mysql:db -p 8081:80 phpmyadmin/phpmyadmin:latest

说明:

–link是连接已经运行的mysql容器, db只是别名. 

-e PMA_PORT是访问数据库的主机,可省去(-e PMA_USER=root -e PMA_PASSWORD=mysql123456)PMA_USER和PMA_PASSWORD是连接mysql的用户名和密码

之后访问服务器的8081端口就可以访问MySQL数据库了。


访问地址:

http://SERVER_IP:8081


docker run --name myadmin -d --link mysql:db -p 8081:80 -e PMA_HOST=106.53.53.202 -v /home/www/my_admin/config.inc.php:/var/www/html/config.inc.php phpmyadmin/phpmyadmin:latest

docker run --name myadmin -d --link mysql:db -p 8081:80 -e PMA_ABSOLUTE_URI=http://106.53.53.202/phpmyadmin -e PMA_HOST=106.53.53.202 -v /home/www/my_admin/config.inc.php:/var/www/html/config.inc.php phpmyadmin/phpmyadmin:latest


提示:phpmyadmin默认采用最新版的php版本并自带Apache服务器,这样就不能灵活修改配置文件,可以采取远程远程连接mysql容器,参考网址:http://ittxx.cn/view/332 


五、其他


1.关于docker常用的命令

#查看下载的镜像

docker images


#删除镜像

docker rmi imageName|Id


#查看所有容器

docker ps -a


#容器停止|启动|重启

docker stop|start|restart containerName|containerId

#例子

docker restart nginx


#删除容器,删除之前需要先停止

docker rm nginx


#批量删除容器

docker rm $(docker ps -a -q)


#查看容器IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql


修改配置文件后需要重启容器生效。


参考网址:

https://blog.csdn.net/lggirls/article/details/89395827

https://blog.csdn.net/qierkang/article/details/92657302

https://www.cnblogs.com/sandea/p/9749961.html


原文地址:https://blog.csdn.net/weixin_38705855/article/details/81334294

转载请注明: ITTXX.CN--分享互联网 » Docker搭建PHP运行的nginx-php-mysql+phpmyadmin开发环境

最后更新:2020-04-27 20:28:25

赞 (8) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽