我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像。优点是我们不用从头开始构建,节省了很多工作量,但付出的代价是需要下载很大的镜像包。
比如我机器上docker images返回的这些基于nginx的镜像,每个都超过了100MB,而一个简单的Ubuntu的容器超过了200MB,如果安装了相关的软件,尺寸会更大。
如果我们的需求是在构建一个符合我们实际业务需求的Docker镜像的前提下,确保镜像尺寸尽可能的小,应该怎么做呢?
思路是使用空镜像scratch。
新建一个文件夹,用wget下载rootfs.tar.xz压缩包。
wget -O otfs.tar.xz https://github.com/debuerreotype/docker-debian-artifacts/raw/b024a792c752a5c6ccc422152ab0fd7197ae8860/jessie/rootfs.tar.xz
这个将近30MB的压缩包是个什么东东?
解压之后看内容就知道了,包含了操作系统大部分常用命令。
wget -O nginx.conf https://github.diablo.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.diablo.corp/raw/slvi/docker-k8s-training/master/docker/res/cheers.jpg && \
wget --no-check-certificate -O /usr/share/nginx/html/index.html https://github.diablo.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的原创文章,请关注公众号"汪子熙":
相关推荐
node:18.15-alpine镜像的tar文件 使用步骤(确保本地环境已经安装docker) 1、将tar包下载到本地 2、打开终端 3、进入到上述tar包的下载路径 4、运行docker load node-18.15-alpine.tar
docker镜像mysql:8.0,离线加载包 放到这里方便大家使用 亲测这个mysql镜像非常好用 加载方式为 docker load -i mysql.tar 非常方便
docker镜像nginx:latest,离线加载包 放到这里方便大家使用 亲测这个nginx镜像非常好用 下载后请先解压文件,解压密码123456789 加载方式为 docker load -i nginx.tar 非常方便
docker 镜像 redis:7.0.15
加载镜像:docker load -i jdk8.tar
docker镜像openjdk:8.0,离线加载包 放到这里方便大家使用 亲测这个JDK镜像非常好用 加载方式为 docker load -i openjdk.tar 非常方便
基于alpine系统构建docker镜像,实现可配置和易于管理的docker镜像。 项目简介 提供非常小的docker镜像。 提供易于配置的docker镜像。 提供非常稳定的docker镜像。 使用docker镜像快速启用微服务架构。 使用docker...
内容概要:这个Docker镜像基于官方OpenJDK 8镜像构建,专为Java开发环境设计。它包含了对阿里云Ubuntu镜像源的优化设置,旨在提升软件包管理和安装速度。适用人群:适合需要快速配置Java开发环境的开发人员,尤其是...
docker-apollo for (携程Apollo)本镜像包含Portal面板,以及Dev/Fat/Uat/Pro环境服务(All in one),皆可独立使用,支持分布式部署和Kubernetes部署.Docker Tags:latest1.3.01.2.01.1.1 1.1.21.0.00.10.2 0.11.0使用 ...
ubuntu20.04的docker镜像文件
这将创建一个新的容器,并进入容器内部。 五、容器配置 在容器内部,可以通过 apt-get 命令安装软件包。例如,安装 Python 2.7: apt-get install python2.7 六、文件传输 可以通过以下命令将文件传输到容器...
ubuntu24.04的docker镜像
redis:7.0.8 docker镜像
部署mongo:4.2所需的docker镜像离线包
mysql 8.4.2 docker镜像包,使用的linux8
linux系统docker离线镜像jdk8镜像资源
特别是对于国内用户来说,由于网络原因,使用默认的Docker Hub镜像源可能会遇到下载速度慢、连接不稳定等问题,因此配置国内的镜像源成为了一个常见的解决方案。 二、常用的Docker镜像源 Docker Hub:Docker官方的...
无标题nginx1.26.2的docker镜像文件
docker python3.8镜像包