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

2024-07-26 19:25:55 浏览数 (2)

什么是dockerfile

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

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

Dockerfile的指令

代码语言:javascript复制
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 文件

具体操作步骤

代码语言:javascript复制
1、编写DockerFile文件
2、Docker build命令构建镜像
3、docker run 依据镜像运行容器实例

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

代码语言:javascript复制
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上找

代码语言:javascript复制
dockerhub地址:https://hub.docker.com/
代码语言:javascript复制
docker pull mysql:5.6.34

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

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

docker拉取php基础镜像环境

查看dockerfile文件

代码语言:javascript复制
docker pull php:7.4-apache

上传源码

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

代码语言:javascript复制
mkdir Jorani

解压压缩包

代码语言:javascript复制
unzip jorani-1.0.0.zip

查看Docker-compose.yml文件

运行

在jorani目录中运行

代码语言:javascript复制
docker-compose up

提示数据库报错

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

修改sql 文件

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

运行

代码语言:javascript复制
docker-compose up 交互式启动

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

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

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

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

代码语言:javascript复制
docker-compose down 
docker ps -a 查看容器

部署

代码语言:javascript复制
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环境全部迁移

0 人点赞