Dockerfile

Dockerfile

1. 什么是Dockerfile

定义:它是一个镜像构建文件,用来帮助我们自己构建一个自定义镜像

在这里插入图片描述

在这里插入图片描述

2.为什么要存在Dockerfile

问题:在dockerhub中官方提供很多镜像已经能满足我们的所有服务了,为什么还需要自定义镜像

核心作用:日后用户可以将自己应用打包成镜像,这样就可以让我们应用进行容器运行

3.Dockerfile构建镜像原理

4.Dockerfile使用

官方说明: https://docs.docker.com/engine/reference/builder/

保留字作用
FROM当前镜像是基于哪个镜像,第一个必须是FROM
MAINTAINER指定维护者信息
RUN构建镜像时需要运行的指令
EXPOSE容器暴露的端口号
WORKDIR指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV用来构建镜像过程中设置环境变量
ADD将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
COPY拷贝文件和目录到镜像中将从构建上下文目录中的文件
VOLUME容器数据卷,用于数据保存和持久化工作
CMD指定启动容器时执行的命令
ENTRYPOINT配置容器启动后执行的命令

4.1 FROM

  • 第一条指令必须为 FROM 指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)。
  • 语法
# 格式为FROM<image>或FROM<image>:<tag>
FROM tomcat:8

4.2 RUN

  • 每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 \ 来换 行
  • 语法
# 格式为 	RUN	<command>	或 	RUN	["executable",	"param1",	"param2"]
RUN yum install -y vim 
RUM ["yum","install","-y","vim"]

4.3 EXPOSE

  • Docker服务端容器暴露的端口号,在启动容器时需要通过 -P,Docker 主机会自动 分配一个端口转发到指定的端口。
  • 语法
#格式为 	EXPOSE	<port>	
EXPOSE 8080

4.4 WORKDIR

  • 指令配置工作目录,参数是相对路径
  • 语法
#格式为 	WORKDIR	/path
WORKDIR /data

4.5 ADD

  • 用来从context上下文复制新文件、目录或远程文件url,并将他们添加都位于指定路径的映像文件系统中
  • 语法
ADD hom* /mydir/
ADD text.txt mdir/ #指定相对路径
ADD text.txt /absoluteDir/ #可以指定绝对路径
ADD url

4.6 COPY

  • 用来将context目录中指定文件复制到镜像的指定目录中
  • 语法
COPY	<src>	<dest>

4.7 VOLUME

  • 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据
  • 语法 VOLUME ["/data"]

4.8 ENV

  • 用来为构建镜像设置环境变量。这个值将出现在构建阶段中所有后续 指令的环境中, 指定一个环境变量
  • 语法 ENV

4.9 ENTRYPOINT

  • 配置容器启动后执行的命令,并且不可被 docker run提供的参数覆盖。每个Dockerfile中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
  • 语法:ENTRYPOINT command param1
  • ​ ENTRYPOINT [“executable”, “param1”, “param2”]

4.10 CMD

  • 指定启动容器时执行的命令,每个Dockerfile只能有一条 CMD命令。如果指定了多条命令,只有最后一条 会被执行,如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD指定的命令。
  • 语法
CMD	["executable","param1","param2"]	使用 	exec	执行,推荐方式;
CMD	command	param1	param2	在 	/bin/sh	中执行,提供给需要交互的应用;
CMD	["param1","param2"]	提供给 	ENTRYPOINT	的默认参数;

5.Dockerfile构建springboot应用

5.1 开发springboot应用程序

5.2 对springboot应用程序进行打包

  • war ====> tomcat
  • jar 前后端分离主流 ====> jdk

5.3 打包项目

5.4 在服务器中创建dockerfile上下目录context

  • mkdir demo 这个目录作为context目录

  • 在demo目录中创建Dockerfile文件 touch Dockerfile

  • 上传应用jar包到context目录

在这里插入图片描述

  • 编写Dockerfile

    FROM openjdk:8-jre                #基于哪个镜像进行构建
    WORKDIR /webapp                          #定义进入容器时默认位置,接下来后序操作工作
    ADD demo-0.0.1-SNAPSHOT.jar demo.jar     #复制到工作目录重命名app.jar
    EXPOSE 8089                              #当前容器暴露哪个端口
    ENTRYPOINT ["java","-jar"]               #启动应用固定命令
    CMD ["demo.jar"]                         #执行jar名称 
    
    
    [root@localhost demo]# docker build -t demo:01 .
    

在这里插入图片描述

[root@localhost demo]# docker run -d -p 8089:8089 --name demo demo:01
0921a5153b250b5bbd78ec29d231b54b5fe7945d546e31fedf33b019eeb85eda
#查看日志
[root@localhost demo]# docker logs -f 0921a5153b25  

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值