最近在整理开发环境,由于使用的是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的拓展即可。
至此,记录结束。