国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

將docker image編譯為獨(dú)立的便攜式二進(jìn)制文件

北月妖王

前段時間發(fā)現(xiàn)一個非常極客的項(xiàng)目:dockerc,一直沒時間去嘗試,今天試了一下果然可以正常運(yùn)行。

以下是我測試將 webman 鏡像編譯為二進(jìn)制文件的項(xiàng)目目錄。
可以不使用 opcache,我主要是為了測試把php代碼先編譯為 opcode,然后清空源文件。

webman
├── app
├── composer.json
├── composer.lock
├── config
├── Dockerfile
├── LICENSE
├── php
├── php.ini
├── process
├── public
├── README.md
├── runtime
├── start.php
├── support
├── vendor
├── windows.bat
└── windows.php

Dockerfile 內(nèi)容:

FROM alpine:latest

RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories

RUN apk update && \
    apk --no-cache upgrade && \
    rm -rf /var/cache/apk/* && \
    mkdir -p /app/opcache

WORKDIR /app

COPY ./ /app/
# 直接使用 PHP 靜態(tài)二進(jìn)制文件
RUN mv /app/php /usr/local/bin/php && chmod +x /usr/local/bin/php
# 將 PHP 代碼編譯為 opcode
RUN find /app -type f -name "*.php" -exec php -c /app/php.ini -l {} \;
# 清空 PHP 源文件
RUN find /app -type f -name "*.php" -exec sh -c 'echo -n > {}' \;

EXPOSE 8787

CMD ["php", "-c", "php.ini", "start.php", "start"]

php.ini 內(nèi)容:

date.timezone="UTC"
opcache.enable = 1
opcache.enable_cli = 1
opcache.save_comments = 0
opcache.file_update_protection = 0
opcache.validate_timestamps = 0
opcache.validate_permission = 0
opcache.validate_root = 0
opcache.file_cache = /app/opcache
opcache.file_cache_only = 1
opcache.file_cache_consistency_checks = 0
opcache.max_file_size = 0
opcache.file_update_protection = 0

步驟如下:

  1. 先構(gòu)建 webman 鏡像
    docker build . -t fuzqing/webman:8.3.6 --load
  2. 下載 dockerc
    wget https://github.com/NilsIrl/dockerc/releases/download/v0.2.1/dockerc
    chmod +x dockerc
  3. 使用 dockerc 將鏡像導(dǎo)出為二進(jìn)制文件
    ./dockerc --image docker-daemon:fuzqing/webman:8.3.6 --output webman.bin
  4. 然后就可以執(zhí)行了
    ./webman.bin
  5. 驗(yàn)證
    可以將 webman.bin 上傳到其它 x86_64 架構(gòu)的 Linux 機(jī)器上測試,證明以下機(jī)器沒有安裝dockerphp,并且能成功運(yùn)行。
    截圖

注意:為了提高兼容性,需要先將 docker 配置為 vfs 存儲驅(qū)動。
docker 文檔地址:https://docs.docker.com/storage/storagedriver/vfs-driver/

2302 3 5
3個評論

damao

好高級的玩法,可以用來做加密么?就是直接分發(fā)二進(jìn)制文件,對方拿不到源碼

  • 北月妖王 2024-05-02

    本質(zhì)上來說還是會進(jìn)行解壓之后再運(yùn)行的,可以獲取到項(xiàng)目完整的 opcode,但是如果對方?jīng)]有能力將 opcode 反編譯為 PHP 源碼,那么本方案也可以用來“加密”了,加解密的對抗無非是成本問題。
    另外,你完全可以不采用 PHP 二進(jìn)制文件,我只是為了測試能否正常編譯和執(zhí)行,這就是一個 Docker Image,完全可以另外安裝你喜歡的加密擴(kuò)展,在 Dockerfile 里面對 PHP 源碼進(jìn)行混淆和加密處理,最后編譯為 opcode 和清空源文件,而不影響本地的源代碼。
    借助本思路,如果不喜歡使用 dockerc 導(dǎo)出為二進(jìn)制文件,你也可以使用 Docker Image 進(jìn)行交付,也就是說只少了 dockerc 導(dǎo)出步驟,部署時候采用 docker 的方式。

  • Tinywan 2024-05-02

    為什么會有這個錯誤:mksquashfs: dl-call-libc-early-init.c:37: _dl_call_libc_early_init: Assertionsym != NULL' failed`

  • 北月妖王 2024-05-02

    哪個步驟出現(xiàn)的?導(dǎo)出階段還是運(yùn)行階段?

  • 北月妖王 2024-05-02

    我使用的Debian和Ubuntu,導(dǎo)出階段出問題估計是dockerc對某些系統(tǒng)不是很兼容

fushutech

牛*

  • fushutech 2024-05-20

    測試成功,saas私有化部署可以用起來

  • fushutech 2024-05-20

    webman提供的靜態(tài)php沒有opcache擴(kuò)展,會導(dǎo)致編譯opcode失敗,需要在靜態(tài)php中加入opcache。

  • 北月妖王 2024-05-20

    你也可以不用靜態(tài)PHP,或者自己編譯一個。

  • fushutech 2024-05-20

    我重新編譯了一個靜態(tài)php,把opcache加上了,測試通過。

  • wangjw302 2024-05-20

    這個時候可以,后續(xù)可以給客戶做私有化部署了??

ikun

這個可以

  • 暫無評論

北月妖王

3620
積分
0
獲贊數(shù)
0
粉絲數(shù)
2021-12-01 加入
??