社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

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

红队蓝军 • 3 月前 • 86 次点击  

什么是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 文件

具体操作步骤

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

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


docker部署环境

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

docker拉取mysql基础镜像

在dockerhub上找

dockerhub地址:https://hub.docker.com/
docker pull mysql:5.6.34

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




    
1)第一种方法,直接vi docker-compose.yml 
2)第二种方法,用xftp将sql文件导出在window桌面,改好后,在用xftp直接传上去,覆盖之前的

docker拉取php基础镜像环境

查看dockerfile文件

docker pull php:7.4-apache

上传源码

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

mkdir Jorani

解压压缩包

unzip jorani-1.0.0.zip

查看Docker-compose.yml文件

运行

在jorani目录中运行

docker-compose up

提示数据库报错

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

修改sql 文件

1)第一种方法,直接vim改sql文件
2)第二种方法,用xftp将sql文件导出在window桌面,改好后,在用xftp直接传上去,覆盖之前的

运行

docker-compose up 交互式启动

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

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

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

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

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

部署

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

docker镜像迁移

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

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

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

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/172445
 
86 次点击