• docker nginx-php容器镜像瘦身优化


    1、 在安装好php环境的容器,参考上面贴出的链接那篇文章的部分,做好基础工作:

    #创建工作目录
    mkdir /rootfs
    
    #进入工作目录
    cd /rootfs
    
    #创建基础目录
    mkdir -p bin etc lib proc sys tmp dev/pts usr/lib64 usr/bin usr/local/bin
    
    #创建一个空的DNS服务用的文件
    touch etc/resolv.conf
    
    #复制名称解析文件
    cp /etc/nsswitch.conf etc/nsswitch.conf
    
    #创建用户和用户组文件
    echo root:x:0:0:root:/:/bin/sh > etc/passwd
    echo root:x:0: > etc/group
    
    #创建php程序运行的用户
    echo www:x:1001:1001:root:/:/bin/sh >> etc/passwd
    echo www:x:1001: >> etc/group
    
    #依赖库软链接
    ln -s lib lib64
    
    #工具软链接
    ln -s bin sbin
    
    #下载busybox,若网速慢可以用迅雷下载,然后复制到/sbin/busybox
    curl -o /sbin/busybox http://busybox.net/downloads/binaries/1.21.1/busybox-x86_64
    
    #加权限
    chmod +x /sbin/busybox
    
    #安装busybox
    cp /sbin/busybox bin
    busybox --install -s bin

    2、找依赖,假设我的php安装在/usr/local/php中,用交互模式进入容器

    运行命令查看依赖:

    ldd /usr/local/php/sbin/php-fpm
    ldd /usr/local/nginx/sbin/nginx

    会列出一大堆依赖库,并且这些库在不同的路径。由于用到busybox,那就将这些库复制到工作目录的根目录的lib即可。即/rootfs/lib/中,用这个工具找出来的是不完整的、还有c++运行库等等。

    我整理出来的完整依赖库是:

    ldd /usr/local/sbin/php-fpm 
        linux-vdso.so.1 (0x00007fff2cf62000)
        libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fd1cc915000)
        libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fd1cc6fe000)
        libedit.so.2 => /usr/lib/x86_64-linux-gnu/libedit.so.2 (0x00007fd1cc4c5000)
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fd1cc29b000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fd1cc093000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fd1cbe78000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd1cbb77000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd1cb973000)
        libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fd1cb75b000)
        libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007fd1cb3f4000)
        libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fd1cb193000)
        libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fd1cad96000)
        libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4 (0x00007fd1cab22000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd1ca777000)
        libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fd1ca567000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd1ca34a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fd1cd911000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fd1ca127000)
        libidn.so.11 => /usr/lib/x86_64-linux-gnu/libidn.so.11 (0x00007fd1c9ef3000)
        librtmp.so.1 => /usr/lib/x86_64-linux-gnu/librtmp.so.1 (0x00007fd1c9cd6000)
        libssh2.so.1 => /usr/lib/x86_64-linux-gnu/libssh2.so.1 (0x00007fd1c9aad000)
        libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007fd1c9862000)
        libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007fd1c958e000)
        libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007fd1c935d000)
        libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fd1c9159000)
        liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007fd1c8f4a000)
        libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007fd1c8cf8000)
        libgnutls-deb0.so.28 => /usr/lib/x86_64-linux-gnu/libgnutls-deb0.so.28 (0x00007fd1c89d9000)
        libhogweed.so.2 => /usr/lib/x86_64-linux-gnu/libhogweed.so.2 (0x00007fd1c87aa000)
        libnettle.so.4 => /usr/lib/x86_64-linux-gnu/libnettle.so.4 (0x00007fd1c8578000)
        libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fd1c82f5000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007fd1c8014000)
        libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007fd1c7e08000)
        libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007fd1c7c04000)
        libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007fd1c79e8000)
        libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007fd1c77a2000)
        libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007fd1c758e000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007fd1c737c000)
        libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007fd1c7173000)
    ldd /usr/local/nginx/sbin/nginx 
        linux-vdso.so.1 (0x00007fff3d5dd000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7f01b3f000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7f01922000)
        libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f7f016eb000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f7f0147d000)
        libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f7f0121c000)
        libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f7f00e1f000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f7f00c04000)
        libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f7f0089d000)
        libxslt.so.1 => /usr/lib/x86_64-linux-gnu/libxslt.so.1 (0x00007f7f0065d000)
        libexslt.so.0 => /usr/lib/x86_64-linux-gnu/libexslt.so.0 (0x00007f7f00447000)
        libperl.so.5.20 => /usr/lib/x86_64-linux-gnu/libperl.so.5.20 (0x00007f7f00086000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7effd85000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7eff9da000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f7f01d43000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f7eff7b7000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f7eff4d6000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f7eff2c4000)

    复制相应的.so包到rootfs目录下

    3、复制php程序

    #复制PHP程序
    cp -R /usr/local/php  /rootfs/usr/local/php
    cp -R /usr/local/nginx /rootfs/usr/local/nginx
    cp -R /usr/local/etc /rootfs/usr/local

    4、打包tar文件 

    tar cf /rootfs.tar .

    5、创建DockerFile

    #将rootfs.tar 复制出来,其实这个已经是一个基于busybox+nginx+php创建的小型系统了
    docker cp ngx01:/rootfs.tar .
    FROM scratch
    ADD rootfs.tar /
    WORKDIR /usr/local/nginx/ptweb
    RUN  apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 
         && apt-get update 
         && apt-get install supervisor -y 
         && apt-get install cron -y 
         && /bin/ln -svf  /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
         && echo 'Asia/Shanghai' >/etc/timezone 
         && ln -svf /usr/local/nginx/sbin/nginx /usr/sbin/nginx 
         && apt-get autoclean -y 
         && apt-get clean  -y 
         && apt-get autoremove -y
    EXPOSE 80
    ENTRYPOINT ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]

    然后build系统

    docker build -t ngx-php-supervisor:v01 .

    或者使用已经封装过的rootfs.tar:https://github.com/lvelvis/docker-debian-artifacts/releases/download/v1.1/rootfs.tar.xz

    
    
  • 相关阅读:
    旋转数组的最小数字
    二维数组中的查找问题--剑指offer面试题3
    百度软件开发实习生c++方向面经(一面)
    一些常考的智力题
    灵感闪现 篇 (一) 2d场景 3d 效果
    GameUnity 2.0 文档(四) 网格+四叉树 最优碰撞检测
    GameUnity 2.0 文档(三) 纸片人八方向
    GameUnity 2.0 文档(二) 纸片人系统
    GameUnity 2.0 文档(一) 事件机制
    GameUnity 2.0 发布倒计时
  • 原文地址:https://www.cnblogs.com/lvcisco/p/11271263.html
Copyright © 2020-2023  润新知