Docker包含三个基本概念,分别是镜像(Image)、容器(Container)和仓库(Repository)。Docker镜像可以看作是一个特殊的文件系统。除了提供容器运行所需的程序、库、资源、配置等文件外,还包含一些为运行准备的配置参数(如匿名卷、环境变量等、用户等).镜像是Docker运行容器的前提,是Docker的核心。要使用Docker镜像快速构建高性能应用,首先要创建一个好的镜像。如何塑造好形象?这里有一些提示给你。1、明确指定镜像版本,管理更方便。为了使版本管理更方便,应用部署更快速,建议工程师在创建镜像的过程中明确指定包含版本或其他辅助信息的标签。如果没有指定图片标签,默认使用latest。这样每次启动一个应用实例,都需要去镜像仓库查看镜像是否更新。这种方式不利于版本管理,对应用启动速度有一定影响。二、减小镜像大小1、使用alpine版本的基础镜像,减小镜像大小,保证部署和扩展的速度。Alpine是一个轻量级的Linux发行版,高度精简但包含基本工具。其自带的Docker镜像只有4-5M大小。每一种开发语言和框架都有一个基于alpine的基础镜像。因此,在开发自己的应用镜像时,应该选择这些镜像作为基础镜像,这样可以大大减小镜像的体积。以下是各种语言对应的基础镜像:Java(SpringBoot):-openjdk:8-jdk-alpine、openjdk:8-jre-alpine等Java(Tomcat)-tomcat:8.5-alpine等Nodejs-node:9-Alpine,node:8-alpine等Python-python:3-alpine,python:2-alpine等PHP-添加基于php:7-fpm-alpine,php:5-fpm的nginx-alpine等,参考https://hub.docker.com/r/trafex/alpine-nginx-php7/Ruby:ruby:2-alpine等Go/可执行文件-直接基于alpine镜像,以及将编译后的可执行文件放入镜像中。因为alpine不同于Ubuntu/Centos等普通发行版,需要静态编译链接应用代码。比如Go需要关闭cgo:CGO_ENABLED=0gobuild...静态页面-nginx:1-alpine等2.确保Dockerfile中的cleanup命令在同一行,这样也可以减少镜像尺寸。Dockerfile的每条指令都会生成一个文件层,文件层越多,镜像越大。因此,对于不需要生成文件层的命令,尽量将它们合并在一起。例如,组件的安装和清理可以放在一个命令中。如下:3.减少镜像传输大小Docker在构建镜像时,如果某个命令相关的内容没有变化,就会使用最后一个缓存(cache)的文件层。上传到镜像仓库时,这一层也将不再需要上传。利用这一点,您可以在添加应用程序时分层添加。具体操作如下:(1)将不变化或变化不大的大型依赖库与频繁修改的自有代码分离。(2)因为缓存是缓存在运行Dockerbuild命令的本地机器上,所以推荐使用某台机器进行Docker构建,以利用缓存。例如:在构建SpringBoot应用镜像时,我们可以通过以下操作进行分层。1、在Dockerfile所在目录,解压maven生成的jar包unzip
