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/nginxcp -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



原文地址:https://www.cnblogs.com/lvcisco/p/11271263.html

时间: 2024-10-08 22:42:57

docker nginx-php容器镜像瘦身优化的相关文章

安卓-APP瘦身优化

APP优化 APP瘦身 #1. 图片的优化 ☆☆☆☆☆ s1.png图片压缩裁剪,打包APP后资源文件分50k+大小图片重点优化,10k+图片选择优化: s2.图片资源格式处理(大小):.png > .jpg > .webp,条件合适选择应选择.webp: s3.使用矢量图: #2.开启混淆与压缩 ☆☆☆☆☆ s1.gradle shrinkResources设置为true,minifyEnabled设置为true: s2.gradle minifyEnabled可单独开启,shrinkRes

使用Dockerfile创建nginx服务容器镜像

1.下载nginx配置文件 wget http://www.apelearn.com/study_v2/.nginx_conf 2. vim Dockerfile #本地有centos的镜像,可以直接指定镜像名称:如果需要从docker官网下载其他版本镜像,请自行修改版本号 FROM centos:6.8 MAINTAINER wyman [email protected] #根据实际需要选择安装 RUN yum install -y pcre-devel wget net-tools gcc

Android性能优化系列之apk瘦身

Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中,他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率会越低(因为竞品中,用户有更多机会选择那个体验最好,功能最多,性能最好,包最小的),所以apk的瘦身优化也很重要,本篇博客将讲述apk瘦身的相关内容. 包体分析 在Android Studio工具栏里,打开build–>Analyze APK, 选择要分析的APK包 可以看到占用空间的主要是代码.图

Docker之Alpine制作镜像且上传至阿里云

目的: Alpine制作jdk镜像 Alpine制作jre镜像(瘦身) Docker镜像上传至阿里云 Alpine制作jdk镜像 alpine Linux简介 Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBox以减少系统的体积和运行时的资源消耗. alpine Linux优点 1.小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB: 2.安全:面向安全的

12、《每天5分钟玩转Docker容器技术》学习-Docker命令之容器操作命令

a) Docker ps 命令 docker ps : 列出容器 docker ps [OPTIONS] -a :显示所有的容器,包括未运行的. -f :根据条件过滤显示的内容. --format :指定返回值的模板文件. -l :显示最近创建的容器. -n :列出最近创建的n个容器. --no-trunc :不截断输出. -q :静默模式,只显示容器编号. -s :显示总的文件大小. l 实例 列出所有在运行的容器信息. 列出最近创建的5个容器信息. 列出所有创建的容器ID. b) Docke

asp.netcore 3.0 Docker Nginx(震惊,原来docker是这样的!)

引言 Docker发布于2013年,Docker是dotCloud公司创始人在法国期间发起的一个公司内部项目,他是dotCloud多年云技术的一个革新.Docker在容器基础上进行了一步的封装,从网络进程到网络互连到进程隔离极大的减少了容器的创建和维护,Docker比虚拟机技术更加便捷. Docker是个跨时代的开源项目,他释放了虚拟化的威力,降低了云计算的开发成本,可以让线上线下的部署的成本变低,无论是开发人员还是运维等信息人员都有必要去了解和掌握Docker,减少不必要的时间成本,远离它(9

Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离

Docker的安装 一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 二.安装Docker 1.检查内核版本 # uname -r      查看当前linux得版本信息 Docker要求CentOS7最低内核版本为3.1版本 2. 关闭防火墙和selinux # systemctl stop firewalld #

Docker镜像构建的优化总结

Docker镜像构建的优化总结 随着我们对docker镜像的持续使用,在此过程中如果不加以注意并且优化,镜像的体积会越来越多.很多时候我们在使用docker部署应用时,会发现镜像的体积至少有1G以上.镜像体积的增大,不单单会增加磁盘资源与网络资源的开销,也会影响应用的部署效率,使得应用的部署时间会越来越长.因此我们需要减少部署镜像的体积以加快部署效率,降低资源的开销.而对于镜像的优化,可以通过对dockerfile的优化来实现. 一.镜像最小化 1.选择最精简的基础镜像 选择体积最小的基础镜像可

Docker构建nginx+uwsgi+flask镜像(二)

Dockerfile搭建环境并打包应用 在上一章Docker构建nginx+uwsgi+flask镜像(一)的学习中,我们学会用命令行一句一句在alpine环境中搭建nginx+uwsgi+flask服务,但这体现不了Docker为我们带来的便利,而本章,我们将通过Dockerfile来制作基础镜像和打包应用,因此会有两个Dockerfile文件. 我们先来写第一个Dockerfile文件,这个文件负责搭建运行环境,运行环境需要包括:nginx.uwsgi.Python3: # 配置基础镜像 F