docker搭建php服务

docker搭建php服务

十二月 07, 2018

1.登录远端服务器并且下载docker

1
apt-get install docker

下载完成后运行 docker info 如果输出docker信息则表示docker安装成功

安装成功后,拉取nginx、php镜像并查看已有镜像
1
2
3
docker pull nginx      #拉取nginx镜像
docker pull php:5.6 #拉取php5.6镜像
docker images #查看已有镜像

镜像拉取成功后,开始构建容器并挂载nginx配置目录

1
mkdir -p nginx/www nginx/conf #创建nginx目录用来挂载容器www和conf目录

  • mkdir -p, –parents 可以是一个路径名称。此时若路径中的某些目录尚不存在, 加上此选项后, 系统将自动建立好那些尚不存在的目录, 即一次可以建立多个目录;

创建容器

1
2
3
4
5
#构建php容器
docker run -d -p 9000:9000 -v $PWD/www:/usr/share/nginx/html --name myphpfpm php:5.6-fpm
#构建Nginx容器
docker run -d -p 8080:80 -v $PWD/www:/usr/share/nginx/html --name mynginx --link myphpfpm:phpfpm nginx
docker ps -a #查看所有已创建的容器

查看容器运行状态status,如果创建容器后容器自动退出,先删除容器,再重新用以下命令创建
1
2
3
docker rm [CONTAINER ID] #删除容器
docker run -dit -p 9000:9000 -v $PWD/www:/usr/share/nginx/html --name myphpfpm php:5.6-fpm
docker run -dit -p 8080:80 -v $PWD/www:/usr/share/nginx/html --name mynginx --link myphpfpm:phpfpm nginx

docker run -it
1
2
3

-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

创建完容器并且运行成功后配置nginx容器

1
2
docker exec -it mynginx /bin/bash
vim /etc/nginx/conf.d/default.conf #若无vi 先运行 apt-get update、 apt-get install vim 下载并安装vim

docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
-d : 分离模式: 在后台运行
-i : 即使没有附加也保持 STDIN 打开
-t : 分配一个伪终端

修改default.conf中php配置如下

1
2
3
4
5
6
7
8
9
10
11
12
location ~ \.php$ {
fastcgi_pass phpfpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
include fastcgi_params;
}


//重新加载nginx配置并生效后退出容器
//nginx -s reload
//exit

重启nginx并退出
1
2
service nginx restart
docker restart mynginx

安装数据库扩展
1
2
docker exec  -it myphpfpm /bin/bash
docker-php-ext-install bcmath dba exif mysqli pdo_mysql sysvsem sysvshm

安装redis
1
2
docker exec  -it myphpfpm /bin/bash
pecl install redis && docker-php-ext-enable redis

安装pecl扩展
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Install PECL extensions
$ apt-get install -y \

// for memcache
libmemcache-dev \

// for memcached
libmemcached-dev \

&& pecl install memcache && docker-php-ext-enable memcache \
&& pecl install memcached && docker-php-ext-enable memcached \
&& pecl install gearman && docker-php-ext-enable gearman \
&& pecl install xdebug && docker-php-ext-enable xdebug \
&& pecl install redis && docker-php-ext-enable redis \
&& pecl install xhprof && docker-php-ext-enable xhprof

安装php x-cache 扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
$ curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
&& mkdir -p xcache \
&& tar -xf xcache.tar.gz -C xcache --strip-components=1 \
&& rm xcache.tar.gz \
&& ( \
cd xcache \
&& phpize \
&& ./configure --enable-xcache \
&& make -j$(nproc) \
&& make install \
) \
&& rm -r xcache \
&& docker-php-ext-enable xcache

安装完之后退出myphpfpm容器并重启
1
docker restart myphpfpm

重启后查看phpinfo发现x-cache已工作

容器的保存、导出与导入

先将生成好的容器创建为镜像

1
2
docker commit myphpfpm myphpfpm_img
docker commit mynginx mynginx_img

保存指定镜像为tar文件
1
2
docker images #查看生成好的镜像id
docker save [IMAGE ID] > xxx.tar

保存成功之后 先让我们删除之前创建的所有容器以及镜像
1
2
3
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
docker rmi $(docker images -q)

加载image
1
docker load < xxx.tar #之前生成的image压缩文件

加载成功后标记本地镜像
1
2
docker images
docker tag [IMAGE ID] xxx:1