用docker部署独立运行的nginx-php-mysql环境

学习docker渠道有很多,除官方文档外,网上也有很多大神的文章可以作为参考。作为一个PHPer,当然要用它搞搞事情了。本次使用的宿主机为Centos7,nginx、php、mysql将部署为独立的容器实例。为了快速部署,所以还是采用了官方镜像。安装docker步骤本文不再展示,可以自行搜索。

一、生成mysql容器

1.拉取官方镜像
docker pull mysql

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

2.创建容器
#创建www目录,主要存放我们的php应用
mkdir /home/www
#创建一个目录
mkdir -p /server/mysql
cd /server/mysql

#创建容器
docker run \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v "$PWD"/data:/var/lib/mysql \
-v "$PWD"/conf:/etc/mysql/conf.d \
-d mysql

说明
–name 参数为mysql容器名称,可以自己定义。
-p 指定外部映射到容器的端口
-e 环境变量 MYSQL_ROOT_PASSWORD为指定root账号密码
-v 映射目录或者文件
    * /data 为mysql数据目录
    * /conf 为配置目录
-d 以守护进程的方式运行

运行成功
运行成功

查看容器

docker ps -a

查看容器
以上图为例,Exited状态为已退出,Up状态为运行中。

一个小提示
如果使用最新的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容器

1.拉取官方镜像
docker pull php:7.2-fpm
2.创建容器
#创建一个目录
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:ro \
--link mysql \
php:7.2-fpm

说明
重复的就不作说明,上面已经介绍过了。
-v 目录映射
    * /etc/ php 的配置目录,存放php.ini的地方
    * /home/www/ 映射php www目录
–link mysql 因为php和mysql都是独立的容器运行,所以这里需要通过参数连接。

3.安装php扩展
#进入php容器bash界面
docker exec -it php bash
#以安装pdo_mysql扩展为例
cd /usr/local/bin
./docker-php-ext-install pdo_mysql

可以查看大神[原文]
官方php镜像似乎没有编译pdo_mysql和mysqli扩展,所以这个命令用得到。
注意:
安装好扩展之后,需要在配置文件中加入对应的扩展项。

#进入宿主机的配置目录
cd /server/php
#没有php.ini则需要创建,然后在里面加入
extension=pdo_mysql

三、生成nginx容器

1.熟悉的套路,拉取官方镜像
docker pull nginx
2.创建容器
#创建一个巴适的目录
mkdir /server/nginx
cd /server/nginx

#创建容器
docker run --name nginx \
-d -p 8080:8080 \
-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

说明
-v 目录映射说明
    * /home/www:/usr/share/nginx/html 网站主目录映射
    */nginx.conf nginx配置文件
    * /logs 日志目录
    * /conf.d 配置目录
–link php 连接php容器

3.最关键的一步,nginx配置

大部分人会在这里踩坑,在网上也搜索了很多资料。可以参考这篇[文章]
ningx.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配置,请自行搜索。

四、其他

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

修改配置文件后需要重启容器生效。
感谢阅读,错误的地方恳请指正。
这里写图片描述

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值