在服务器中,docker可以帮我我们快速搭建lnmp运行环境,在容器中的任何操作都对宿主无任何影响。本文使用docker 创建多个容器(mysql,php-fpm,nginx)搭建lnmp运行环境。
由于三个容器是要通信的,所以要按照mysql,php-fpm,nginx的顺序依次创建容器。
步骤
1、拉取镜像
//mysql镜像,这里选用5.7版本
docker pull image mysql:5.7
//php-fpm镜像,这里用7.3版本
doker pull php:7.3-fpm
//nginx镜像,这里用1.17.5版本
docker pull nginx:1.17.5
//查看所有的镜像
[root@hzj ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 d5cea958d330 4 days ago 440MB
php 7.3-fpm c926fc177576 4 days ago 398MB
redis latest 44d36d2c2374 3 weeks ago 98.2MB
nginx 1.17.5 540a289bab6c 4 months ago 126MB
2、创建mysql容器
sudo docker run \
--name mysql5.7 \
--restart always \
--privileged=true \
-p 4306:3306 \
-v /opt/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /var/mysql/data:/var/lib/mysql \
-e MYSQL_USER="user_name" \
-e MYSQL_PASSWORD="user_password" \
-e MYSQL_ROOT_PASSWORD="root_password" \
-d mysql:5.7
参数说明:
- –name :指定容器名称
- –restart always:开启启动
- –privileged=tree:给容器操作权限
- -p:4306:3306:宿主4306端口映射容器的3306端口
- -v dir1:dir2 :宿主dir1映射到容器dir2目录
- -e MYSQL_USER:设置用户名
- -e MYSQL_PASSWORD:设置密码
- -e MYSQL_ROOT_PASSWORD:设置root用户密码
- -d:后台运行
注意
- mysql的数据一定要挂载本地,防止删除容器后丢失数据。
- my.cnf配置文件也可以挂载本地的。
3、创建php-fpm容器
sudo docker run \
--name php-fpm \
--link=mysql:mysql \
-d -p 9000:9000 \
-v /home/wwwroot:/home/wwwroot \
-v /home/wwwlogs:/home/wwwlogs \
-v /tmp:/tmp \
-v /etc/localtime:/etc/localtime\
--privileged=true \
php:7.3-fpm
参数说明:
- –link=mysql:mysql2:连接mysql容器,容器内别名为mysql2
- -v /home/wwwroot:/home/wwwroot :代码文件映射到容器内
- -v /etc/localtime:/etc/localtime: 容器和宿主时间同步
4、创建ngixn容器
sudo docker run
--name nginx \
--link=mysql:mysql \
--link=php:phpfpm \
-d -p 80:80 \
-v /home/wwwroot:/home/wwwroot \
-v /tmp:/tmp \
-v /var/log/nginx:/var/log/nginx \
nginx:1.17.5
修改配置文件
由于这里的nginx和php-fpm不在同一个容器中,需要修改站点配置文件,转发请求到php-fpm容器。
主要修改项:
server_name test.com;//域名
location / {
root /home/wwwroot;//php代码存放目录
index index.php index.html index.htm;//首页文件index.php
#try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
root html;
fastcgi_pass php:9000;//转发请求,可以使用php-fpm容器名称,也可以用别名,端口保持一致,否则请求处理不了。
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/wwwroot/$fastcgi_script_name;//前面写php-fpm容器中代码存储目录
include fastcgi_params;
}
- 修改完配置文件,使用
service nginx configtest
命令检查是否有语法错误。确认无误后,使用service nginx reload
重新加载配置文件
至此,php-fpm环境搭建完毕。