docker搭建nginx+php+mysql开发环境-八零岁月
记录所见
分享所感

docker搭建nginx+php+mysql开发环境

MySQL

从 Dockerhub拉取 MySQL 镜像:

$ docker pull mysql

实例容器,启动数据库

$ docker run -p 3306:3306 --name mysql -v ~/data/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d --privileged=true mysql
### 命令说明:
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-v ~/data/mysql/:/var/lib/mysql:将主机当前用户目录下的mysql文件夹挂载到容器的/var/lib/mysql 下,在mysql容器中产生的数据就会保存在本机mysql目录下
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
-d 后台运行容器
--name 给容器指定别名
--privileged=true  可能会碰到权限问题,需要加参数

PHP-FPM

从 Dockerhub拉取 PHP-FPM 镜像:

$ docker pull php:5.6-fpm

实例容器,启动php:5.6-fpm

$ docker run --name php-fpm -p 9000:9000 -d php:5.6-fpm

把配置文件复制到本地:

$ cd ~/data/conf/php
$ docker cp php-fpm:/usr/local/etc/php-fpm.d/www.conf www.conf
$ docker cp php-fpm:/usr/src/php/php.ini-production php.ini

这里要特别注意一下,php:5.6-fpm:/usr/src/php/php.ini-production,在实例出的容器中,不一定是路径src/php,拉取的php:5.6-fpm版本镜像不同,php.ini路径不同。

可以这样查看php.ini路径

# 先进入容器
$ docker exec -it php-fpm bash
$ cd /usr/src/ && ls
# 有以下两个文件
php.tar.xz   php.tar.xz.asc
# 这里我们需要解压php.tar.xz文件,因为php.ini-production就在其中
//先解压xz
 xz -d php.tar.xz  
//再解压tar
# tar -xvf  php.tar

解压完毕后, php.ini-production便出现了,我当时的路径是/usr/src/php-5.6/php.ini-production

即,前文中的
$ docker cp php-fpm:/usr/src/php/php.ini-production php.ini
改为
$ docker cp php-fpm:/usr/src/php-5.6/php.ini-production php.ini

在本地服务器修改 php.ini 的内容,设置cgi.fix_pathinfo=1(要先删除前面的;注释符)。


前面关于php-fpm的一系列操作主要是为了获得配置文件,并没有挂载本地目录到容器中,所以接下来需要删除容器,重新实例一个容器出来

$ docker stop php-fpm
$ docker rm php-fpm
$ docker run --name php-fpm -p 9000:9000 --link mysql:mysql -v ~/data/www/html:/var/www/html -v /data/www/80sy:/var/www/80sy -v ~/data/conf/php/www.conf:/usr/local/etc/php-fpm.d/www.conf -v ~/data/conf/php/php.ini:/usr/local/etc/php/php.ini -d php:5.6-fpm

Nginx

从 Dockerhub拉取 Nginx 镜像:

$ docker pull nginx

映射HTML路径

默认情况下,Docker nginx服务器的HTML路径(网站根目录)在容器/usr/share/nginx/html目录下,现在需要把这个目录映射到本地服务器的~/data/www/html目录。

配置 Nginx

Nginx的强大很大部分体现在配置文件上,对于一些高级的应用来说,自定义Nginx非常重要。所以,我们需要把Nginx的配置文件复制到本地服务器目录:

server
    {
        listen 80;
        #listen [::]:80;
        server_name www.80sy.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /var/www/80sy;

        #error_page   404   /404.html;
        location ~ [^/]\.php(/|$)
        {
         fastcgi_pass   php-fpm:9000;
         fastcgi_index  index.php;
         include        fastcgi_params;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        access_log off;
    }
server
    {
        listen 80;
        #listen [::]:80;
        server_name _;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /var/www/default;

        #error_page   404   /404.html;
        location ~ [^/]\.php(/|$)
        {
         fastcgi_pass   php-fpm:9000;
         fastcgi_index  index.php;
         include        fastcgi_params;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        access_log off;
    }

实例容器,启动Nginx


docker run –name nginx -p 80:80 –link php-fpm -v /data/www/html:/var/www/html -v /data/www/default:/var/www/default -v /data/conf/nginx:/etc/nginx/conf.d -d nginx


访问http://www.80sy.com 即可对应到本地/data/www/80sy目录下的网站

访问http://IP 即可对应到本地/data/www/default 目录下的网站。

即可实现一个Docker创建多个站点。

文章转载请说明出处:八零岁月 » docker搭建nginx+php+mysql开发环境

分享到:更多 ()

吐槽集中营 抢沙发

评论前必须登录!