利用Dockerfile文件部署php项目的全过程

 更新时间:2022年07月11日 12:33:15   作者:码农@cj  
环境部署一直是一个很大的问题,无论是开发环境还是生产环境,但是Docker将开发环境和生产环境以轻量级方式打包,提供了一致的环境,下面这篇文章主要给大家介绍了关于利用Dockerfile文件部署php项目的相关资料,需要的朋友可以参考下

一、当前项目结构

/project_name
|-- /dist          #--- 项目编译后输出的目录
|-- /config        #--- 配置文件目录
|---|
|---|-- Dockerfile #--- Dockerfile文件
|---|-- nginx.conf #--- nginx配置文件

 nginx.conf文件

二、创建Dockerfile文件

# 从ubuntu镜像中构建应用
FROM ubuntu:latest
 
# 设置镜像的制作者
MAINTAINER congjiang
 
# 安装nginx + php-fpm7.4 
 
RUN apt-get update && apt-get upgrade && apt-get install -y nginx php7.4-fpm vim
 
# 上一条命令安装nginx和fpm
# nginx 默认安装路径 /etc/nginx/
# php-fpm 默认安装路径 /etc/php/fpm/
# nginx配置文件存放目录 /etc/nginx/conf.d/ 
# nginx默认项目路径 /var/www/html/
 
# 在上传目录之前,可以先删除旧项目代码
# RUN ["rm", "-rf", "/var/www/project_name/"]
 
# 项目文件上传, 把当前目录下的所有文件上传到/var/www/project_name目录下
COPY ./dist/ /var/www/project_name/
 
# 把当前项目的nginx.conf配置文件上传到/etc/nginx/conf.d/目录下
COPY ./config/nginx.conf /etc/nginx/conf.d/default.conf
 
# 容器运行时启动应用
# php-fpm7.4 -D : 启动fpm并在后台运行
# nginx -g 'daemon off;' : 启动nginx, 前台执行, 并保持进程常驻, 避免docker容器启动后就自动关闭了
CMD php-fpm7.4 -D && nginx -g 'daemon off;'

三、生成镜像文件

# 在项目project_name目录下执行命令
 
docker build -f config/Dockerfile -t myproject:latest .
 
# 注:  最后的参数表示路径,  . : 表示当前目录下
# -f 指定Dockerfile文件所在目录, 如果是相对路径,则从当前目录下查找
# -t 重新指定镜像的名称和标签  <name>:<tag>

四、使用镜像文件,并启动容器

# 启动镜像
 
docker run -itd -p 80:8080 myproject:latest
 
# --name <name> 为启动的容器指定名称,不指定会默认随机一个名称
# -p 访问的端口:镜像内程序的端口
# -d 表示当前容器在后台运行
# -it 指定要启动的镜像名称和标签 <name>:<tag>
# -v 本地路径:镜像内的路径   可以将本地路径和容器内的路径映射,可以即时修改文件即时生效,方便测试
# -v 命令可以有多条
# --rm 当前容器退出后将自动删除
# eg:  -v E:/logs/:/var/logs/nginx/   把nginx的日志文件映射到本地

注: nginx + php-fpm 环境搭建到这里已经完成。

启动运行容器后, 打开本地浏览器:  http://localhost/  就可以访问了

五、连接已启动的镜像容器

# 查看正在运行的容器
 
docker ps
 
# CONTAINER ID    IMAGE  ...
# 01f82e69c455    myproject  ...
 
docker exec -it 01f82e69c455 /bin/bash
 
# -it 需要连接的容器的CONTAINER ID
# /bin/bash 当前参数必须的

六、 构建项目出现的问题

        1.  每次重新构建项目,都会新创建一个镜像文件

        2.  如果构建镜像文件时,指定的name和标签与原来的镜像一样,则原来的镜像不会删除,会被更名为<none>:<none> 的镜像文件

# 已找到相关命令解决上面两个问题, 在创建相同名称的新镜像文件时,避免旧镜像残留
# 可以先删除旧镜像文件
 
docker rmi -f <name>:<tag>  
# 当前命令可以强制删除指定名称和tag的镜像文件

七、删除容器、删除镜像文件

# 删除运行的容器
docker rm -f <name>
# -f 强制删除,如果容器正在运行也会被删除
# -v 删除当前容器挂载的数据卷
 
# 删除所有没有运行的容器
docker rm $(docker ps -a -q)
 
# 删除本地镜像文件
docker rmi -f <name>:<tag>
 

八、镜像仓库地址  

1、ubuntu + nginx + php-fpm7.4 版本的运行环境

命令拉取镜像:

docker pull freedomx20/nginx-fpm7.4:1.0

docker镜像仓库:

Docker Hub (ubuntu + nginx + php-fpm7.4 环境)

https://hub.docker.com/r/freedomx20/nginx-fpm7.4

总结

到此这篇关于利用Dockerfile文件部署php项目的文章就介绍到这了,更多相关Dockerfile文件部署php内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PHP操作XML中XPath的应用示例

    PHP操作XML中XPath的应用示例

    这篇文章主要介绍了PHP操作XML中XPath的应用,结合实例形式分析了php使用XPath进行xml节点查询的相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • KindEditor在php环境下上传图片功能集成的方法示例

    KindEditor在php环境下上传图片功能集成的方法示例

    这篇文章主要介绍了PHP环境下如何实现使用KindEditor编辑器上传图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • PHP abstract 抽象类定义与用法示例

    PHP abstract 抽象类定义与用法示例

    这篇文章主要介绍了PHP abstract 抽象类定义与用法,结合实例形式分析了php定义abstract抽象类以及继承抽象类等具体使用技巧,需要的朋友可以参考下
    2018-05-05
  • PHP商品秒杀问题解决方案实例详解【mysql与redis】

    PHP商品秒杀问题解决方案实例详解【mysql与redis】

    这篇文章主要介绍了PHP商品秒杀问题解决方案,结合实例形式详细分析了php结合mysql与redis实现商品秒杀功能的相关操作技巧及注意事项,需要的朋友可以参考下
    2019-07-07
  • php自定义类fsocket模拟post或get请求的方法

    php自定义类fsocket模拟post或get请求的方法

    这篇文章主要介绍了php自定义类fsocket模拟post或get请求的方法,涉及php使用socket模拟post及get请求的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 解析数组非数字键名引号的必要性

    解析数组非数字键名引号的必要性

    以下是对数组非数字键名引号的必要性进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • php获取服务器操作系统相关信息的方法

    php获取服务器操作系统相关信息的方法

    这篇文章主要介绍了php获取服务器操作系统相关信息的方法,涉及php针对服务器端预定义变量及系统函数的使用技巧,需要的朋友可以参考下
    2016-10-10
  • PHP正则匹配到2个字符串之间的内容方法

    PHP正则匹配到2个字符串之间的内容方法

    今天小编就为大家分享一篇PHP正则匹配到2个字符串之间的内容方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • PHP如何优化冗余代码

    PHP如何优化冗余代码

    在编程中,代码的冗余是一个常见的问题,不仅增加了代码的复杂性,还降低了可读性和可维护性,本文将探讨如何有效地减少PHP代码的冗余,希望对大家有所帮助
    2024-11-11
  • 如何批量替换相对地址为绝对地址(利用bat批处理实现)

    如何批量替换相对地址为绝对地址(利用bat批处理实现)

    你的url链接是相对路径你想把他批量替换成绝对路径该怎么做呢?下面与大家分享下具体的实现思路及代码,只需点击bat文件,全部页面里的相对地址就会变成绝对地址了
    2013-05-05

最新评论