dockerfile定制镜像

1、Dockerfile格式示例

FROM centos:7
LABEL auth lynn
RUN yum install lrzsz -y
COPY run.sh /usr/bin
EXPOSE 80
CMD [ "run.sh" ]

2、镜像分类

  • 基础镜像:例如centos、ubuntu、alpine

  • 环境镜像:例如jdk、php、go

  • 项目镜像:将项目与环境镜像打包

3、常用指令

3、构建镜像命令

  • 语法:

    docker build [optins] path|URL|- [flags]
    options:
    -t,--tag list       #指定镜像名称
    -f,--file string    #指定dockerfile名称和位置
    
  • 示例:

    # dockerfile名称为Dockerfile,且在当前目录
    docker build -t lynn/t1 .
    # dockerfile名称不为Dockerfile,且不在当前目录
    docker build -t lynn/t1 -f ./test/myfile ./test
    # 路径为URL
    docker build -t lynn/t1 http://www.abc.com/Dockerfile
    

4、CMD与ENTRYPOINT

  • 用法:

    • CMD的exec形式,不支持传变量,shell形式支持。exec模式传变量示例:

      FROM centos:7
      LABEL maintainer lynn
      COPY run.sh /usr/bin
      ENV NAME=lynn
      EXPOSE 80
      CMD ["sh","-c","/usr/bin/run.sh $NAME"] 
      
    • 启动镜像时,也可以覆盖docker file中的CMD:

      docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql --character-set-server=utf8
      
    • 生产环境常使用ENTRYPOINT结合CMD用(exec形式),可动态的使用CMD为ENTRYPOINT传参。即执行:

      [ENTRYPOINT] [CMD]
      
    • 生产环境若只有一条单命令且不常改变,使用CMD即可;若存在灵活传参,可把固定部分放在ENTRYPOINT,改变部分放在CMD。

  • 小结:

5、案例

  • 部署nginx

  • 部署博客

  • 部署tomcat

  • 部署微服务

6、最佳实践原则

  • 减少镜像层:一次RUN指令形成一层,尽量shell命令都写在一行,减少镜像层

  • 优化镜像大小:一次RUN指令形成一层,如果没有在同一层删除冗余文件,无论最后时候删除,都会带到下一层,所以每一层清理对应的残留数据,减少镜像大小

  • 减少网络传输时间:位于公网上的软件包、mvn仓库,应尽量使用私有仓库,提高镜像构建速度。

  • 多阶段构建:代码编译、部署在一个Dockerfile完成,只会保留部署阶段产生的数据

  • 选择最小的基础镜像:例如alpine

posted @ 2021-02-24 10:10  那就这样吧~  阅读(93)  评论(0编辑  收藏  举报