docker笔记_Dockerfile常用语法

FROM:  用于选择底层image,尽量使用官方的image作为base image

FROM scratch         //制作base image
FROM centos:7        //使用base image
FROM ubuntu:14.04

LABEL: 定义了image的meta data, 需要写一些关于image的注释信息

LABEL maintainer="xxx@gmail.com"  
LABEL version="1.0"
LABEL description="This is description!"

RUN: 每运行一次'"RUN"对image来说都会生成新的一层,为了避免无用的分层,需要将多条命令合并为一行,为了美观,复杂的"RUN"可以用反斜线换行.

RUN yum update && yum install -y vim \
python-dev  //使用反斜线换行

RUN apt-get update && apt-get intall -y perl \
pwgen --no-install-recommends && rm -rf \
/var/lib/apt/lists/*   //注意清理cache

RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'

WORKDIR: 设定当前工作目录,即在设定的目录下做一些操作. 要使用WORKDIR,而不要使用"RUN cd",且尽量使用绝对目录

WORKDIR /root
WORKDIR /test   //如果根目录下没有test目录,会自动创建testmul
WORKDIR demo
RUN pwd     //输出结果应该是/test/demo

ADD and COPY: 将本地的文件添加到image中,ADD不仅可以添加文件到指定目录,而且可以解压缩. 大部分情况下,COPY优于ADD,但ADD具有可以解压的额外性能.需要添加远程文件/目录时,需要使用curl或者wget.

ADD hello /           //将可执行文件"hello"添加的根目录

ADD test.tar.gz /     //添加到根目录并解压

WORKDIR /root
ADD hello test/       //添加到了/root/test/hello

WORKDIR /root
COPY hello test/

ENV: 通过设定一个环境变量生成一个常量,尽量使用ENV来提高开发的可维护性

ENV MYSQL_VERSION 5.6          //设置常量 MYSQL_VERSION=5.6
RUN apt-get install -y mysql-server="${MYSQL_VERSION}" \
&& rm -rf /var/lib/apt/lists/*    //引用常量

CMD and ENTRYPOINT

RUN: 执行命令并创建新的image layer

CMD: 设置容器启动后默认执行的命令和参数

ENTRYPOINT: 设置容器启动时执行的命令 

Shell格式:

RUN apt-get install -y vim
CMD echo "hello,docker"
ENTRYPOINT echo "hello docker"

Exec格式:

RUN ["apt-get","install","-y","vim"]
CMD ["/bin/echo","hello docker"]         //echo是/bin目录下的一个可执行文件
ENTRYPOINT ["/bin/echo","hello docker"]

 使用Shell格式的RUN命令,会在shell里使用shell解释器 /bin/bash -c 来执行。但如果是在一个不支持shell的平台上或者不希望在shell中运行RUN命令是,可以使用Exec格式的RUN命令.在Exec格式中,通过bash解析命令的方法:

//执行一条shell命令
ENTRYPOINT ["/bin/bash","-c","echo $HOME"]     //注:-c后的参数只能有一个


//直接执行 .sh脚本,sh脚本的第一行会指定脚本的解析器
ENTRYPOINT [XXX.sh]
CMDENTRYPOINT
容器启动时默认执行的命令让容器以应用程序或服务的形式运行
如果docker run指定了其他命令,CMD命令会被忽略不会被忽略,一定会执行
如果定义了多个CMD,只有最后一个会被执行通常用法:写一个shell脚本作为entrypoint
FROM centos:7
ENV name Docker
CMD echo "hello,$name"

执行docker run imagaID     结果会打印:hello,Docker

执行docker run -it imageID /bin/bash    结果直接进入container,因为run后指定的/bin/bash命令

 

FROM centos:7
ENV name Docker
ENTRYPOINT echo "hello,$name"

执行docker run imagaID     结果会打印:hello,Docker

执行docker run -it imageID /bin/bash    结果会打印:hello,Docker,但没有进入container的bash

 

 

更多Dockerfile学习:官方文档 一些Dockerfile github源码

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值