作者趁着五一尝试使用swoole更新一下之前的毕业项目,这里稍作记录
之前尝试在云服务器上使用Nginx的vhost做请求转发,配合修改本地host文件做DNS的映射,发现host添加的域名很快会失效,不得不找到其他的方法来进行开发
- Nginx基于端口的vhost
- 项目部署到docker中
- 购买合法域名
由于作者十分贫穷,只能舍弃第三种方法。这里就第二种方式进行尝试和记录
Docker容器构建
构建一个存放项目的docker容器,docker容器的选择和组合有多种方式
- 为nginx、php、mysql单独构建容器,然后使用共享卷volume 的方式共享数据
- 在一个容器内构建nginx、php、mysql,一次性搞定
这里我选择的是第二种方式,只构建一个具备项目运行全部所需软件的docker容器
下面进行容器构建的讲解
搜索合适的Docker镜像
到docker hub 搜索lnmp,找到一个合适的镜像,个人推荐下面这个镜像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ykgAUhOq-1589266053479)(https://s1.ax1x.com/2020/05/11/YGkU29.png)]
dockerHub镜像地址
# 镜像拉取
docker pull 2233466866/lnmp
# 查看镜像
docker images ps
当然,如果嫌慢的话可以像我一样,到github上拉取项目,直接基于DockerFile进行镜像构建
# 拉取githup项目
git clone https://github.com/2233466866/lnmp.git
# 进入项目目录
cd ./lnmp
# 进行镜像构建
docker build -t lnmp .
# 查看镜像
docker images ps
Docker容器构建
在Docker Hub中也有详细的介绍,可以根据自己的实际情况进行调整和修改
这里的内容会对docker的命令使用有些要求,有不懂的请自行百度或留言
docker run -itd \
# -p参数进行端口映射,格式 -p 宿主机端口:docker端口
-p 8080:8080 \
-p 443:443 \
-p 3306:3306 \
# -v 宿主机目录挂载到容器,格式 -v 宿主机目录:容器目录
-v /sys/fs/cgroup/:/sys/fs/cgroup:ro \
-v /var/www:/www \
-v /usr/local/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf \
-v /usr/local/mysql/data:/data/mysql \
# 使docker容器拥有root权限
--privileged=true \
--name=lnmp lnmp
# 启动、进入容器内部
docker exec -it lnmp /bin/bash
# 查看服务(容器内)
ps -aux | grep nginx
ps -aux | grep mysqld
ps -aux | grep php-fpm
ps: 上面的docker命令中的 -p 参数 和 -v参数也有注释了,看自己需要自行替换
项目部署
docker容器已经成功启动,基于之前docker容器-v参数指定,自行进行一些必要的参数配置和项目代码的部署
#容器中配置文件的路径(Config file path)
# Nginx
/usr/local/nginx/conf/nginx.conf
# MySQL
/etc/my.cnf
# PHP
/usr/local/php7/lib/php.ini
/usr/local/php7/etc/php-fpm.conf
/usr/local/php7/etc/php-fpm.d/www.conf
测试项目
此时项目已然运行在docker容器内,且由于把宿主机的端口映射到docker容器,只需要修改本地的host文件,就可以使用在不够买域名的情况下使用域名进行开发和测试
后记
项目部署时,作者也向此docker镜像的作者提了许多问题,他也很耐心得一一解答,在此感谢小鹿大大
最后宣传一下docker交流学习qq群,821635552