docker部署php环境运行web项目

写这篇文章的目的一个是自己做个笔记,以防以后忘记,再一个网上关于运行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

  • 10
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值