安装docker和docker-compose
Docker安装要求Linux 3.10以上版本
装了yum的可以执行下面的命令安装docker-compose
yum install docker-io docker-compose
yum安装2024版本
安装依赖包
[root@localhost data]#yum install -y yum-utils device-mapper-persistent-data lvm2
| 软件 | 作用 |
|---|---|
| yum-utils: | 提供了 yum-config-manager 工具 |
| device mapper: | 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。 |
| lvm2 | 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。 |
设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#下载yum仓库
安装docker
yum install -y docker-ce docker-ce-cli containerd.io
# 此处安装最新版 如果不想安装最新版
yum list --help
#可以使用帮助查看
yum list --showduplicates docker-ce
#查看所有的可用版本
yum -y install docker-ce-19.03.15-3.el7 docker-ce-cli-19.03.15-3.el7 containerd.io
| 软件 | 作用 |
|---|---|
| docker-ce(Docker Community Edition) | 这是 Docker 的社区版。Docker 社区版是免费的, 面向开发者、小型团队和个人使用。它包含了 Docker Engine, 这是一个用于构建和运行容器的开源容器运行时。 |
| docker-ce-cli(Docker Command Line Interface) | 这是 Docker 的命令行工具, 它允许用户与 Docker Engine 交互,执行容器相关的操作。 通过 Docker CLI,用户可以构建、运行、管理和发布容器。 |
| containerd.io | 它负责管理容器的生命周期,包括容器的创建、运行、暂停、继续和销毁等 |
部署MySQL
docker pull mysql
$ docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
就完成了MySQL的安装,接下来我们再在PHP-FPM容器中使用。
部署Nginx
下载nginx镜像:
$ docker pull nginx
启动Nginx容器:
$ docker run --name nginx -p 80:80 -d nginx
映射HTML路径
docker rm -f nginx # 删除容器
$ docker run --name nginx -p 80:80 -v opt/lnmp/nginx/webs/html/:/usr/share/nginx/html -v -d nginx
在浏览器上访问验证
如果配置文件有修改,需要重启容器生效:
$ docker restart nginx
配置 Nginx
Nginx 的强大很大部分体现在配置文件上,对于一些高级的应用来说,自定义 Nginx 非常重要。所以,我们需要把 Nginx 的配置文件复制到本地服务器目录:
$ cd /opt/lnmp/nginx/conf/conf.d
$ docker cp nginx:/etc/nginx/conf.d/default.conf default.conf
再加一个-v参数,把本地的配置文件映射到容器上,在重启容器:
$ docker stop nginx
$ docker rm nginx
$ docker run --name nginx -p 80:80 --link php-fpm -v /opt/lnmp/nginx/webs/html:/usr/share/nginx/html -v /opt/lnmp/nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx:latest
如果配置文件有修改,需要重启容器生效:
$ docker restart nginx
这样就可以直接在本地修改配置文件了。
4 部署PHP-FPM
下载 PHP-FPM 镜像:
$ docker pull php:fpm
$ docker run --name php-fpm -p 9000:9000 -d php:fpm
#复制www.conf到本地的www/config中
$ docker cp php-fpm:/usr/local/etc/php-fpm.d/www.conf www.conf
#查看容器的 containerID
$docker ps -a
#进入到正在运行的php-fpm容器中
$docker exec -it containerID /bin/bash
#进入到src中会看到2个压缩包
root@e8f61e487bb6:/usr/src#cd /usr/src/
root@e8f61e487bb6:/usr/src#ls -ll
-rw-r--r-- 1 root root 11928820 Dec 4 18:40 php.tar.xz
-rw-r--r-- 1 root root 850 Dec 4 18:40 php.tar.xz.asc
#解压tar.xz文件:先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。
root@e8f61e487bb6:/usr/src# xz -d php.tar.xz
root@e8f61e487bb6:/usr/src#ls -ll
-rw-r--r-- 1 root root 139786240 Dec 4 18:40 php.tar
-rw-r--r-- 1 root root 850 Dec 4 18:40 php.tar.xz.asc
root@e8f61e487bb6:/usr/src#tar xvf php.tar
root@e8f61e487bb6:/usr/src#ls -ll
drwxr-xr-x 14 1000 1000 4096 Dec 4 16:12 php-7.3.0
-rw-r--r-- 1 root root 139786240 Dec 4 18:40 php.tar
-rw-r--r-- 1 root root 850 Dec 4 18:40 php.tar.xz.asc
exit;
#回到宿主机的config文件夹中,把容器里面的php.ini复制下来
$ docker cp php-fpm:/usr/src/php-7.3.0/php.ini-production php.ini
在本地服务器修改 php.ini 的内容,设置cgi.fix_pathinfo=0(要先删除前面的;注释符):
cgi.fix_pathinfo=0
然后重新启动容器:
$ docker stop php-fpm
$ docker rm php-fpm
$ docker run --name php-fpm -p 9000:9000 --link mysql:5.7.29 -v /opt/lnmp/nginx/webs/html/:/usr/share/nginx/html -v /opt/lnmp/php-fpm/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /opt/lnmp/php-fpm/php.ini:/usr/local/etc/php-8.1.1/php.ini -d php:fpm
这样PHP-FPM的容器就部署完成了。注意,要保证配置文件 php.ini 和 www.conf 没有错误,否则会无法启动容器。
5 让Nginx容器支持FPM
打开 nginx 的配置文件,修改内容如下:
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.php index.html index.htm;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
#root /usr/share/nginx/html;
#index index.php index.html index.htm;
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
location = /40x.html {
root /user/share/nginx/html;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /.ht {
deny all;
}
}
然后启动 nginx:
$docker stop nginx
$docker rm nginx
$ docker run --name nginx -p 80:80 --link php-fpm -v /opt/lnmp/nginx/webs/html:/usr/share/nginx/html -v /opt/lnmp/nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx:latest
在宿主机下的 /Users/xiaohao/Desktop/www下创建 index.php 文件,内容:
<?php
phpinfo();
?>