一,安装nginx容器
拉取nginx镜像(拉取最新的nginx镜像)
[user@hostname ~]docker pull nginx
查看本地的nginx镜像
[user@hostname ~]docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c613f16b6642 2 months ago 187MB
二、安装php容器
方法一:拉取php镜像(指定版本)
[user@hostname ~]docker pull php:8.2.5-fpm
方法二:通过Dockerfile构建镜像(Dockerfile的配置见文章末尾)
[user@hostname php]ls
-rw-r--r-- 1 user user 1255 Apr 15 19:05 Dockerfile-rw-r--r-- 1 root root 17 Apr 12 15:29 index.php
-rw-r--r-- 1 root root 19936114 Feb 8 02:28 php-7.2.34.tar.gz
-rw-r--r-- 1 root root 19053522 Feb 8 02:29 php-8.2.5.tar.gz
[user@hostname php]docker build -t php-fpm:8.2.5 -f Dockerfile .
查看本地的所有镜像
[user@hostname ~]docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
php-fpm 8.2.5 e056423645ca 12 days ago 1.85GB
nginx latest c613f16b6642 2 months ago 187MB
三、在本地建立logs目录与html目录(便于查看nginx的日志和查看html代码)
[user@hostname workspace]mkdir -P /home/workspace/logs /home/workspace/html
[user@hostname workspace]ll
drwxr-xr-x 3 root root 4096 Apr 23 16:11 html
drwxr-xr-x 2 root root 4096 Apr 16 11:50 logs
drwxr-xr-x 3 root root 4096 Apr 25 11:00 nginx
drwxr-xr-x 2 irteam irteam 4096 Apr 15 19:05 php
drwxr-xr-x 2 root root 4096 Apr 23 16:52 php-config
四、启动nginx + php容器
通过挂载的形式启动php
[user@hostname workspace]docker run -p 9000:9000 --name php-fpm -v /home1/irteam/workspace/html:/home1/irteam/html -d php-fpm:8.2.5
说明:
-v 本机目录:容器目录 -- 将本机的目录挂载到容器的目录,这样设置的好处是,在本机就 可以查看html目录,不用进入容器;
容器目录会在启动时自动创建;
通过挂载的形式启动nginx
[user@hostname workspace]docker run -p 80:80 --name nginx-php -v /home1/irteam/workspace/logs:/var/log/nginx -v /home1/irteam/workspace/nginx:/etc/nginx -v /home1/irteam/workspace/html:/usr/share/nginx/html --link php-fpm:phpfpm -d nginx
说明:
-p 80:80 -- 将容器的80端口与本机的80端口连接,进行通信。如果不设置此步骤,在本 机是无法访问容器的80端口的
-v 本机目录:容器目录 -- 将本机的目录与容器的目录建立连接,这样设置的好处是:不用 进入容器就可以看到与容器里相同的logs和html代码
-- link 容器名称:别名 -- 将当前的nginx容器与另一容器php-fpm建立连接,
别名:在nginx容器中要访问php容器时,所要使用的名称
nginx配置如下:
注意:
1. root 目录:必须与启动时设置的容器目录相同
2. fastcgi_pass phpfpm:9000 :不能使用127.0.0.1,因为这是在nginx容器中,在没有任何设置的情况下,容器与容器之前是相互隔离的,所以这里必须使用--link中设置的别名phpfpm
3.fastcgi_param SCRIPT_FILENAME /home1/irteam/html$fastcgi_script_name: 这里的目录应该使用php容器中的html目录,因为此时访问的是php容器中的内容
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php;
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass phpfpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home1/irteam/html$fastcgi_script_name;
include fastcgi_params;
fastcgi_intercept_errors on;
}
}
五、查看nginx与php是否启动成功
查看所有的docker容器启动的情况,查看status是否都是up状态
[user@hostname workspace]docker pa -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be06a7b0acc0 nginx "/docker-entrypoint.…" 25 hours ago Up 58 minutes 0.0.0.0:80->80/tcp nginx-php
4a79b18351a5 php-fpm:8.2.5 "./sbin/php-fpm -c /…" 25 hours ago Up 25 hours 0.0.0.0:9000->9000/tcp php-fpm
如果非up状态,则说明启动时出现了错误
排查错误的方式:
1. 查看容器logs日志
[user@hostname workspace]docker logs -fnt CONTAINER ID
2. 进入容器,查看目录或者日志
进入容器:
[user@hostname workspace]sudo docker exec -it 容器名称 /bin/bash
六、运行结果
附件:php Dockerfile
#!/bin/bash
#this docker file
FROM centos:7
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel sqlite-devel epel-release
RUN yum install -y oniguruma-devel -- enablerepo=epel
ADD php-8.2.5.tar.gz /tmp/
RUN cd /tmp/php-8.2.5 && \
./configure --prefix=/home1/irteam/sample/php \
--with-config-file-path=/home1/irteam/sample/php/etc \
--with-mysql --with-mysqli \
--with-openssl --with-zlib --with-curl --with-gd \
--with-jpeg-dir --with-png-dir --with-iconv \
--enable-fpm --enable-zip --enable-mbstring && \
make -j 4 && \
make install && \
cp /home1/irteam/sample/php/etc/php-fpm.conf.default /home1/irteam/sample/php/etc/php-fpm.conf && \
cp /home1/irteam/sample/php/etc/php-fpm.d/www.conf.default /home1/irteam/sample/php/etc/php-fpm.d/www.conf && \
sed -i "s/127.0.0.1/0.0.0.0/" /home1/irteam/sample/php/etc/php-fpm.d/www.conf && \
sed -i "21a \daemonize = no" /home1/irteam/sample/php/etc/php-fpm.conf && \
cp php.ini-production /home1/irteam/sample/php/etc/php.ini
RUN rm -rf /tmp/php-8.2.5.* && yum clean all
WORKDIR /home1/irteam/sample/php
EXPOSE 9000
CMD ["./sbin/php-fpm", "-c", "/home1/irteam/sample/php/etc/php-fpm.conf"]