为了方便日后查阅总结,做下语法记录。
FROM
FROM centos #尽量使用官方的base images
LABEL
label很重要,就像要写注释。Metadata不可少。
LABEL maintainer='linshangqing'
LABEL version="1.0"
LABEL description="This is description"
RUN
大部分是用来安装软件。每运行一次RUN,在Images就会制造新的layer。
注意:
为了避免无用分层,合并多条命令成一行。
RUN yum update && yun instal -y vim\
python-dev
#通过&&合并成一行;\反斜线换行
WORKDIR
设定当前工作目录。
注意:
1.尽量使用绝对目录。
2.用WORKDIR,不要使用RUN CD
WORKDIR /test #如果没有则会创建test目录
WORKDIR demo
RUN pwd #输出的则是/test/demo
ADD and COPY
都是把本地的文件添加docker iamge里面
ADD和COPY的区别:
ADD还可以解压缩
联合使用的情况 hellow的目录情况
WORKDIR /root
ADD hello test/ # /root/test/hello
添加远程文件/目录,请使用curl或者wget
ENV
设置环境变量或常量(尽量使用ENV可增加可维护性)
ENV MYSQL_VERSION 5.6 #设置常量
RUN apt-get install -y mysql-server="${MYSQL_VERSION}" \
&& rm -rf /var/lib/apt/lists/* #引用常量
VOLUME and EXPOSE
存储和网络
EXPOSE:暴露端口
CMD
1.容器启动时默认执行的命令
2.如果doker run指定了其他的命令,CMD会被忽略
3.如果定义了多个CMD,只有最后一个会执行
示例:
FROM centos
ENV name Docker
CMD echo "hello $name"
docker run [image]输出会是什么?是hello Docker
Docker run -it [image] /bin/bash 输出?则CMD会被忽略
ENTRYPOINT
1.让容器以应用程序或者服务的形式进行
2.不会被忽略,一定会执行