Dockerfile语法及最佳实践

FROM

  • 制作 base image
    FROM scratch
  • 使用 base image
    FROM centos;
    FROM unbuntu:14.04

LABEL

LABEL maintainer="jerry@gmail.com"

LABEL version = "1.0"

LABEL description="This is description"

Metadata必不可少


RUN

RUN:执行命令并创建新的Image Layer

RUN yum update && yum install -y vim \
        python-dev      #反斜线换行
RUN apt-get update && apt-get install -y perl \
        pwgen --no-install-recommends && rm -rf \ 
        /var/lib/apt/lists/*    #注意清理cache
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME' 

WORKDIR

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

用WORKDIR,不要用RUN cd!尽量使用绝对目录!


ADD & COPY

ADD hello /
ADD test.tar.gz /   #添加到根目录并解压
WORKDIR /root
ADD hello test/     #/root/test/hello
WORKDIR /root
COPY hello test/

大部分情况,copy优于add,add除了copy还有额外功能(解压)。添加远程文件/目录尽量使用curl或者wget。


ENV

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

VOLUME & EXPOSE

主要用于存储和网络


CMD & ENTRYPOINT

CMD

  • 设置容器启动后默认执行的命令和参数
  • 如果docker run指定了其它命令,CMD命令被忽略
  • 如果定义了多个CMD,只有最后一个会执行
FROM centos
ENV name Docker
CMD echo "hello $name"
docker run [image]输出?
Docker run -it [image]/bin/bash输出?

ENTRYPOINT

  • 设置容器启动时运行的命令
  • 让容器以应用程序或者服务的形式运行
  • 不会被忽略,一定会执行
  • 最佳实践:写一个shell脚本作为entrypoint
CPOY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSe 27017
CMD ["mongod"]
两种格式:Shell 和 Excel 格式
  • Shell格式:
RUN apt-get install -y vim
CMD echo "hello docker"
ENTRYPOINT echo "hello docker"
  • Excel格式:
RUN ["apt-get" , "install" , "-y" , "vim"]
CMD ["/bin/echo","hello docker"]
ENTRYPOINT["/bin/echo","hello docker"] 
Dockerfile 示例
  • Dockerfile1
FROM centos   #定义一个base iamge
ENV name Docker     #定义个常量
ENTRYPOINT echo "hello $name"  #运行echo命令
  • Dockerfile2
FROM centos
ENV name Docker
ENTRYPOINT ["/bin/bash","-c","echo hello $name"]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值