前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用dockerfile部署项目(附详细步骤)

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

作者头像
红队蓝军
发布2024-07-26 19:25:55
9700
发布2024-07-26 19:25:55
举报
文章被收录于专栏:红队蓝军

什么是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环境全部迁移

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 红队蓝军 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CVE-2023-26469
  • docker拉取mysql基础镜像
  • docker拉取php基础镜像环境
  • 上传源码
  • 修改sql 文件
  • 运行
  • 部署
  • docker镜像迁移
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档