四、DevOps学习笔记

DevOps学习笔记(第四节 Dockerfile 语法)

FROM指令:指在哪个base image之上build自己image
LABEL指令:指image的Metadata信息,如作者、镜像信息、版本、描述、类似代码里的注释
RUN指令:运行命令、安装软件、每次运行RUN 都会生成新的一层
 执行命令并创建新的image layer
 RUN yum update && yum install -y vim \ application-dev 
    #反斜线换行       
WORKDIR 设定当前工作目录、类似cd 改变目录去做一些操作
 如:WORKDIR /test   #如果没有会自动创建test目录
     WORKDIR demo
     RUN pwd         #输出结果应该是/test/demo
 注意:使用WORKDIR,不要用RUN cd 并且尽量使用绝对目录.    
ADD and COPY (添加本地文件)

ADD hello / 表示将hello添加到根目录下
例:1、ADD test.tar.gz / #添加到根目录并解压
2、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 insatll -y mysql-server=”${MYSQL_VERSION}”
&& rm -rf /var/lib/apt/lists/* # 引用常量

CMD 指令:

功能为容器启动时要运行的命令
设置容器启动后默认执行的命令和参数
格式:CMD [“/bin/echo”,”hello docker”]

ENTRYPOINT

设置容器启动时运行的命令
格式:ENTRYPOINT [“/bin/echo”,”hello docker”]
例:
FROM centos
ENV name Docker
ENTRYPOINT [“/bin/bash”,”-c”,”echo hello $name”]
# 运行docker build -t zhang/cenos .
#运行docker run -it zhang/cenos 输出结果:hello Docker
最佳实践:写一个shell脚本作为entrypoint
COPY docker-zhang.sh /usr/local/bin/
ENTRYPOINT [“docker-zhang.sh”]
EXPOSE 3306
CMD [“mysql”]

VOLUME and EXPOSE

主要是指存储和网络(后面单独介绍)

官方mysql的Dockerfile示例:

https://github.com/docker-library/mysql/blob/333935aa6612376d58737a8cab0e3f5df370585a/5.7/Dockerfile

详细参考文档:https://docs.docker.com/engine/reference/builder/#parser-directives

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭