使用dockerfile部署项目(附详细步骤)

admin 2024年7月18日14:16:38评论16 views字数 2525阅读8分25秒阅读模式

什么是dockerfile

Dockerfile 是一个文本文件,它包含了所有用于组合Docker镜像所需的指令和参数。这些指令和参数基于Docker镜像的层的概念,并定义了如何从一个基础镜像开始,通过添加、修改文件、安装软件包、配置环境变量和设置启动命令等操作,最终构建出一个新的Docker镜像

需要执行一条简单的docker build命令,Docker就会根据Dockerfile中的指令自动完成镜像的构建

Dockerfile的指令

1、构建指令:构建镜像,指定操作不会运行在image的容器中执行
2、设置指令:设置镜像的属性,指定操作会在image的容器中执行

Dockerfile的基本结构包括:

基础镜像(FROM) 指定构建新镜像所使用的基础镜像,在Dockerfile中第一条指令必须是FROM指令
设置工作目录(WORKDIR) 指定后续指令的工作目录。
复制文件(COPY/ADD) 将文件或目录复制到镜像中。ADD指令还可以自动解压压缩文件,但出于安全考虑,一般推荐使用COPY指令。
安装软件包(RUN) 在镜像中运行命令,如安装软件包。RUN指令常用于安装依赖、编译程序等。
配置环境变量(ENV) 设置环境变量,供镜像中运行的程序使用。
暴露端口(EXPOSE) 声明镜像中运行的应用将使用容器的哪个端口。不过,这并不会让端口自动在宿主机上监听,而是需要在运行容器时通过-p-P参数来指定
容器启动时要运行的命令(CMD) Dockerfile中可以包含多个CMD指令,但只有最后一个生效。CMD指令可以被docker run命令行中的参数覆盖
配置容器启动时运行的可执行文件(ENTRYPOINT) 与CMD不同,CMD的指令会被当作参数传递给ENTRYPOINT
声明容器运行时监听的端口(EXPOSE) 只是声明,并不会自动使端口对外提供服务
LABEL 为镜像添加元数据
ENV 设置环境变量
VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
USER 指定运行容器时的用户名或UID
HEALTHCHECK 用于指定一个检查容器健康状态的命令
SHELL 允许覆盖用于命令的shell形式

举例:

dockerfile 文件

使用dockerfile部署项目(附详细步骤)

具体操作步骤

1、编写DockerFile文件
2、Docker build命令构建镜像
3、docker run 依据镜像运行容器实例

介绍DockerFile、镜像、容器的关系

1、Dockerfile是构建Docker镜像的基础,Docker通过读取Dockerfile中的指令,执行相应的操作(如添加文件、安装软件包、配置环境变量等),最终生成一个镜像
2、Docker镜像是Docker容器的基础,docker build时会产生一个Docker镜像,当运行 Docker镜像时会真正开始提供服务
3、Docker容器,依据镜像运行(docker run)容器提供服务

实操,部署CVE项目

CVE-2023-26469

CVE-2023-26469:在 Jorani 1.0.0 中启用远程代码执行的严重漏洞

下载 Jorani 1.0.0

下载地址:https://github.com/bbalet/jorani/releases

使用dockerfile部署项目(附详细步骤)

解压,这里有docker-compose.yml文件,可以不用Docker build命令构建镜像,通过DockerCompose自动化部署。

使用dockerfile部署项目(附详细步骤)

docker部署环境

要求有php7以及mysql5.6的基础镜像环境

使用dockerfile部署项目(附详细步骤)

docker拉取mysql基础镜像

在dockerhub上找

dockerhub地址:https://hub.docker.com/
使用dockerfile部署项目(附详细步骤)
docker pull mysql:5.6.34
使用dockerfile部署项目(附详细步骤)

数据库版本为5.6.34,版本切换在docker-compose.yml文件中

1)第一种方法,直接vi docker-compose.yml 
2)第二种方法,用xftp将sql文件导出在window桌面,改好后,在用xftp直接传上去,覆盖之前的
使用dockerfile部署项目(附详细步骤)

docker拉取php基础镜像环境

查看dockerfile文件

使用dockerfile部署项目(附详细步骤)
docker pull php:7.4-apache

上传源码

新建目录,将 Jorani源码通过xftp上传到新建的目录中

mkdir Jorani
使用dockerfile部署项目(附详细步骤)

解压压缩包

unzip jorani-1.0.0.zip
使用dockerfile部署项目(附详细步骤)

查看Docker-compose.yml文件

使用dockerfile部署项目(附详细步骤)

运行

在jorani目录中运行

docker-compose up

提示数据库报错

数据导入时,执行SQL失败。因为定义了函数存在语法错误,可能是数据库版本问题。现在找不到以前的5.0版本数据库了。所以花了时间解决语法问题。主要是字符串转INT这个函数,CAST('' AS INT)改成CAST('' AS SIGNED)

使用dockerfile部署项目(附详细步骤)

修改sql 文件

1)第一种方法,直接vim改sql文件
2)第二种方法,用xftp将sql文件导出在window桌面,改好后,在用xftp直接传上去,覆盖之前的
使用dockerfile部署项目(附详细步骤)

运行

docker-compose up 交互式启动

docker-compose up -d 后台运行方式启动

用docker-compose up交互式启动,日志没有问题,页面能正常访问

使用dockerfile部署项目(附详细步骤)
使用dockerfile部署项目(附详细步骤)

这里是80端口,所以页面直接ip访问

使用dockerfile部署项目(附详细步骤)

因为我们已经调试过了,没问题,要正式部署,部署之前需要将开启的容器要删掉。而down 可以删除销毁容器。

docker-compose down 
docker ps -a 查看容器

部署

docker-compose up -d 后台运行方式启动
使用dockerfile部署项目(附详细步骤)

docker镜像迁移

docker save -o 就是将镜像保存为你指定的文件名格式的文件。如:docker save -o mysql5.zip mysql:5 将镜像保存为mysql5.zip

docker load -i  就是将导出的镜像,装载回去 如:docker load -i mysql5.zip

这整个过程,叫docker镜像迁移。从一台机器迁移到另外一台,同时保证可基础镜像一致性

使用dockerfile部署项目(附详细步骤)
使用dockerfile部署项目(附详细步骤)

如果需要将jorani进行迁移,需要将源码 、php环境、MySQL环境全部迁移

加下方wx,拉你一起进群学习

使用dockerfile部署项目(附详细步骤)

原文始发于微信公众号(红队蓝军):使用dockerfile部署项目(附详细步骤)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月18日14:16:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用dockerfile部署项目(附详细步骤)https://cn-sec.com/archives/2967015.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息