VirtualBox의 CentOS7에 docker로 postgresql + PHP + Apache 환경 구축

소개



상당한 기간이 비어 있었지만,
로컬 환경에 VirtualBox를 사용하여 개발 환경을 구축하는 작업의 세 번째입니다.
전회은 DB 서버,
지난번은 웹 서버를 구축했습니다.
이번에는 DB 서버 + WEB 서버 + PHP 앱 환경을 구축합니다.
이미지로서는, DB의 값을 취득해, WEB 서버상에 PHP로 표시합니다.

작업환경


  • MacOS X Yosemite 10.10.5

  • 1.Docker Compose



    이번에는 "Docker Compose"를 사용하여 여러 서버를 한 번에 작동하는 절차로 요약합니다.
    설치 절차는 공식 사이트의 지침을 참조하십시오.

    2. 디렉토리 구성



    이번에는 이하의 구성으로 각 파일을 준비했습니다.
    docker-php-postgres
    ┣ docker-compose.yml   // Docker Composeの設定ファイル(3.参照)
    ┣ docker-file
    ┃ ┣ db
    ┃ ┃ ┣ Dockerfile   // DBサーバ用のDockerfile(4.参照)
    ┃ ┃ ┣ docker-entrypoint-initdb.d
    ┃ ┃   ┣ 01_createdb.sql   // DB作成用SQL
    ┃ ┣ web
    ┃   ┣ Dockerfile   // WEBサーバ用のDockerfile(6.参照)
    ┃   ┣ php.ini      // PHP設定ファイル(7.参照)
    ┣ volumes
      ┣ web
        ┣ html
          ┣ index.php   // PHPファイル(8.参照)
    

    3. docker-compose.yml


    version: '3'
    
    services:
    
      web:
        build: ./docker-file/web/
        ports:
          - 8080:80
        volumes:
            - ./volumes/web/html/:/var/www/html:z   // :zを忘れないように。
        depends_on:
          - db
    
      db:
        build: ./docker-file/db/
        ports:
          - 5432:5432
        environment:
          - POSTGRES_USER=testuser
          - POSTGRES_PASSWORD=password
    

    4. DB 서버용 Dockerfile


    FROM postgres:9.3
    
    RUN apt-get update
    
    RUN apt-get install -y vim less
    
    COPY ./docker-entrypoint-initdb.d/01_createdb.sql /docker-entrypoint-initdb.d/
    
    EXPOSE 5432
    

    5. DB 작성용 SQL



    DB 작성용 SQL 및 테이블 작성 SQL 파일을 docker-entrypoint-initdb.d 아래에 작성합니다.
    이번에는 "01_createdb.sql"이라는 이름으로
    testdb라는 DB, test_table이라는 테이블을 만듭니다.
    test_table 테이블에는 id 열과 keyword 열을 준비하고,
    적절한 값을 설정하십시오.

    6. WEB 서버용 Dockerfile


    # Apache モジュールが同梱された PHP コンテナイメージ
    FROM php:apache
    
    RUN apt-get update
    
    RUN apt-get install -y vim less
    
    # Postgres関連のPHPエクステンションをインストール
    RUN set -ex apk --no-cache add postgresql-dev libpq-dev
    
    RUN apt-get install -y libpq-dev && docker-php-ext-install pdo pdo_pgsql pgsql mbstring
    
    # PHPの設定ファイルをコピー
    COPY ./php.ini /usr/local/etc/php/
    

    7. PHP 설정 파일


    [Core]
    display_errors = On
    error_reporting = E_ALL
    error_log = /var/log/apache2/error.log
    log_errors = On
    
    [Date]
    date.timezone = 'Asia/Tokyo'
    
    [mbstring]
    mbstring.language = Japanese
    mbstring.internal_encoding = auto
    mbstring.http_input = auto
    mbstring.http_output = auto
    mbsting.encoding_translation = Off
    mbstring.detect_order = auto
    

    8. PHP 파일



    DB의 테이블 내용을 가져와 출력하는 간단한 PHP 파일입니다.
    $conn = "host=docker-php-postgres_db_1 port=5432 dbname=testdb user=testuser password=password";
    $link = pg_connect($conn);
    if (!$link) {
        exit('接続失敗です。'.pg_last_error());
    }
    
    pg_set_client_encoding("sjis");
    
    $result = pg_query('SELECT id, keyword FROM test_table');
    if (!$result) {
        exit('クエリーが失敗しました。'.pg_last_error());
    }
    
    for ($i = 0 ; $i < pg_num_rows($result) ; $i++){
        $rows = pg_fetch_array($result, NULL, PGSQL_ASSOC);
        print('id='.$rows['id']);
        print(',keyword='.$rows['keyword'].'<br>');
    }
    
    $close_flag = pg_close($link);
    
    if (!$close_flag){
        print('切断に失敗しました。<br>');
    }
    
    ?>
    </body>
    </html>
    

    9. 컨테이너 시작



    3. ~ 8. 파일이 준비되면 다음 명령을 실행합니다.
    이 명령은 빌드까지 수행합니다.
    $ docker-compose up -d
    

    빌드만 수행하려면 다음 명령을 실행합니다.
    $ docker-compose build
    

    명령을 실행한 후 컨테이너가 시작되었는지 여부를 다음 명령으로 확인합니다.
    $ docker-compose ps
    root@localhost docker-php-postgres]# docker ps -a
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
    f078f9167ad6        docker-php-postgres_web   "docker-php-entryp..."   41 seconds ago      Up 36 seconds       0.0.0.0:8080->80/tcp     docker-php-postgres_web_1
    c51a280c6d44        docker-php-postgres_db    "docker-entrypoint..."   45 seconds ago      Up 41 seconds       0.0.0.0:5432->5432/tcp   docker-php-postgres_db_1
    

    시작이 끝나면 브라우저에서 시작한 웹 서버의 index.php에 액세스해보십시오.
    액세스하고 테이블의 내용이 표시되면 완료됩니다.

    http://【VirtualBox IP 주소】:8080/index.php



    10. 컨테이너 정지



    컨테이너 중지는 다음 명령을 실행합니다.
    $ docker-compose stop
    

    이제 DB 서버 + WEB 서버 + PHP 앱의 환경을 구축할 수 있었습니다.
    이번 학습한 것을 바탕으로,
    docker를 사용한 다양한 환경 구축을 실시하고 싶습니다.

    참고 URL



    htps //w w. 케 y-p. 이 m/bぉg/s 탓 f/아 rゔぇs/106755
    htps : // / cs. 도 c r. 코 m / 코 m 포세 / 인 s 타르 /
    htps : // 코 m / 보라 / ms / fb14d99d3323bd2 예 9d
    htps : //미조민톤. 하테나 bぉg. jp / 엔트리 / 도 c 케 루카케 php1.3
    htps : // 코 m / 나기 244 / ms / 5에 6fc062fdc5004 9

    좋은 웹페이지 즐겨찾기