CentOS7 使用docker部署Nginx+PHP环境
-
下载nginx和php镜像
$ docker pull php $ docker pull nginx -
创建 Dockerfile文件, Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像 (个人创建在/var/lib/docker的phpdockerfile目录下)
$ mkdir phpdockerfile $ cd phpdockerfile $ touch DockerfileDockerfile文件中写入以下代码
FROM php:5.6-fpm RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ libpng-dev \ && docker-php-ext-install -j$(nproc) iconv mcrypt \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd RUN docker-php-ext-install mbstring RUN docker-php-ext-install mysqli RUN docker-php-ext-install pdo && docker-php-ext-install pdo_mysql创建镜像,**pdophp 代表新镜像名可自定义,. **代表当前目录 docker自动去找Dockerfile文件
$ docker build -t pdophp . -
根据创建的pdophp镜像,建立容器互连php与nginx,并建立文件映射
// myphp1 容器名(可自定义) // bridge 网络组名称(可通过docker network ls命令查找已有网络组名称) // /Users/xxx/Works/web/工作目录(可自定义) // --name 容器命名 // -v 设置挂载目录 docker run --name myphp1 --net bridge -v /Users/xxx/Works/web/:/var/www/html/ --privileged=true -d pdophp// mynginx1 容器名(可自定义) // bridge 网络组名称(可通过docker network ls命令查找已有网络组名称) // /Users/xxx/Works/web 工作目录(可自定义) // /Users/xxx/Works/docker/nginx/conf.d/ nginx配置文件(可自定义) // --name 容器命名 // -p 设置映射端口 // -v 设置挂载目录 docker run --name mynginx1 -p 80:80 --net workend -v /Users/xxx/Works/web:/usr/share/nginx/html -v /Users/xxx/Works/docker/nginx/conf.d/:/etc/nginx/conf.d --privileged=true -d nginx查找网络组名称
docker network ls

-
查看容器运行情况
$ docker ps -a查看所有容器$ docker ps查看正在运行的容器
-
建立nginx配置文件
首先注意上一步中myphp1的端口为9000
在**/Users/xxx/Works/docker/nginx/conf.d/下创建default.conf**
当前使用thinkphp的配置举例
server { listen 80; server_name 域名或ip; root /var/www/html/think-5.1/public; location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php?$query_string; autoindex off; } location ~ \.php(.*)$ { fastcgi_pass myphp1:9000; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } }重启mynginx1
docker restart mynginx1注意:如果发现无法正常启动mynginx1,可能是fastcgi_pass myphp1:9000; 中的myphp1的问题
可使用命令获取ip进行替换
docker inspect --format='{{.NetworkSettings.IPAddress}}' myphp1 -
在**/Users/xxx/Works/web/** 目录下上传thinkphp代码即可
参考:https://my.oschina.net/u/210357/blog/1186820