Just for fun——Docker作個NMP環境

原文連接php

Docker

Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。mysql

如今windows上也是能夠用docker了。總之,Docker能夠屏蔽宿主機操做系統差別,讓你能夠快速搭建系統環境。linux

Image和Container

Docker的Image(鏡像)能夠來生成多個容器。鏡像能夠看出是一個模板,而容器就是真正的物品。nginx

Docker Compose

Docker Compose是一個用來定義和運行復雜應用的Docker工具。使用Compose,你能夠在一個文件中定義一個多容器應用,而後使用一條命令來啓動你的應用,完成一切準備工做。c++

總之,Docker Compose是用來管理多個容器的,用Docker都會寫一個docker-compose.ymlgit

  • 開啓全部服務:docker-compose up
  • 關閉全部服務:docker-compose down

docker-compose.yml

上面說了,關鍵是編排好docker-compose.yml,如下就是NMP的docker-compose.ymlgithub

version: '2'
services:
  nginx:
    image: nginx:1.13.8-alpine
    ports: 
      - 80:80
      - 443:443
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./src:/var/www
  php:
    build: ./php
    volumes:
      - ./src:/var/www
      - ./php/php.ini:/usr/local/etc/php/php.ini
      - ./php/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf
  mysql:
    image: mysql:5.6
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    ports: 
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=2LCqvSOJ6m0Ut6ui

複製代碼

目錄結構

clipboard.png

訪問localhost

在目錄下運行docker-compose up命令,在瀏覽器訪問localhost能夠看到: web

clipboard.png

講解

Nginx和MySQL都是用了官方的鏡像,而PHP是從本地構建的。 alpine是很是輕量級的Linux系統,只有5M的大小,Docker官方也推薦在alpine上作鏡像。redis

PHP的Dockerfile

FROM php:7.1-fpm-alpine

# Packages
RUN apk --update add \
    autoconf \
    build-base \
    linux-headers \
    libaio-dev \
    zlib-dev \
    curl \
    git \
    subversion \
    freetype-dev \
    libjpeg-turbo-dev \
    libmcrypt-dev \
    libpng-dev \
    libtool \
    libbz2 \
    bzip2 \
    bzip2-dev \
    libstdc++ \
    libxslt-dev \
    openldap-dev \
    imagemagick-dev \
    make \
    unzip \
    wget && \
    docker-php-ext-install bcmath mcrypt zip bz2 pdo_mysql mysqli simplexml opcache sockets mbstring pcntl xsl && \
    docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \
    pecl install imagick && \
    docker-php-ext-enable imagick && \
    pecl install swoole && \
    docker-php-ext-enable swoole && \
    docker-php-ext-install gd && \
    docker-php-ext-enable opcache && \
    apk del build-base \
    linux-headers \
    libaio-dev \
    && rm -rf /var/cache/apk/*




ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /tmp
ENV COMPOSER_VERSION 1.5.1


RUN curl -s -f -L -o /tmp/installer.php https://raw.githubusercontent.com/composer/getcomposer.org/da290238de6d63faace0343efbdd5aa9354332c5/web/installer \
 && php -r " \ \$signature = '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410'; \ \$hash = hash('SHA384', file_get_contents('/tmp/installer.php')); \ if (!hash_equals(\$signature, \$hash)) { \ unlink('/tmp/installer.php'); \ echo 'Integrity check failed, installer is either corrupt or worse.' . PHP_EOL; \ exit(1); \ }" \
 && php /tmp/installer.php --no-ansi --install-dir=/usr/bin --filename=composer --version=${COMPOSER_VERSION} \
 && rm /tmp/installer.php \
 && composer --ansi --version --no-interaction

VOLUME /var/www
WORKDIR /var/www

CMD php-fpm

複製代碼

這個鏡像裝了一些本身想要的擴展(作了一點定製),最後手動裝了一下Composer PHP的擴展能夠分爲核心擴展和第三方擴展(這裏又能夠分PECL和非PECL),對於這些擴展,PHP官方鏡像提供了簡便命令來安裝:sql

PHP Core Extensions

FROM php:7.0-fpm
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd
複製代碼

PECL extensions

FROM php:7.1-fpm
RUN pecl install redis-3.1.0 \
    && pecl install xdebug-2.5.0 \
    && docker-php-ext-enable redis xdebug
FROM php:5.6-fpm
RUN apt-get update && apt-get install -y libmemcached-dev zlib1g-dev \
    && pecl install memcached-2.2.0 \
    && docker-php-ext-enable memcached
複製代碼

Other extensions

FROM php:5.6-apache
RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
    && mkdir -p xcache \
    && tar -xf xcache.tar.gz -C xcache --strip-components=1 \
    && rm xcache.tar.gz \
    && ( \
        cd xcache \
        && phpize \
        && ./configure --enable-xcache \
        && make -j$(nproc) \
        && make install \
    ) \
    && rm -r xcache \
    && docker-php-ext-enable xcache
複製代碼

詳細見:Docker Office Image: PHP

打包下載

地址

相關文章
相關標籤/搜索