成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

(學(xué)習(xí)到實(shí)踐)三、docker自定義php鏡像

harryhappy / 1758人閱讀

摘要:前言制作以官方的版為基礎(chǔ)代碼,添加自定義插件。分步制作由于之前使用官方時(shí)總是遇到各種錯(cuò)誤,為了提高完成效率,分步制作鏡像。這里鏡像提交達(dá)到,官方的是,排除的安裝,還有不少依賴有待簡(jiǎn)化,之后測(cè)試這個(gè)環(huán)節(jié)還會(huì)修改完善。

前言

制作以官方的alpine3.9版為基礎(chǔ)代碼,添加自定義插件。

1.編輯原則

使用官方Dockerfile,去除認(rèn)證、校驗(yàn)方面的東西,合并RUN代碼減少不必要的層數(shù),啟動(dòng)腳本的替換。

2.分步制作

由于之前使用官方時(shí)總是遇到各種錯(cuò)誤,為了提高完成效率,分步制作鏡像。

a.純php帶各種中介軟件和dev

代碼:

# php7.3.5; Feb 7, 2019 link: https://github.com/docker-library/php/blob/master/7.3/alpine3.9/fpm/Dockerfile
# Base images 基礎(chǔ)鏡像+阿里源
FROM alpine:3.9

#MAINTAINER 維護(hù)者信息
MAINTAINER [email protected]

# dependencies required for running "phpize"
ENV PHP_VERSION 7.3.6
ENV PHP_URL https://secure.php.net/get/php-$PHP_VERSION.tar.xz/from/this/mirror
ENV PHPIZE_DEPS 
        autoconf 
        dpkg-dev dpkg 
        file 
        g++ 
        gcc 
        libc-dev 
        make 
        pkgconf 
        re2c
ENV PHPIZE_DEVS 
        argon2-dev 
        coreutils 
        curl-dev 
        libedit-dev 
        libsodium-dev 
        libxml2-dev 
        openssl-dev 
        sqlite-dev 
        libjpeg-turbo-dev 
        libpng-dev 
        gd-dev 
        gettext-dev 
        freetype-dev 
        libxpm-dev 
        libevent-dev

RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories 
    && apk update 
    && addgroup -g 82 -S www-data 
    && adduser -u 82 -D -S -G www-data www-data 
    && mkdir -p "/usr/local/etc/php/conf.d" && mkdir -p "/var/www/html" 
    && chown www-data:www-data /var/www/html && chmod 777 /var/www/html 
    && apk add --no-cache
        curl 
        tar 
        xz 
        openssl 
        wget 

COPY php.tar.xz php.tar.xz
RUN set -eux; 
        apk add $PHPIZE_DEPS $PHPIZE_DEVS 
            
        # && wget -O php.tar.xz "$PHP_URL" 
        && tar -Jxf php.tar.xz && cd php-$PHP_VERSION && ./configure 
        --prefix="/usr/local/php" 
        --with-config-file-path="/usr/local/php/etc" 
        --with-config-file-scan-dir="/usr/local/php/etc/conf.d" 
        
        --enable-option-checking=fatal 
        --with-mhash 
        
        --enable-ftp 
        --enable-exif 
        --enable-mbregex 
        --enable-mbstring 
        --enable-mysqlnd 
        --enable-sysvmsg 
        --enable-opcache 
        --enable-pcntl 
        --enable-sockets 
        --enable-sysvsem 
        --enable-xml 
        --with-curl 
        --with-libedit 
        --with-openssl 
        --with-zlib 
        --with-pcre-regex 
        --with-pear 
        --with-libxml-dir=/usr 
        --with-jpeg-dir 
        --with-freetype-dir 
        --with-xpm-dir 
        --with-png-dir 
        --with-gettext 
        --with-mhash 
        --with-iconv 
        --disable-fileinfo 
        
        --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi 
    && make -j "$(nproc)" 
    && find -type f -name "*.a" -delete 
    && make install 
#    && make clean 
    && rm -rf /tmp/pear ~/.pearrc 
    && cd ../ && rm -rf php-$PHP_VERSION.tar.xz php-$PHP_VERSION
b.測(cè)試準(zhǔn)備

build上面鏡像,運(yùn)行所得容器,準(zhǔn)備添加擴(kuò)展。容器啟動(dòng)時(shí)所需配置文件/usr/local/php/etc/文件夾需要準(zhǔn)備一個(gè)配置共享,這里取上面官方的配置稍加修改,并共享出來(lái)供后續(xù)安裝使用:

[]:~/tmp/dk# tree -a php
php
├── config
│?? ├── pear.conf
│?? ├── php-fpm.conf
│?? ├── php-fpm.conf.default
│?? ├── php-fpm.d
│?? │?? ├── www.conf
│?? │?? └── www.conf.default
│?? ├── php.ini
│?? └── start.sh
├── Dockerfile
└── php.tar.xz 

以上配置修改成常用配置。

c.添加擴(kuò)展,問(wèn)題分解

首先考慮官方pecl安裝插件,這里目標(biāo):

swoole-inotify-redis-uuid-memcached
#需要自行下載類庫(kù)的插件或交互式安裝的,使用多帶帶下載源碼編譯的方式。

下面是在運(yùn)行測(cè)試shell安裝,并轉(zhuǎn)換到Dockerfile的代碼的結(jié)果。其中在安裝memcached(相當(dāng)于是memcache的新版、強(qiáng)化版)時(shí)遇到問(wèn)題,官方memcached很快安裝成功但php擴(kuò)展難裝:多次出現(xiàn)編譯錯(cuò)誤,php的memcached報(bào)缺libmemcached,而后者總是無(wú)法通過(guò)
參考《錯(cuò)誤解決》,使用其中的參考自:https://bugs.launchpad.net/li...

Bug Description
When building with latest GCC version 7
----------

clients/memflush.cc:42:22: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
   if (opt_servers == false)
                      ^~~~~
clients/memflush.cc:51:24: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
     if (opt_servers == false)
                        ^~~~~
Trivial fix:
http://pkgs.fedoraproject.org/cgit/rpms/libmemcached.git/plain/libmemcached-build.patch
#打補(bǔ)丁,興奮半天沒有效果
http://pkgs.fedoraproject.org/cgit/rpms/libmemcached.git/plain/libmemcached-build.patch
patch -p0 < libmemcached-build.patch

最終使用 apk add libmemcached-dev 安裝成功!?。。╝pk add libmemcached,或search的各版本都不行,只要一個(gè)dev)

d.擴(kuò)展添加的結(jié)果初稿
#測(cè)試

#swoole 需要對(duì)話參數(shù),所以自定義安裝
RUN set -ex && 
    mkdir -p ~/build/swoole && 
    cd ~/build/swoole && 
    wget -O swoole.tar.gz https://github.com/swoole/swoole-src/archive/master.tar.gz && 
    tar zxvf swoole.tar.gz --strip-components 1 && 
    /usr/local/php/bin/phpize && 
    ./configure --with-php-config=/usr/local/php/bin/php-config 
    --enable-coroutine 
    --enable-openssl  
    --enable-http2  
    --enable-async-redis 
    --enable-sockets 
    --enable-mysqlnd && 
    make && make install && 
    cd ../ && rm -rf swoole*

#inotify
RUN set -ex && 
    mkdir -p ~/build/inotify && 
    cd ~/build/inotify && 
    wget -O inotify.tgz https://pecl.php.net/get/inotify-2.0.0.tgz && 
    tar -zxf inotify.tgz --strip-components 1 && 
    /usr/local/php/bin/phpize && 
    ./configure --with-php-config=/usr/local/php/bin/php-config --enable-inotify && 
    make && make install && 
    cd .. && rm -rf inotify*

#redis
RUN set -ex && 
    mkdir -p ~/build/redis && 
    cd ~/build/redis && 
    wget -O redis.tgz https://pecl.php.net/get/redis-4.3.0.tgz && 
    tar -zxf redis.tgz --strip-components 1 && 
    /usr/local/php/bin/phpize && 
    ./configure --with-php-config=/usr/local/php/bin/php-config --enable-redis && 
    make && make install && 
    cd .. && rm -rf redis*

#uuid
RUN set -ex && 
    mkdir -p ~/build/libuuid && 
    cd ~/build/libuuid && 
    wget -O libuuid.tgz "http://nchc.dl.sourceforge.net/project/libuuid/libuuid-1.0.3.tar.gz" && 
    tar -zxf libuuid.tgz --strip-components 1 && 
    ./configure --prefix=/usr && 
    make && make install && 
    cd ../ && rm -rf libuuid* && 
    
    wget -O uuid.tgz http://pecl.php.net/get/uuid-1.0.4.tgz && 
    tar zxf uuid.tgz --strip-components 1 && 
    /usr/local/php/bin/phpize && 
    ./configure --with-php-config=/usr/local/php/bin/php-config && 
    make && make install && 
    cd ../ && rm -rf uuid*

#memcached
RUN set -ex && 
    #測(cè)試命令:/usr/bin/memcached -d -m 1024 -u root -l 0.0.0.0 -p 11211 -c 1024 -P /tmp/memcached.pid 啟動(dòng)正常
    mkdir -p ~/build/memcached && 
    cd ~/build/memcached && 
    wget -O memcached.tgz "http://memcached.org/files/memcached-1.5.16.tar.gz" && 
    tar -zxf memcached.tgz --strip-components 1 && 
    ./configure --with-event-libevent-dir=/usr --prefix=/usr && 
    make && make install && 
    cd ../ && rm -rf memcached* && 
    
    #需要libmemcached
    apk add libmemcached-dev && 
    
    mkdir -p ~/build/memcached_p && 
    cd ~/build/memcached_p && 
    wget -O memcached.tgz "https://pecl.php.net/get/memcached-3.1.3.tgz" && 
    tar -zxf memcached.tgz --strip-components 1 && 
    /usr/local/php/bin/phpize && 
    ./configure --with-php-config=/usr/local/php/bin/php-config && 
    make && make install && 
    cd ../ && rm -rf memcached_p*

#編譯使用,運(yùn)行時(shí)共享 -v /your_real_path/ /usr/local/php/etc/
COPY config /usr/local/php/etc
VOLUME ["/usr/local/php/etc","/var/www/html"]

RUN set -ex 
    && /usr/local/php/bin/pecl channel-update pecl.php.net 
    && /usr/local/php/bin/pecl install igbinary event 
    && /usr/local/php/bin/php -m

d.腳本結(jié)尾設(shè)置

CMD ["/usr/local/php/etc/start.sh"]
3.分步提交到云 a.提交代碼
[]:~/tmp/dk/php# docker push cffycls/php7:v0.9
The push refers to repository [docker.io/cffycls/php7]
... ...

等待上傳完成。
這里鏡像提交達(dá)到 519M,官方的是 367M,排除memcached的安裝,還有不少依賴有待簡(jiǎn)化,之后測(cè)試這個(gè)環(huán)節(jié)還會(huì)修改完善。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31804.html

相關(guān)文章

  • Dockerfile 與 Compose 環(huán)境搭建學(xué)習(xí)筆記(一)

    摘要:的主要作用是自己根據(jù)基礎(chǔ)鏡像,重新定制鏡像,而不是直接從官方倉(cāng)庫(kù)拿現(xiàn)成的使用。以接下來(lái)要構(gòu)建的環(huán)境來(lái)說(shuō)明下,下面我將要搭建一個(gè)的開發(fā)環(huán)境,需要進(jìn)行配合。它的主要作用是持久化數(shù)據(jù),避免容器銷毀后內(nèi)部數(shù)據(jù)丟失暴露到宿主機(jī)的端口。 以前一直使用 Vagrant 作為自己的開發(fā)環(huán)境,并且在上家公司也推行大家采用 Vagrant 作為開發(fā)環(huán)境,保障公司使用的是同一套開發(fā)環(huán)境。隨著docker的流...

    TZLLOG 評(píng)論0 收藏0
  • Dockerfile 與 Compose 環(huán)境搭建學(xué)習(xí)筆記(一)

    摘要:的主要作用是自己根據(jù)基礎(chǔ)鏡像,重新定制鏡像,而不是直接從官方倉(cāng)庫(kù)拿現(xiàn)成的使用。以接下來(lái)要構(gòu)建的環(huán)境來(lái)說(shuō)明下,下面我將要搭建一個(gè)的開發(fā)環(huán)境,需要進(jìn)行配合。它的主要作用是持久化數(shù)據(jù),避免容器銷毀后內(nèi)部數(shù)據(jù)丟失暴露到宿主機(jī)的端口。 以前一直使用 Vagrant 作為自己的開發(fā)環(huán)境,并且在上家公司也推行大家采用 Vagrant 作為開發(fā)環(huán)境,保障公司使用的是同一套開發(fā)環(huán)境。隨著docker的流...

    ityouknow 評(píng)論0 收藏0
  • Docker 及 GitLab CI 在前端工作流上的實(shí)踐分享(一)

    摘要:如今前端工程越來(lái)越復(fù)雜,打造一個(gè)好用的工作流也顯得越來(lái)越重要。如果用戶啟動(dòng)容器時(shí)指定了運(yùn)行的命令,則會(huì)覆蓋掉指定的命令。個(gè)人感覺在項(xiàng)目多協(xié)作人數(shù)多的情況下,還是很方便的。 showImg(https://segmentfault.com/img/remote/1460000011553749?w=1100&h=225); 如今前端工程越來(lái)越復(fù)雜,打造一個(gè)好用的工作流也顯得越來(lái)越重要。本...

    wyk1184 評(píng)論0 收藏0
  • Docker 及 GitLab CI 在前端工作流上的實(shí)踐分享(一)

    摘要:如今前端工程越來(lái)越復(fù)雜,打造一個(gè)好用的工作流也顯得越來(lái)越重要。如果用戶啟動(dòng)容器時(shí)指定了運(yùn)行的命令,則會(huì)覆蓋掉指定的命令。個(gè)人感覺在項(xiàng)目多協(xié)作人數(shù)多的情況下,還是很方便的。 showImg(https://segmentfault.com/img/remote/1460000011553749?w=1100&h=225); 如今前端工程越來(lái)越復(fù)雜,打造一個(gè)好用的工作流也顯得越來(lái)越重要。本...

    godruoyi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<