摘要:我们在使用构建镜像时,一种方式是使用官方预先配置好的容器镜像。基于这个名为的镜像启动一个新的容器看到首页,说明这个新构建的镜像工作正常。
我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像。优点是我们不用从头开始构建,节省了很多工作量,但付出的代价是需要下载很大的镜像包。
比如我机器上docker images返回的这些基于nginx的镜像,每个都超过了100MB,而一个简单的Ubuntu的容器超过了200MB,如果安装了相关的软件,尺寸会更大。
如果我们的需求是在构建一个符合我们实际业务需求的Docker镜像的前提下,确保镜像尺寸尽可能的小,应该怎么做呢?
思路是使用空镜像scratch。
新建一个文件夹,用wget下载rootfs.tar.xz压缩包。
wget -O rootfs.tar.xz https://github.com/debuerreotype/docker-debian-artifacts/raw/b024a792c752a5c6ccc422152ab0fd7197ae8860/jessie/rootfs.tar.xz
这个将近30MB的压缩包是个什么东东?
解压之后看内容就知道了,包含了操作系统大部分常用命令。
wget -O nginx.conf https://github.wdf.sap.corp/raw/slvi/docker-k8s-training/master/docker/res/nginx.conf
新建一个dockerfile文件,将下列内容粘贴进去:
FROM scratch # set the environment to honour SAP"s proxy servers ENV http_proxy http://sap.corp:8080 ENV https_proxy http://sap.corp:8080 ENV no_proxy .sap.corp # give yourself some credit LABEL maintainer="Jerry Wang" # add and unpack an archive that contains a Debian root filesystem ADD rootfs.tar.xz / # use the apt-get package manager to install nginx and wget RUN apt-get update && apt-get -y install nginx wget # use wget to download a custom website into the image RUN wget --no-check-certificate -O /usr/share/nginx/html/cheers.jpg https://github.wdf.sap.corp/raw/slvi/docker-k8s-training/master/docker/res/cheers.jpg && wget --no-check-certificate -O /usr/share/nginx/html/index.html https://github.wdf.sap.corp/raw/slvi/docker-k8s-training/master/docker/res/cheers.html # copy the custom nginx configuration into the image COPY nginx.conf /etc/nginx/nginx.conf # link nginx log files to Docker log collection facility RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log # expose port 80 - the standard port for webservers EXPOSE 80 # and make sure that nginx runs when a container is created CMD ["nginx", "-g", "daemon off;"]
执行命令进行镜像的构建:
docker build -t nginx-from-scratch1.0 .
产生的日志:
最后看到镜像成功构建的消息。
基于这个名为nginx-from-scratch的镜像启动一个新的nginx容器:
localhost:1083, 看到首页,说明这个新构建的镜像工作正常。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/27596.html
摘要:为此我首先需要创建一个针对的配置文件。的作用是指定基准镜像。该以后面指定的镜像为基础,在其上进行定制。存在一个特殊的镜像,名为。它是一个虚拟的概念,表示一个空白的镜像。直接使用会让镜像体积更加小巧。 什么是dockerfile?简单的说就是一个文本格式的脚本文件,其内包含了一条条的指令(Instruction),每一条指令负责描述镜像的当前层(Layer)如何构建。 下面通过一个具体的...
摘要:以下为几个常用的指令依赖镜像所有都必须以命令开始,表示其依赖的镜像。的端口不使用公有端口。与命令使用数组语法。推荐阿里云,毕竟有钱,稳定。参数表示后台守护进程运行容器。执行,运行应用。 docker 即容器 一些概念 Docker Registry Docker 远程镜像仓库 DockerHub DaoCloud / Aliyun Docker Images Docker Imag...
摘要:我一直在寻找尽可能小的容器入手,并且发现了一个镜像是完美的,真正的完美它简洁,小巧以及快速。所以这可能就是最小的镜像。尽管如此,这样看起来会很复杂并且导致容器很大。 注:本文由 Adriaan de Jonge 编写,本文的原文地址为 Create The Smallest Possible Docker Container 当我们在使用 Docker 的时候,你会很快注意到...
摘要:将应用部署到项目地址快上车,支持一波原文地址注开始前你需要安装好,配好镜像源本章节源码在分支上从本章节开始项目目录都以为基准请配合自己本地项目灵活变动介绍在这里简单介绍下,建议深入学习是一个开源的轻量级容器技术,让开发者可以打包他们 将Golang应用部署到Docker 项目地址:https://github.com/EDDYCJY/go... (快上车,支持一波)原文地址:https...
阅读 2628·2021-09-13 10:26
阅读 1886·2021-09-03 10:28
阅读 1959·2019-08-30 15:44
阅读 758·2019-08-29 14:07
阅读 353·2019-08-29 13:12
阅读 2119·2019-08-26 11:44
阅读 2306·2019-08-26 11:36
阅读 1986·2019-08-26 10:19