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

資訊專欄INFORMATION COLUMN

如何構(gòu)建一個(gè)php7-alpine的docker鏡像

anonymoussf / 3334人閱讀

摘要:我花了大概一周的時(shí)間進(jìn)行了各種踩坑及實(shí)驗(yàn),最終得出了一份可以使用的及內(nèi)含如下支持可選,如應(yīng)用,及的配置會(huì)有所變化分為兩部分,一部分為服務(wù),一部分為下可選先貼代碼吧版本,如需安裝則取消注釋基礎(chǔ)依賴

我花了大概一周的時(shí)間進(jìn)行了各種踩坑及實(shí)驗(yàn),最終得出了一份可以使用的dockerfile及compose

內(nèi)含如下支持

php7

mysql_pdo

postgre_pdo

phpredis

swoole(可選,如應(yīng)用swoole,dockerfile及nginx的配置會(huì)有所變化)

dockerfile分為兩部分,一部分為php服務(wù),一部分為nginx(swoole下可選)

先貼代碼吧

### php7 ###

FROM php:7.2-rc-fpm-alpine3.6

ENV TIMEZONE Asia/Shanghai
ENV PHP_MEMORY_LIMIT 512M
ENV MAX_UPLOAD 50M
ENV PHP_MAX_FILE_UPLOAD 200
ENV PHP_MAX_POST 100M
## swoole版本,如需安裝swoole則取消注釋
#ENV PHP_EXT_SWOOLE=swoole-2.0.6
ENV PHP_REDIS=3.1.4
#基礎(chǔ)依賴
RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g" /etc/apk/repositories && 
  apk update && 
  apk add tzdata curl && 
  cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && 
  echo "${TIMEZONE}" > /etc/timezone && 
  apk --update --repository=http://dl-4.alpinelinux.org/alpine/edge/testing add 
    php7-common php7-intl php7-gd php7-mcrypt php7-openssl 
    php7-gmp php7-json php7-dom php7-pdo php7-zip 
    php7-zlib php7-mysqli php7-bcmath php7-pdo_mysql php7-pgsql 
    php7-pdo_pgsql php7-gettext php7-xmlreaderhp7-xmlrpc 
    php7-bz2 php7-iconv php7-curl php7-ctype php7-fpm 
    php7-mbstring php7-session php7-phar curl curl-dev postgresql-dev 
    ## 如果使用swoole  需要取消下行注釋
   # hiredis-dev libmcrypt-dev gmp-dev icu-dev linux-headers musl --virtual .phpize-deps $PHPIZE_DEPS 
    tzdata && 
    php -r "copy("https://getcomposer.org/installer", "composer-setup.php");" && 
    php composer-setup.php && 
    php -r "unlink("composer-setup.php");" && 
    mv composer.phar /usr/local/bin/composer && 
    composer self-update && 
    sed -i -e "s/;daemonizes*=s*yes/daemonize = no/g" /etc/php7/php-fpm.conf && 
    sed -i -e "s/listens*=s*127.0.0.1:9000/listen = 9000/g" /etc/php7/php-fpm.d/www.conf && 
    sed -i "s|;date.timezone =.*|date.timezone = ${TIMEZONE}|" /etc/php7/php.ini && 
    sed -i "s|memory_limit =.*|memory_limit = ${PHP_MEMORY_LIMIT}|" /etc/php7/php.ini && 
    sed -i "s|upload_max_filesize =.*|upload_max_filesize = ${MAX_UPLOAD}|" /etc/php7/php.ini && 
    sed -i "s|max_file_uploads =.*|max_file_uploads = ${PHP_MAX_FILE_UPLOAD}|" /etc/php7/php.ini && 
    sed -i "s|post_max_size =.*|max_file_uploads = ${PHP_MAX_POST}|" /etc/php7/php.ini && 
    sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php7/php.ini && 
    sed -i "s/;extension=php_pgsql.dll/extension=php_pgsql.dll/" /etc/php7/php.ini && 
    sed -i "s/;extension=php_pdo_pgsql.dll/extension=php_pdo_pgsql.dll/" /etc/php7/php.ini && 
    mkdir -p /usr/src/php/ext/redis && 
    curl -L https://github.com/phpredis/phpredis/archive/$PHP_REDIS.tar.gz | tar xvz -C /usr/src/php/ext/redis --strip 1 && 
    echo "redis" >> /usr/src/php-available-exts && 
    docker-php-ext-install redis pgsql pdo pdo_mysql pdo_pgsql && 
      rm -rf /var/cache/apk/*
# 如需安裝swoole,取消以下注釋     
#RUN 
#    cd /tmp 
#    && pecl download $PHP_EXT_SWOOLE 
#    && mkdir -p /tmp/$PHP_EXT_SWOOLE 
#    && tar -xf ${PHP_EXT_SWOOLE}.tgz -C /tmp/$PHP_EXT_SWOOLE --strip-components=1 
#    && docker-php-ext-configure /tmp/$PHP_EXT_SWOOLE --enable-async-redis --enable-openssl --enable-sockets=/usr/local/include/php/ext/sockets 
#    && docker-php-ext-install /tmp/$PHP_EXT_SWOOLE 
#    && rm -rf /tmp/${PHP_EXT_SWOOLE}*

WORKDIR /www

# 放入自己需要的代碼
#COPY  . /www
# 安裝composer依賴
#RUN composer install

# php-fpm使用以下配置
EXPOSE 9000
CMD ["php-fpm"]
# swoole 使用以下配置
EXPOSE 9501
# 啟動(dòng)swoole server
CMD ["php","src/server","start"]

## swoole可以不依賴nginx 所以我多帶帶貼出php-fpm的nginx

nginx-dockerfile:

from nginx:1.13.6-alpine
ENV TIME_ZONE Asiz/Shanghai
RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g" /etc/apk/repositories && 
    apk update && 
    apk add --no-cache tzdata  &&  
   echo "${TIME_ZONE}" > /etc/timezone &&  
   ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime 
COPY default.conf /etc/nginx/conf.d
EXPOSE 80
STOPSIGNAL SIGTERM
CMD ["nginx", "-g", "daemon off;"]

nginx_php-fpm:default.conf:

server {
    listen       80;
    server_name  *.yourserver.com;
    location / {
          autoindex on; 
          if ($request_filename !~* /(index.php|assets|uploads|phpinfo.php)) 
            {   
               rewrite ^/(.*)$ /index.php/$1 last;                                                                                                 
            }                                                                                      
    }
    location ~ .php(/|$) {
        fastcgi_split_path_info ^(.+?.php)(/.*)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
    } 
}

compose:

* swoole的編排模板很容易寫 我就不在這里貼出了

version: "2"
services:
  php-fpm:
    image: "php-fpm"
    restart: always
    #日志系統(tǒng),可不寫
    #logging:
    #  driver: fluentd
    #  options:
    #    fluentd-address: "logaddr:24224"
    #    tag: "docker/{{.Name}}/{{.ID}}/{{.ImageName}}"
  php-nginx:
    image: "php-nginx"
    depends_on:
    #這幾個(gè)是轉(zhuǎn)義字符 但是不知道為什么就顯示出來(lái)了,使用的時(shí)候自己去掉一下
      - php-fpm
    ports:
      - "80:80"
    links:
      - php-fpm
    restart: always
    #日志系統(tǒng),可不寫
    #logging:
    #  driver: fluentd
    #  options:
    #    fluentd-address: "logaddr:24224"
    #    tag: "docker/{{.Name}}/{{.ID}}/{{.ImageName}}"
    

我所做的是對(duì)php及nginx進(jìn)行解耦
如果集群內(nèi)有多個(gè)php服務(wù)需要互相訪問(wèn),
因?yàn)閏ompose不允許兩個(gè)服務(wù)互相l(xiāng)ink
所以需要?jiǎng)?chuàng)建一個(gè)network在network中借助nginx進(jìn)行互相訪問(wèn)
但是目前只有v3版的compose支持本功能,很多舊集群都無(wú)法正常支持本功能,所以我就不貼出代碼了
編輯完成后,即可通過(guò)80端口訪問(wèn)index.php了

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

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

相關(guān)文章

  • Working with Docker Hub

    摘要:到目前為止我們已經(jīng)學(xué)習(xí)了如何使用命令行在主機(jī)上運(yùn)行。是由公司維護(hù)的公共注冊(cè)倉(cāng)庫(kù)。其中有兩個(gè)結(jié)果,。第二個(gè)表示它來(lái)自于一位叫的用戶的倉(cāng)庫(kù)。第一個(gè)結(jié)果沒(méi)有顯示列出倉(cāng)庫(kù)則意味著它是受信任的官方頂級(jí)名稱空間存儲(chǔ)庫(kù)。將倉(cāng)庫(kù)名和鏡像名分割開(kāi)。 Working with Docker Hub 到目前為止我們已經(jīng)學(xué)習(xí)了如何使用命令行在主機(jī)上運(yùn)行Docker。你已經(jīng)學(xué)習(xí)了如何下載鏡像,如何從已經(jīng)存在的鏡...

    Charles 評(píng)論0 收藏0
  • [Docker 官方文檔] 理解 Docker

    摘要:將一個(gè)輕量級(jí)的容器虛擬化平臺(tái)和一組標(biāo)準(zhǔn)工作流程工具進(jìn)行集成,來(lái)幫助你方便地管理和部署應(yīng)用。主要包括哪些組件主要包括兩個(gè)組件開(kāi)源的容器虛擬化平臺(tái)用于分享和管理容器的軟件即服務(wù)平臺(tái)。 【編者的話】本文來(lái)自 Docker 的官方文檔,詳細(xì)介紹了 Docker 的體系結(jié)構(gòu)、重要概念、內(nèi)部工作機(jī)理等內(nèi)容,推薦不了解 Docker 內(nèi)部原理的同學(xué)閱讀。 什么是 Docker? Docker 是...

    cncoder 評(píng)論0 收藏0
  • 程序員筆記——如何編寫優(yōu)雅Dockerfile

    摘要:導(dǎo)讀要從容器化開(kāi)始,而容器又需要從開(kāi)始,本文將介紹如何寫出一個(gè)優(yōu)雅的文件。只要記住以上三點(diǎn)就能寫出不錯(cuò)的。執(zhí)行完成項(xiàng)目的構(gòu)建。 導(dǎo)讀 Kubernetes要從容器化開(kāi)始,而容器又需要從Dockerfile開(kāi)始,本文將介紹如何寫出一個(gè)優(yōu)雅的Dockerfile文件。 文章主要內(nèi)容包括: Docker容器 Dockerfile 使用多階構(gòu)建 感謝公司提供大量機(jī)器資源及時(shí)間讓我們可以實(shí)踐...

    曹金海 評(píng)論0 收藏0
  • 如何使用GitLab和Rancher構(gòu)建CI/CD流水線 – Part 2

    摘要:第一部分的內(nèi)容介紹了如何部署配置和確保在的運(yùn)行。這一部分中,我們將介紹如何使用構(gòu)建容器,以及如何使用容器配置項(xiàng)目。除此之外,我們還將涉及如何用建立容器并部署到上。 這是我們使用GitLab和Rancher構(gòu)建CI/CD流水線系列教程的第二部分。第一部分的內(nèi)容介紹了如何部署、配置和確保GitLab在Rancher的運(yùn)行。這一部分中,我們將介紹如何使用GitLab CI Multi-Run...

    maybe_009 評(píng)論0 收藏0
  • 都9102年了,還不會(huì)Docker?10分鐘帶你從入門操作到實(shí)戰(zhàn)上手

    摘要:聯(lián)調(diào)測(cè)試,無(wú)需依賴他人。針對(duì)以上問(wèn)題,有兩種解決方法,一個(gè)是自己搭建私有服務(wù),另一個(gè)是用云服務(wù)的鏡像管理平臺(tái)如阿里云的容器鏡像服務(wù)。利用,先對(duì)阿里云的服務(wù)進(jìn)行登錄。推送后,就能在阿里云的倉(cāng)庫(kù)上看到這個(gè)鏡像。 Docker簡(jiǎn)述 Docker是一種OS虛擬化技術(shù),是一個(gè)開(kāi)源的應(yīng)用容器引擎。它可以讓開(kāi)發(fā)者將應(yīng)用打包到一個(gè)可移植的容器中,并且該容器可以運(yùn)行在幾乎所有l(wèi)inux系統(tǒng)中(Windo...

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

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

0條評(píng)論

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