我们在使用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 load -i jdk8.tar
docker 镜像 redis:7.0.15
docker镜像nginx:latest,离线加载包 放到这里方便大家使用 亲测这个nginx镜像非常好用 下载后请先解压文件,解压密码123456789 加载方式为 docker load -i nginx.tar 非常方便
docker镜像openjdk:8.0,离线加载包 放到这里方便大家使用 亲测这个JDK镜像非常好用 加载方式为 docker load -i openjdk.tar 非常方便
ubuntu20.04的docker镜像文件
基于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使用 ...
部署mongo:4.2所需的docker镜像离线包
这将创建一个新的容器,并进入容器内部。 五、容器配置 在容器内部,可以通过 apt-get 命令安装软件包。例如,安装 Python 2.7: apt-get install python2.7 六、文件传输 可以通过以下命令将文件传输到容器...
ubuntu24.04的docker镜像
特别是对于国内用户来说,由于网络原因,使用默认的Docker Hub镜像源可能会遇到下载速度慢、连接不稳定等问题,因此配置国内的镜像源成为了一个常见的解决方案。 二、常用的Docker镜像源 Docker Hub:Docker官方的...
redis:7.0.8 docker镜像
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 创建和部署一个简单的 Web 应用。项目分为以下几个步骤: 1. **创建一个简单的 Web 应用**:编写 Python Flask 应用代码。 2. **编写 Dockerfile**:定义构建 Docker 镜像的步骤。 3...
mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包