第五集:Docker之Dockerfile详解

1.FROM:引入和开始

#从头制作baseImage

FROM scratch

#使用已有的baseImage

FROM centos

#指定使用的版本

FROM ubuntu:14.04

2.LABEL:定义一些说明信息

LABEL maintainer=[email protected]

LABEL version=”1.0”

LABEL description=”xxx”

扫描二维码关注公众号,回复: 3921055 查看本文章

3.RUN:执行命令,每执行一条RUN,多一个分层,一般用&&合并语句,反斜杠换行

RUN yum -y update && yum -y install lrzsz \

net-tools

RUN apt-get -y update && apt-get -y install lrzsz\

net-tools

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

4.WORKDIR:进入或创建目录,尽量不要使用相对路径

#进入/root目录

WORKDIR /root

#如果没有会自动创建

WORKDIR /test

WORKDIR demo

#输出:/test/demo

RUN pwd

5.ADD和COPY:将本地的文件,添加到image里

#将hello添加到根目录下

ADD hello /

#将tar包直接解压到根目录

ADD test.tar.gz /

#最终hello应该在 /root/test/hello

WORKDIR /root

COPY hello test/

6.ENV:增加Dockerfile的可读性

#设置常量

ENV MYSQL_MAJOR 5.5

#使用常量

$MYSQL_MAJOR

RUN apt-get -y install mysql-server=”${MYSQL_VERSION}”


CMDENTRYPOINT:

#shell格式

RUN apt-get -y install lrzsz

CMD echo “hello docker”

ENTRYPOINT echo “hello docker”

 

#exec格式

RUN [“apt-get”,”-y”,”install”,”lrzsz”]

CMD [“/bin/echo”,”hello docker”]

ENTRYPOINT [“/bin/echo”,”hello docker”]

  • ENTRYPOINT使用的比CMD多一些
  • ENTRYPOINT:设置容器启动时运行的命令,一定会执行,不会被忽略

操作一下:

  • 分别编写Dockerfile

  • 构建image

  • 查看下

  • 分别运行两个image看效果

  • 修改Dockerfile如下

  • 重新构建和运行

CMD和ENTRYPOINT对比:CMD命令可能被覆盖,ENTRYPOINT命令一定会执行

CMD:设置容器启动后默认执行的参数和命令,若docker指定了其他命令,CMD可以被忽略,CMD若指定多个,只运行最后一个

  • 编写file

  • 构建和运行

ENTRYPOINT:

  • 再构建一个ENTRYPOINT

  • 构建

  • 运行CMD的image

  • 运行ENTRYPOINT的image

 

猜你喜欢

转载自blog.csdn.net/super_lixiang/article/details/83627516