docker php環境容器大瘦身
阿新 • • 發佈:2019-02-09
本人用lnmp1.2一鍵安裝的環境抽出精簡版的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
會列出一大堆依賴庫,並且這些庫在不同的路徑。由於用到busybox,那就將這些庫複製到工作目錄的根目錄的lib即可。即/rootfs/lib/中,用這個工具找出來的是不完整的、還有c++執行庫等等。
我整理出來的完整依賴庫是:
ld-linux-x86-64.so.2
libbz2.so.1
libc.so.6
libcom_err.so.2
libcrypt.so.1
libcrypto.so.10
libcurl.so.4
libdl.so.2
libfreebl3.so
libfreetype.so.6
libgcc_s.so.1
libgssapi_krb5.so.2
libiconv.so.2
libidn.so.11
libjpeg.so.62
libk5crypto.so.3
libkeyutils.so.1
libkrb5.so.3
libkrb5support.so.0
liblber-2.4.so.2
libldap-2.4.so.2
liblzma.so.5
libm.so.6
libmcrypt.so.4
libnsl.so.1
libnspr4.so
libnss_files.so.2
libnss3.so
libnssutil3.so
libpcre.so.1
libplc4.so
libplds4.so
libpng15.so.15
libpthread.so.0
libresolv.so.2
librt.so.1
libsasl2.so.3
libselinux.so.1
libsmime3.so
libssh2.so.1
libssl.so.10
libssl3.so
libstdc++.so.6
libxml2.so.2
libz.so.1
當然根據你php安裝的擴充套件而定,但是有些決不能缺少,
複製到rootfs/lib/
3、複製php程式
#複製PHP程式
cp -R /usr/local/php /rootfs/usr/local/php
#複製啟動指令碼
cp /etc/init.d/php-fpm /rootfs/php-fpm
將 /usr/local/php/php-fpm.conf 改為以下配置,守護程序方式執行改為no,不然 到時候只能用互動模式 docker run -it 那種。
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
daemonize = no #這裡重要
[www]
listen = 0.0.0.0:9000 #這裡也重要
listen.backlog = -1
#listen.allowed_clients = any
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log
4、打包tar檔案
tar cf /rootfs.tar .
5、按ctrl+p+q使php容器後臺執行,找個地方建立工作目錄,並且寫DockerFile。
#將rootfs.tar 複製出來,其實這個已經是一個基於busybox+php建立的小型系統了
docker cp technofiend/php:/rootfs.tar .
寫DockerFile
FROM scratch
MAINTAINER Technofiend <2281551151@qq.com>
ADD rootfs.tar /
WORKDIR /home
EXPOSE 9000
ENTRYPOINT ["/php-fpm", "start"]
然後build系統
docker build -t technofiend/miniphp .
再看看體積,瘦了很多。比還沒用過的centos系統還要少。
要是匯出來再壓縮的話,就只有50M左右,真是快速部署必不可少的玩意啊!
注意:體積少的映象雖然可以減少了網路傳輸的時間,達到快速部署的目的,但體積少的容器某些功能例如busybox提供的,可能沒有完整版的效能好。所以,還是看實際用途吧!
別忘了,要定期進行安全升級,不然很可能就會有安全隱患。