最近在整理开发环境,由于使用的是debian11,但是又不想在本机上安装php和nginx,于是就想到了docker.就记录下这一次的环境部署。
留下自己做的离线安装包以备不时之需:
docker-20.10_install.tar.gz 链接:https://pan.baidu.com/s/186QSdOhOKWzjICmzQHXMew
提取码:rzoe
另外增加一个已经处理好的php环境,
phpdocker_install.tar.gz 链接:https://pan.baidu.com/s/1GRYq0-27tr_b1w1wRVQpWg
提取码:1vzd
这个dockerphp环境,可能需要根据自己的需求修改一下安装shell脚本中的各个文件的地址,就是脚本中的-v 到冒号中间的路径,这个是宿主机的地址,需要根据具体环境来进行修改,端口的话,-p到冒号中间的端口号为宿主机(本机)的端口,也可以根据具体需求进行修改

安装docker

到docker官网下载需要的安装包。安装教程地址 https://docs.docker.com/engine/install/debian/ 1.在安装教程界面找到 Install from a package 锚点,按照系统要求下载对应的版本。由于我这这里使用的是debian11,所以下载地址是debian11 docker下载地址 这里只需要下载containerd.io,docker-ce-cli,docker-ce这三个就行了,然后使用dpkg -i xxx.deb命令安装就行了,安装顺序就是containerd.io,docker-ce-cli,docker-ce,安装顺序,记住,docker-ce一定要最后安装,否则会报错。
2.等待安装完成之后,docker -v查看一下返回结果,如果返回的是docker版本,则说明安装成功。否则就需要自己检查问题了。

拉取docker镜像

#这里的镜像是在docker的版本库中是存在的才行,如果不确定,可以进行搜索一下 命令docker search php
docker pull nginx:1.15 
docker pull php:7.4-fpm

说明:冒号后面是版本,这里不知道是不是,但是我自己这样操作后,确实根据是和版本相关的。具体还不太清楚。
等待拉取成功
然后创建一个docker 的内网络,

docker network create -d bridge php-net

接着就是构建nginx和php的容器

sudo docker run \
--name nginx \ #容器名称
-d \
--restart always \ #
--network docker-net \ # 容器使用的网络别名
--ip 172.18.0.2 \ # 容器启动配置的固定IP,防止每次启动docker导致ip可能会出现变化
-p 443:443 \
-p 80:80 \
-p 5800:5800 \
-v /home/hxlong/workspace/php:/var/www/html \
-v /home/hxlong/workspace/allconfig/docker/config/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/hxlong/workspace/allconfig/docker/config/nginx/conf.d:/etc/nginx/conf.d/ \
-v /home/hxlong/workspace/allconfig/docker/logs/nginx:/var/logs/nginx \
nginx:1.15


sudo docker run \
--name php-fpm \
-d \
--restart always \
--network docker-net \
--ip 172.18.0.3 \
-p 9000:9000 \
-v /home/hxlong/workspace/php:/var/www/html \
-v /home/hxlong/workspace/allconfig/docker/config/php/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf \
-v /home/hxlong/workspace/allconfig/docker/config/php/php.ini:/usr/local/etc/php/php.ini \
-v /home/hxlong/workspace/allconfig/docker/logs/php:/var/log/php \
php:7.4-fpm

这里说明一下:
–name:这是给你的容器进行命名,我这里写的是php-fpm ,在后面使用docker ps -a 就能看到在NAME列显示的就是这个名字
–network: 这里是使用你的内网络,我这里是用的上面创建的php-net的内网
络,如果你创建了多个,这里就必须指定,最好指定。
–ip:给容器固定IP,防止每次启动docker时,容器的IP会出现变动导致必须要修改配置文件才能生效
-p:这里是映射端口,前面是本机的端口,后面是docker内网络端口
-v:这里是工作目录的映射,前面本机工作目录,后面是docker内部的工作目录。当你在本机的工作目录中创建任何目录或者文件,在内网容器中都会映射出来。
这样就创建了2个docker容器,一个php-fpm和一个nginx
使用docker ps -a 命令可以看到如下:

CONTAINER ID   IMAGE         COMMAND                  CREATED       STATUS             PORTS                                       NAMES
f94ac2d60a37   nginx:1.15    "nginx -g 'daemon of…"   3 hours ago   Up About an hour   0.0.0.0:80->80/tcp, :::80->80/tcp           nginx
18a47bc6255d   php:7.4-fpm   "docker-php-entrypoi…"   3 hours ago   Up About an hour   0.0.0.0:9001->9000/tcp, :::9001->9000/tcp   php-fpm

启动,重启或者停止容器命令如下

docker start nginx
docker restart nginx
docker stop nginx

接下来就是配置容器了。
首先我们需要进入到php-fpm容器,查看网络以及使用模式。

docker exec -it php-fpm bash
#查看网络,如果返回命令未找到,请先使用apt install net-tools安装工具,然后再执行
ifconfig
#结果如下
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.2  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:ac:12:00:02  txqueuelen 0  (Ethernet)
        RX packets 537  bytes 8206778 (7.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 437  bytes 24307 (23.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 2  bytes 174 (174.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2  bytes 174 (174.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

#查看nginx的连接方式,如果返回vim命令未找到,请先使用apt install vim进行安装
#找到listen = 127.0.0.1:9000,如果前面有#注释,请删除
#接下来需要安装一些php必须的模块
cd /usr/local/bin  
./docker-php-ext-install pdo_mysql  
./docker-php-ext-install mysqli
docker-php-ext-install bcmath
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=/usr/include/freetype2/ --with-jpeg=/usr/include
docker-php-ext-install -j$(nproc) gd

然后另外开一个终端,进行配置nginx

docker exec -it nginx bash
vim /etc/nginx/conf.d/default.conf

#配置内容如下
location / {
        root   /usr/share/nginx/html;
        index index.php index.html index.htm; #这里需要添加上index.php,否则在目录中没有index.html页面,就可能报404
    }

location ~ \.php$ {
	root /www;
	fastcgi_pass	172.18.0.2:9000;#此处是上面查看到的php-fpm容器的ip和端口
	fastcgi_index	index.php;
	fastcgi_param 	SCRIPT_FILENAME $document_root$fastcgi_script_name;
	fastcgi_param	SCRIPT_NAME $fastcgi_script_name;
	fastcgi_param 	PATH_INFO $1; #这里是TP必须的
	include fastcgi_params;
    }

然后重启nginx,php-fpm容器,接着在 本机的工作目录(/var/www)创建一个phptest.php文件,内容如下:echo phpinfo(); 然后保存,在本机的浏览器中输入localhost或者127.0.0.1,不出意外的话,就会出现php的配置信息。
另外说明:至于说是需要添加其他的容器,比如redis,和上面的流程基本一样,而且没什么配置,只需要在php中安装redis的拓展即可。
至此,记录结束。