Dockerfile文件

介绍

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

构建的步骤

  1. 编写Dockerfile文件
  2. docker build
  3. docker run
构建过程解析

Dockerfile内容基础知识

  1. 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  2. 指令按照从上到下,顺序执行
  3. #表示注解
  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交
    Docker 执行Dockerfile的大致流程
    1. docker 从基础镜像运行一个容器
    2. 执行一条指令并对容器进行修改
    3. 执行类似docker commit 的操作提交一个新的镜像层
    4. docker再基于刚提交的镜像运行一个新的容器
    5. 执行dockerfile中的下一条指令直到所有指令都执行完成
Dockerfile体系结构(保留字指令)

FROM
基础镜像,当前镜像是基于哪个镜像的
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器运行时所需要的命令
EXPOSE
当前容器对外暴露出的端口号
WORKDIR
指定在创建容器后,终端默认登录的竟来工作目录,一个落脚点
ENV
用来构建镜像过程中设置环境变量
ADD
在宿主机目录下的文件拷贝进入镜像且ADD命令会自动处理URL和解压tar压缩包
COPY
类似ADD ,拷贝文件和目录到镜像中
将从上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
写法

Shell 脚本写法:
COPY srcdest
JSON串的写法
COPY src"," "dest"

VOLUME
容器数据卷,用于数据保存和持久化工作
CMD
指定一个容器启动时要运行的命令、
Dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run之后的参数替换
CMD 指令的格式和RUN相似,也是两种格式
shell格式: CMD<命令>
exec格式 : CMD[“可执行文件”,“参数1”,“参数2”,···]
参数列表格式:CMD[“参数1”,“参数2”···] 在指定了ENTRYPOINT 指令后,用CMD 指定了具体的参数。
ENTRYPOINT
指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数
ONBUILD
当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

总结

从应用软件的角度来看,Dockerfile,Docker镜像与Docker容器分别代表软件的三个不同阶段。
Dockerfile是软件的原材料
Docker镜像是软件的交付品
Docker容器则可以认为是软件的运行态。
Dockerfile 面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

  1. Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何涉及namespace 的权限控制)等等。
  2. Docker 镜像,在用Dockerfile定义一个文件之后,docker build 时会产生一个Docker 镜像,当运行Docker 镜像时,会开始提供服务;
  3. Docker容器,容器是直接提供服务的。
例子

Base镜像(scratch)
Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的
自定义镜像mycentos
登录后的默认路径
vim编辑器
查看网络配置ifconfig支持
Dockerfile 中写入

FORM centos
MAINTAINER zxx<邮箱>
ENV mypath /tmp
WORKDIR  $mypath
RUN yum -y install vim
RUN yum -y insatll net-tools
EXPOSE 80
CMD /bin/bash

docker build -f /zxx/Dockerfile -t mycentos:1.0 .
docker run -it mycentos:10

CMD/ENTRYPOINT 镜像案例
自定义镜像Tomcat9

FROM centos
MIANTAINER zxx<邮箱>
COPY c.txt /usr/local
ADD jdk-xxxx.tar.gz  /usr/local
ADD   tomcat-xx.tar.gz /usr/local

RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk-12.0.1
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.30
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.30
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.30/bin/startup.sh"]
#CMD ["/usr/local/apache-tomcat-9.0.30/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.30/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.30/bin/logs/catalia.out


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值