赞
踩
写这篇文章的目的一个是自己做个笔记,以防以后忘记,再一个网上关于运行php容器到部署web项目的资料实在是少,都是互相复制一下,无法真正运用到实际生产环境中。
为什么要用docker,docker基本的一些命令不再本文章的讨论范围。
docker部署web项目需要用到几个服务:php,nginx,redis等等,本篇文章讲一下PHP,nginx以及redis的使用,更多的服务流程跟启动这三个服务雷同。php使用5.6版本。当然也可以使用最新版,流程是一样的
首先把先把用到的镜像拉到本地:
- docker pull php:5.6-fpm
- docker pull nginx
- docker pull redis
启动之前先创建一个docker网络,使用docker来连接多个容器。
docker network create -d bridge php-net
因为代码我们都是在本地修改,然后做个映射到各个docker中去就可以了。首先启动redis,因为redis不需要做映射,启动最简单:
docker run --name redis-web -d --network php-net -p 6380:6379 redis
下面开始启动php跟nginx容器,因为我们是在本地开发,所以需要挂载主机web目录到容器,假设我们本地web目录为/www/wwwroot/ac,然后由容器服务来运行这个web项目
- docker run --name php-web -d --network php-net -p 9001:9000 -v /www/wwwroot/ac:/data php:5.6-fpm
- docker run --name nginx-web -d --network php-net -p 80:80 -v /www/wwwroot/ac:/data nginx
这样3个容器就启动了,他们在统一docker网络内,可以通过ip互相进行访问。
接下来划重点部分 配置nginx,以及安装php扩展。因为官方的php是一个纯净的php环境,需要我们一个个扩展去安装。
首先进入nginx容器找到nginx配置文件配置
- docker exec -it nginx-web bash
- cd /etc/nginx/conf.d
- vim default.conf
在default.conf配置文件中填入以下内容
- server{
- listen 80;
- server localhost;
- location / {
- root /data; #对应主机挂载到nginx容器中的/data代码目录
- index index.php index.html index.htm;
- }
- location ~\.php(.*)$ {
- root /data; #对应主机挂在到php容器中的/data代码目录
- fastcgi_pass 172.19.0.3:9000; #此地址为php容器的内网ip
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /data$fastcgi_script_name;
- fastcgi_param PATH_INFO $1; #此行配置pathinfo,tp框架必须使用pathinfo
- include fastcgi_params;
- }
- }
编辑完配置文件之后进行重载配置
service nginx reload
之后再进入到php-web容器里面开始安装用到的扩展,这里我们安装几个比较常用的扩展,流程基本都一样
- docker exec -it php-web bash
- cd /usr/local/bin
- ./docker-php-ext-install pdo_mysql
- ./docker-php-ext-install mysql
- docker-php-ext-install bcmath
- docker-php-ext-install mbstring
- apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev
- docker-php-ext-install -j$(nproc) iconv
- docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
- docker-php-ext-install -j$(nproc) gd
- pecl install redis-4.0.1 && pecl install xdebug-2.6.0 && docker-php-ext-enable redis xdebug
一口气安装了mysql,bcmath,gd,mbstring,redis等扩展
重启php容器服务
docker restart php-web
这样一个完整的web项目就使用docker部署完成了,没有安装mysql容器,因为安装方式雷同,在连接的时候注意使用他们的内网ip去连接,如果想要连接宿主机,那么使用ifconfg命令找到docker0开头的那行,那个ip就是宿主机的ip,通过这个ip可以请求宿主机,比如我们在宿主机上又个mysql,那么可以使用ip:port来访问,容器之间也是使用内网ip来互相访问,进入每个容器然后cat /etc/hosts来获取ip
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。