DockerFile介绍

前言

DockerFile文件通常用来构建自定义镜像,举个不恰当的栗子:

比如果现在有一个纯净版的windows10镜像,使用这个镜像我安装了一个纯净版的win10到我的电脑,
接着我安装了杀毒软件、IDEA、JDK、mysql、Redis、MongoDb、qq、微信等一些基础应用,
后来我的系统损坏了(无法修复),需要重装系统,
于是我又用纯净版的win10镜像重新装一次系统,
然后又重新安装一次杀毒软件、IDEA、mysql、Redis、MongoDb、qq、微信...

那我能不能自己创建一个自定义的系统镜像,就以win10纯净版为基础,
预装上IDEA、JDK、Mysql、Redis这些应用,下次重装系统时,安装完系统这些软件就装好了,答案是当然可以啊。

那么docker中同理,我想以jdk为基础镜像创建一个自定义镜像,把自定义创建过程写成一个脚本,通过这个脚本来一键生成自定义镜像,这个脚本就是DockerFile,调用这个脚本的Docker命令就是Docker build

DockerFile语法

FROM <镜像名>

所有的 Dockerfile 都用该以 FROM 开头,FROM 命令指明 Dockerfile 所创建的镜像文件以什么镜像为基础,FROM 以后的所有指令都会在 FROM 的基础上进行创建镜像;可以在同一个 Dockerfile 中多次使用 FROM 命令用于创建多个镜像。

FROM 10.200.0.230:5000/openjdk:8-jre
FROM ubuntu
MAINTAINER <你的名字邮箱>

用于指定镜像创建者和联系方式。

MAINTAINER zhengql zhengql@test.com
MAINTAINER lky6666 lky6666@test.com
RUN <命令>

用于容器内部执行命令。每个 RUN 命令相当于在原有的镜像基础上添加了一个改动层,原有的镜像不会有变化。

RUN echo zql666
ADD <原始位置><目标位置>

用于从将原始位置的文件复制到目标位置文件:原始位置 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件 url,目标位置 是容器中的绝对路径。

COPY target/myDemo-1.0.0.jar /usr/src/
CMD

CMD 命令有三种格式:

  • CMD [“executable”,“param1”,“param2”]:推荐使用的 exec 形式。
  • CMD [“param1”,“param2”]:无可执行程序形式
  • CMD command param1 param2:shell 形式。

CMD 命令用于启动容器时默认执行的命令,CMD 命令可以包含可执行文件,也可以不包含可执行文件:不包含可执行文件的情况下就要用 ENTRYPOINT 指定一个,然后 CMD 命令的参数就会作为ENTRYPOINT的参数。

一个 Dockerfile 中只能有一个CMD,如果有多个,则最后一个生效。  
CMD 的 shell 形式默认调用 /bin/sh -c 执行命令。  
CMD命令会被 Docker 命令行传入的参数覆盖:docker run busybox /bin/echo Hello Docker 会把 CMD 里的命令覆盖。
ENTRYPOINT

ENTRYPOINT 命令的字面意思是进入点,而功能也恰如其意:他可以让你的容器表现得像一个可执行程序一样。

ENTRYPOINT 命令也有两种格式:

  • ENTRYPOINT [“executable”, “param1”, “param2”] :推荐使用的 exec 形式

  • ENTRYPOINT command param1 param2 :shell 形式

    一个 Dockerfile 中只能有一个 ENTRYPOINT,如果有多个,则最后一个生效。

EXPOSE

用来指定对外开放的端口。

EXPOSE 80 3306
WORKDIR

WORKDIR /path/to/work/dir 配合 RUN,CMD,ENTRYPOINT 命令设置当前工作路径。
可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令。默认路径为/。

    FROM ubuntu
    WORKDIR /etc
    WORKDIR ..
    WORKDIR usr
    WORKDIR lib
    ENTRYPOINT pwd

启动容器后得到/usr/lib

USER <UID/用户名>

容器内指定 CMD RUN ENTRYPOINT 命令运行时的用户名或UID

VLOUME

允许容器之间互相访问目录,VOLUME [’/data’] 允许其他容器访问当前容器的目录。

ENV
ENV LC_ALL en_US.UTF-8

栗子分析

#基于私有仓库中openjdk为基础镜像
FROM 10.200.0.230:5000/openjdk:8-jre

#设置工作路径
WORKDIR /usr/src/

#将jar包复制到指定目录
COPY target/myDemo-1.0.0.jar /usr/src/

#设置容器启动时要执行的命令
CMD ["java", "-Duser.timezone=GMT+08", "-jar", "myDemo-1.0.0.jar", "--spring.profiles.active=dev"]

#设置镜像所运行的时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#设置环境变量
ENV LANG C.UTF-8

#暴露端口
EXPOSE 9041

参考

dockerFile官网手册

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值