zoukankan      html  css  js  c++  java
  • 从头基于空镜像scratch创建一个新的Docker镜像

    我们在使用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.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的原创文章,请关注公众号"汪子熙":

  • 相关阅读:
    JS判断对象是否为空
    让我感动的一首歌
    获取字符串字节长度跟截取字符串字节长度
    centos7安装mysql
    python 基础
    python + 爬虫 + fiddler + 夜神模拟器 爬取app(1)
    selenium
    adb自动化农药金币
    python 引流
    Python 并行分布式框架 Celery
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/10029824.html
Copyright © 2011-2022 走看看