PHPにおけるDockerの実践過程

3427 ワード

最近、マイクロサービスが盛んで、多くの人が試しています.うちの会社もこの間、Dockerに関するマイクロサービス化を試みています.実践dockerの中で多くの穴を踏んで、Dockerに対してもっと多くの認識があって、以下に記録します.
DockerはSpring bootプロジェクトをパッケージ化する際、Spring boot内部にtomcatが統合され、jarパッケージに直接パッケージ化する方法が提供されているため、Spring bootはどのようにパッケージ化されていますか.
Dockerfileファイルは次のとおりです.
FROM java:8

COPY target/your-project-name.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]


会社の中にはもう一つ前のPHPプロジェクトがあるので、PHPのパッケージも必要で、多くの資料を調べて、最後に実践の中でPHPプロジェクトはnginxでネットワークを管理する必要があり、どのようなDockerfileファイルでパッケージ化すれば問題があることを発見しました.
FROM php:7.0-cli
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-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
FROM php:7.1-fpm
RUN pecl install -o -f redis \
    &&  rm -rf /tmp/pear \
    &&  docker-php-ext-enable redis
RUN docker-php-ext-install  mysqli pdo pdo_mysql

EXPOSE 80

COPY . /php
WORKDIR /php

何度も資料を調べた結果、こんな文章を見つけた.http://geekyplatypus.com/dockerise-your-php-application-with-nginx-and-php7-fpm/中に解決策が見つかった.docker-composeを使えばいい.docker-compose.ymlファイルは次のとおりです.
version: '2'

services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"
        volumes:
            - ./:/php
            - ./site.conf:/etc/nginx/conf.d/default.conf
        networks:
            - code-network
    php:
        image: php:fpm
        volumes:
            - ./:/php
        networks:
            - code-network

networks:
    code-network:
        driver: bridge


上に述べたsite.confファイルは次のとおりです.
server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /php;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

コマンドラインで直接実行するには、次の手順に従います.
  $sudo docker-compose up

実行の結果を見ることができますが、アリクラウドコンテナサービスに直接配置されているため、docker-composeという方法には欠陥があります.アリクラウドコンテナサービスはserverという方法をサポートしていないので、最終的に検索を経て、見つけました.https://hub.docker.com/r/richarvey/nginx-php-fpm/
以下のDockerfileをそのまま使えばいいです.
FROM richarvey/nginx-php-fpm:latest

MAINTAINER Ric Harvey 

ENV PHPREDIS_VERSION 3.0.0
RUN mkdir -p /usr/src/php/ext/redis \
    && curl -L https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/redis --strip 1 \
    && echo 'redis' >> /usr/src/php-available-exts \
    && docker-php-ext-install redis

EXPOSE 80

ADD ./ /var/www/html/

当初Dockerという方式を選んだ以上、この技術をなんとか食い抜くようにしなければならない.そうしないと、生産環境で問題が発生して面倒になる.以上、PHPとのDocker化の実践過程について、一行のログ情報を見つめて原因を探しましたが、PHPについてはあまり詳しくないので、PHPの同僚に多くの質問をしました.記録した面は後で出会うが、以上の内容はDockerの技術点ごとに紹介されていないが、時間を見つけて各技術点を記録する.簡単に言えば、PHPはnginxと組み合わせて使用しなければならない.