我们在使用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的原创文章,请关注公众号"汪子熙":
相关推荐
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使用 ...
openjdk 8 docker 镜像 可离线安装,docker load -i openjdk 8 docker 镜像 可离线安装,docker load -i openjdk 8 docker 镜像 可离线安装,docker load -i openjdk 8 docker 镜像 可离线安装,docker load -i
docker基本入门以后,可以试试打包docker镜像与dockerfile了 docker镜像 docker hub仓库有2类仓库,用户仓库和顶层仓库,用户仓库由docker用户创建的,顶层仓库由docker内部的人来管理的。...1.创建一个
步骤一:docker build -t registry/spark:3.1.2 -f kubernetes/dockerfiles/spark/Dockerfile . 步骤二:docker images查看镜像 步骤三:导出镜像 docker save -o spark3.1.2.tar registry/spark:3.1.2
arm下nginx docker镜像
mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包
kafka的docker镜像包含了kafka,zookeeper 和kafkamanager,可以通过docker 来load 安装
这个手册是提供给大家学习TongWeb制作docker镜像!TongWeb打docker镜像.docx,
构建一个Java应用的Docker镜像 假设Java应用名为 docker-demo 1、在项目代码打成jar包:demo-docker.jar # 这里我用mvn来打包 # -Dmaven.test.skip=true --- 跳过检查 mvn package -Dmaven.test.skip=true 2、创建...
docker redis镜像 用于在docker中导入redis的镜像 执行docker load -i redis.tar 即可完成导入操作
仅44.5M大小的docker ubuntu镜像 完整的apt支持。使用方式:docker load -i ubuntu_16.04.3-image.tar.gz
由于国内访问直接访问Docker hub网速比较慢,拉取镜像的时间就会比较长。一般我们会使用镜像加速或者直接从国内的一些平台镜像仓库上拉取。 我比较常用的是网易的镜像中心和daocloud镜像市场。 网易镜像中心:...
minio使用docker镜像包
利用博客(https://blog.csdn.net/qq_34777982/article/details/123924095)...3.查看镜像:docker images | grep etcd 4.利用该镜像创建容器或者推到本地的harbor docker run 或者docker push 希望可以帮助有需要的人
达梦数据库为用户提供基于 X86 64 位架构的 Docker 镜像,用户可以下载并使用镜像快速部署 DM8,并开展应用适配工作。
apisix v2.11.3 完整docker镜像包, 整合 apisix-dashboard v2.11.0,依赖外部etcd环境, 镜像运行需要 ETCD 配置参数 ETCD_SERVER=http://192.168.82.197:12369,http://192.168.82.184:12369,...
Elasticsearch Docker镜像方便下载使用
java8 的docker镜像,支持私网部署
nginx:alpine离线镜像包,使用docker load -i nginxalpine.tar
geoserver ARM 平台的 Docker 镜像,Dockerfile 和 docker-compose 地址为: https://github.com/luolingchun/docker-compose/tree/master/geoserver-arm