docker安装php开发环境

安装前的准备

首先建一个centos的镜像

  • docker pull centos:7.2.1511(docker 会自动会在你设置的registr mirrors里拉取镜像)

拉取完可以看看

docker安装php开发环境_第1张图片

  • 让本地的10000端口号来印射到docker的centos容器并且进入到容器

 docker run -i -t -p 10000:80 centos:v1 /bin/bash

----------------安装Nginx+PHP+MySql ----------------------

1.1 安装或更新gcc gcc-c++

因为我安装的Centos是绝对纯洁滴。啥也没有。没辙了。只有先安装个编译器了。

1

# yum install gcc gcc-c++

1.2 创建需要使用的目录

source 是用来存放源码的文件夹。package是用来存放编译后的库文件。lnmp是我们真正需要的东西才放里面。(nginx+mysql+memcached+php)

mkdir /download

mkdir /lnmp

cd /download

mkdir package

mkdir source

二、开始安装(nginx篇)

2.1 解压pcre

[官方网站] http://www.pcre.org/

命令流程:

1

2

3

# cd /download/source/

# wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.38/pcre-8.38.tar.gz

# tar -zxvf pcre-8.38.tar.gz

说明:不需要编译,只需要解压就行。

2.2 解压zlib

[官方网站] http://zlib.net/

命令流程:

1

2

3

# cd /download/source/

# wget http://zlib.net/zlib-1.2.11.tar.gz

# tar -zxvf zlib-1.2.8.tar.gz

说明:不需要编译,只需要解压就行。zlib版本不对的话,自己去http://zlib.net上看一下版本,然后修改版本即可

2.3 安装nginx

[官方网站] http://nginx.org/

命令流程:

1

2

3

4

5

6

7

# cd /download/source/

# wget http://nginx.org/download/nginx-1.8.0.tar.gz

# tar -zxvf nginx-1.8.0.tar.gz

# cd nginx-1.8.0

# ./configure --prefix=/lnmp/nginx --with-pcre=/download/source/pcre-8.38 --with-zlib=/download/source/zlib-1.2.11

# make

# make install

 --with-pcre:用来设置pcre的源码目录。

 --with-zlib:用来设置zlib的源码目录。

 因为编译nginx需要用到这两个库的源码。

 小章总结:

此处告一段落,nginx安装完成。我们可以先满足下自己的欲望心。打开nginx服务看看Hello World吧。

启动nginx

1

# /lnmp/nginx/sbin/nginx

启动后可以再浏览器中打开页面,会显示nginx默认页面。127.0.0.1:10000

docker安装php开发环境_第2张图片

三、开始安装(php篇)

3.1 安装libxml2

[官方网站] http://xmlsoft.org/

命令流程:

1

2

3

4

5

6

7

8

# cd /download/source/

# wget ftp://xmlsoft.org/libxml2/libxml2-2.9.3.tar.gz

# tar -zxvf libxml2-2.9.3.tar.gz

# cd libxml2-2.9.3

# ./configure --prefix=/package/libxml2 --with-python=no

# make && make install

 

这里--with-python=no是

3.2 安装php

[官方网站] http://php.net/

命令流程:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# cd /download/source/

# wget http://cn2.php.net/distributions/php-7.2.7.tar.gz

# tar -zxvf php-7.2.7.tar.gz

# cd php-7.2.7

 

# ./configure \

# --prefix=/lnmp/php \

# --with-libxml-dir=/package/libxml2 \ //打开libxml2库的支持

# --with-config-file-path=/lnmp/php/etc \ //配置文件所在目录

# --enable-mbstring \      //支持mbstring库

# --enable-fpm \       //支持php-fpm(推荐打开)

# --with-mysqli \       //打开mysqli模块

(由于代码比较长,这里把其复制出来给大伙看看:./configure --prefix=/lnmp/php --with-libxml-dir=/package/libxml2 --with-config-file-path=/lnmp/php/etc --enable-mbstring --enable-fpm --with-mysqli)

# make

# make install

四、开始安装(mysql篇)

4.1 安装cmake

[官方网站] https://cmake.org/

命令流程:

cd /downlaod/source/

wget https://cmake.org/files/v3.12/cmake-3.12.0.tar.gz

tar -zxvf cmake-3.12.0.tar.gz

cd cmake-3.12.0

./configure --prefix=/package/cmake

make

# make install

# export PATH=/package/cmake/bin:$PATH //设置环境变量。可忽略,只是为了你以后使用cmake方便点。

4.2 安装ncurses

[官方网站] http://ftp.gnu.org/gnu/ncurses/

命令流程:

wget http://ftp.gnu.org/gnu/ncurses/ncurses-6.1.tar.gz

tar -zxvf ncurses-6.1.tar.gz

cd ncurses-6.1

./configure --prefix=/package/ncurses

make

make install

 

4.3 安装mysql

[官方网站] http://www.mysql.com/

命令流程:

不带boost安装方式

1

2

3

4

5

6

7

8

9

10

11

// 这个是不带boost版本的mysql源码。你可以使用以下的参数在编译过程中自动下载boost

// -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/package/boost

//https://dev.mysql.com/downloads/mysql/5.6.html#downloads

docker安装php开发环境_第3张图片

 

# wget http://dev.mysql.com/Downloads/MySQL-5.7/mysql-5.7.10.tar.gz

# tar -zxvf mysql-5.7.10.tar.gz

# cd mysql-5.7.10

# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

# -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/package/boost \  //设置自动下载boost库,并放到-DWITH_BOOST指定的路径里。

# -DCURSES_LIBRARY=/package/ncurses/lib/libncurses.a \ //ncurses库libncurses.a

# -DCURSES_INCLUDE_PATH=/package/ncurses/include  //ncurses库头文件

# make # make install

自带boost安装试

1

2

3

4

5

6

7

8

9

# wget http://dev.mysql.com/Downloads/MySQL-5.7/mysql-boost-5.7.10.tar.gz

# tar -zxvf mysql-boost-5.7.10.tar.gz

# cd mysql-5.7.10

# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

# -DWITH_BOOST=/boost/boost_1_59_0      //boost库的路径

# -DCURSES_LIBRARY=/package/ncurses/lib/libncurses.a \ //ncurses库libncurses.a

# -DCURSES_INCLUDE_PATH=/package/ncurses/include   //ncurses库头文件

# make

# make install

说明:mysql从5.7版本后就需要boost库的支持了。并且非常恶心的是mysql需要指定的boost版本号,高了或低了都有可能导致编译不通过。

注意:这里安装mysql报错了说下载boost失败啥的,采用其他的安装方式,先把boost下载下来,然后再安装的

有参考这篇文章:https://blog.csdn.net/u011641865/article/details/73498533 但是还是安装失败,然后就直接把boost下载下来,编译MySQL时直接用-DWITH_BOOST=/package/boost_1_59_0指向boost的包

# wget http://dev.mysql.com/Downloads/MySQL-5.7/mysql-5.7.10.tar.gz

# tar -zxvf mysql-5.7.10.tar.gz

# cd /package

# wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

# tar -zxvf boost_1_59_0.tar.gz

# cd /download/source/mysql-5.7.10

# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_BOOST=/package/boost_1_59_0 -DCURSES_LIBRARY=/package/ncurses/lib/libncurses.a -DCURSES_INCLUDE_PATH=/package/ncurses/include

# make && make install

 

 到此,使用CentOS7上常用的、全新的Web模块基本已经完成了,剩下的就是对这些软件进行配置咯。哈哈,其实代码多,但是了解后真的挺简单,就那几个命令。怎么样?是不是蛮简单的。

 

----------------配置Nginx+PHP+MySql ------------------------

一、准备工作

1.1 安装vim

1

# yum install vim

二、开始配置(nginx篇)

2.1 修改nginx.conf

1

# vim nginx.conf

2.2 找到如下内容,并删除红色标记的字符

 

1

2

3

4

5

6

7

8

9

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

#location ~ \.php$ {

#  root   html;

# fastcgi_pass 127.0.0.1:9000;

# fastcgi_index index.php;

#  fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

 # include  fastcgi_params;

#}

2.3 修改完成

 

1

2

3

4

5

6

7

8

9

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

location ~ \.php$ {

 root   html;

 fastcgi_pass 127.0.0.1:9000;

 fastcgi_index index.php;

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

 include  fastcgi_params;

}

可以新建一个vhost文件,先把nginx.conf的80端口的server注释

然后加入这个

include vhost/*;

然后cd vhost 里 

新建 default.80.conf文件

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   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   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$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;
        #}
    }

2.4 关闭nginx

1

/lnmp/nginx/sbin/nginx -s stop

2.5 启动nginx

1

/lnmp/nginx/sbin/nginx

小章总结:

完成上面的修改就可以让nginx来转发php的动态脚本请求。

不过目前还不能打开php文件,因为还没有打开php-fpm。

我们继续向下看。

 三、开始配置(php-fpm)

3.1 copy默认配置文件

# cd /downlaod/source/php-7.2.7

# cp php.ini-development /lnmp/php/etc/php.ini

 

# cd /lnmp/php/etc

# cp php-fpm.conf.default php-fpm.conf

 

# cd /lnmp/php/etc/php-fpm.d/

# cp www.conf.default www.conf

3.2 运行php-fpm

1

# /lnmp/php/sbin/php-fpm -c /lnmp/php/etc/php.ini

二、常用命令

nginx常用命令

启动nginx

1

# /lnmp/nginx/sbin/nginx

重启nginx

1

# /lnmp/nginx/sbin/nginx -s reload

关闭nginx

1

# /lnmp/nginx/sbin/nginx -s stop

php-fpm常用命令

启动php-fpm

1

# /lnmp/php/sbin/php-fpm -c /lnmp/php/etc/php.ini

重启php-fpm

1

# kill -SIGUSR2 `cat /lnmp/php/var/run/php-fpm.pid`

关闭php-fpm

1

# kill -SIGINT `cat /lnmp/php/var/run/php-fpm.pid`

配置alias:

cd /lnmp/php/etc

vi php-fpm.conf

把;pid = run/php-fpm.pid前面的#号去掉

vi ~/.bash_profile

添加:

alias nginx.start='/lnmp/nginx/sbin/nginx'
alias nginx.reload='/lnmp/nginx/sbin/nginx -s reload'
alias nginx.stop='/lnmp/nginx/sbin/nginx -s stop'

alias php.start='/lnmp/php/sbin/php-fpm -c /lnmp/php/etc/php.ini' #开启php-fpm
alias php.restart='kill -SIGUSR2 `cat /lnmp/php/var/run/php-fpm.pid`' # 重启php-fpm
alias php.stop='kill -SIGINT `cat /lnmp/php/var/run/php-fpm.pid`' # 关闭 php-fpm

报存,执行source ~/.bash_profile

现在

开启NGINX:nginx.start

平滑重启NGINX:nginx.reload

关闭NGINX:nginx.stop

开启php-fpm:php.start

关闭php-fpm:php.stop

重启php-fpm: php.restart

 

############mysql的配置#########

1、新增mysql用户和组

groupadd mysql

useradd -g mysql mysql

2、初始化配置表

cd /usr/local/mysql

chown -R mysql:mysql .

注意:

5.7之后

bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

5.7之前:

./bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/data

此时会给你一个默认的mysql的root用户登入密码

 --user  启动mysql的用户

 --basedir  mysql安装目录

 --datadir  mysql数据仓库目录

 将mysql/目录下除了data/目录的所有文件,改回root用户所有,mysql用户只需作为mysql/data/目录下所有文件的所有者。

[root@rhel5-32 mysql]# chown -R root .

[root@rhel5-32 mysql]# chown -R mysql data

复制配置文件

cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

mysql5.7配置文件需要修改my.cnf关键配置, mysql5.7之前默认配置文件中是有配置项的,不用手动修改

docker安装php开发环境_第4张图片

注意,tmp目录不存在,请创建之。否则会出错     创建后要赋予mysql权限,

 如果mysql.sock指定到/tmp以外的目录,需要在my.cnf中添加[client]并且指定socket位置,

 否则登录mysql时会报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

 应该是,默认会找tmp目录下的sock文件

4. 将mysqld服务加入开机自启动项。

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

 

#chmod +x /etc/init.d/mysql 并设置可执行权限

(这样就可以使用service mysql命令启动/停止服务,否则就只能使用{mysql}/bin/mysqld_safe &命令来启动服务)

 把mysql注册为开机启动的服务

chkconfig --add mysql

 查看是否添加成功

chkconfig --list mysql

5.mysql服务的开启和关闭

#/etc/init.d/mysql start 或者 serivce mysql start 或者 bin/mysqld_safe&

#/etc/init.d/mysql stop 或者 service mysql stop 或者 bin/mysqladmin -uroot -p

 注:在bin/mysqld_safe&这个启动脚本里已默认设置--user=mysql;在脚本末尾加&表示设置此进程为后台进程,区别就是在控制台输入bg,即可将当前进  程转入后台,  当前shell  可进行其他操作。

 bin/mysqladmin -uroot -p  (注意此时的root是指mysql的root用户)

需要把mysqll加入到环境变量中,或者为mysql建立软链接

否则运行mysql命令会出现   -bash: mysql:command not found

不加环境变量,就要使用bin/mysql -uroot -p 或者bin/mysqladmin -uroot -p  命令来登录mysql服务

建立软链接:

ln -s /usr/local/mysql/bin/mysql /usr/local/bin/
ln -s /usr/local/mysql/bin/mysqladmin /usr/local/bin/
ln -s /usr/local/mysql/bin/mysqld_safe /usr/local/bin/

6.加入环境变量

export PATH=$PATH:/usr/local/mysql/:/local/mysql/bin
echo $PATH

 

7.登录mysql服务

 执行:mysql -uroot -p生成的密码

 连上后,在做任何操作前,mysql要求要改掉root的密码后才能进行操作。

 

注意:

1、当登入报错:

docker安装php开发环境_第5张图片

是由于源码安装导致的,我们需要修改源码

修改文件:

cd /download/source/mysql-5.7.10

vi cmd-line-utils/libedit/terminal.c

把terminal_set方法中的 char buf[TC_BUFSIZE]; 这一行注释,再把 area = buf;改为 area = NULL;

之后重新通过cmake,make;make install,重装mysql之后正常。

2、-bash: service: command not found

输入:

yum list | grep initscripts

会出现

initscripts.x86_64                         9.49.30-1.el7_2.3           updates

然后yum安装

yum install initscripts

3、局域网连接docker里的数据库

docker run -i -t -p 10001:80 -p 32769:3306 centos:v2 /bin/bash

用本地的32769印射容器的3306端口

进入容器,给mysql新增一个test用户  host权限为%

grant all on *.* to test@'%' identified by 'test';

flush privileges;

navicat连接

docker安装php开发环境_第6张图片

可以用下面指令查容器ip

docker inspect 容器id | grep IPAddress

开启多端口转发到容器:docker run -i -t -p 10001:80 -p 32769:3306 centos:v2 /bin/bash

参考:

https://www.jb51.net/article/106395.htm

信号解释:

  • SIGINT, SIGTERM 立刻终止
  • SIGQUIT 平滑终止
  • SIGUSR1 重新打开日志文件
  • SIGUSR2 平滑重载所有worker进程并重新载入配置和二进制模块
   

你可能感兴趣的:(docker,php,linux)