Hướng dẫn docker-php-ext-install command not found - lệnh docker-php-ext-install không tìm thấy

PHP 7.2.5

I am having a problem where a command is failing in the middle of my gitlab ci script...

deploy_to_dev:
  stage: deploy
  image: php:5.6
  allow_failure: true
  tags:
  - arc
  variables:
    PWS_IP: 'x.x.x.x'
  before_script:
  - sudo apt-get update && sudo apt-get install -y libxml2-dev git
  - docker-php-ext-install soap
  script:
  - git config --global http.sslVerify false
  - git diff --name-only origin/DEV | xargs php ./scripts/pws_loadgroovy.php
  only:
   refs:
   - DEV
   variables:
   - $CI_PROJECT_ID == "71"


    ServerAdmin admin@localhost
    DocumentRoot /var/www/html/public

    
            AllowOverride All
            Order allow,deny
            Allow from all
    

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


5


    ServerAdmin admin@localhost
    DocumentRoot /var/www/html/public

    
            AllowOverride All
            Order allow,deny
            Allow from all
    

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


6

I can't tell for sure if this command is being run on Ubuntu or php5.6 .. It seems like this is being run on Ubuntu given the


    ServerAdmin admin@localhost
    DocumentRoot /var/www/html/public

    
            AllowOverride All
            Order allow,deny
            Allow from all
    

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


7 commands. But is the

    ServerAdmin admin@localhost
    DocumentRoot /var/www/html/public

    
            AllowOverride All
            Order allow,deny
            Allow from all
    

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


8 command supposed to be executed from the Ubuntu shell?

How should I aim to fix this problem?

PHP 7.2.5

Project 2 này cũng rất đơn giản nên nội dung các file sẽ gần như tương tự với project 1.

Dockerfile

Cuối cùng truy cập

RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip
    
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
3 và bạn đã có một project chạy thành công với phiên bản PHP là 7.2.5.

Tổng kết

  • Mặc dù bài viết của mình nhìn khá là đơn giản, tuy nhiên khi áp dụng vào một dự án thực sự thì sẽ cần rất nhiều thứ, khi đó nội dung của hai file
    FROM php:5.6.40-apache
    
    0 và
    FROM php:5.6.40-apache
    
    6 sẽ thay đổi rất nhiều. Ví dụ bạn có thể sẽ cần thêm PHP extension, Apache module, hoặc Node.js / npm để compile asset,... Hoặc bạn có thể sẽ cần thêm các service như MySQL, Redis,... Khi đấy thì bạn cần phải tìm hiểu thêm về Docker và Docker Compose để phục vụ cho công việc của mình.
  • Bài viết của mình đến đây là hết, hi vọng nó sẽ đem lại một chút kiến thức có ích cho bạn.
  • Tham khảo:

Giới thiệu

Trước đây khi tham gia một buổi chia sẻ kiến thức về Docker thì có một bạn đặt câu hỏi mình thấy khá là thú vị, đó là nếu trong trường hợp bạn đang tham gia hai dự án khác nhau, mỗi dự án lại yêu cầu một phiên bản PHP khác nhau thì có thể áp dụng Docker vào được hay không.

Ở bài viết này mình sẽ hướng dẫn cách sử dụng Docker để giải quyết câu hỏi được đặt ra ở trên.

  • Mình sẽ không đi sâu vào các khái niệm được sử dụng trong bài viết cũng như cách cài đặt Docker cụ thể, mà chỉ đưa ra những cài đặt cơ bản để có thể áp dụng Docker vào các dự án bạn đang tham gia.
  • Yêu cầu

Mình sẽ sử dụng Ubuntu nhưng bạn có thể dùng bất cứ hệ điều hành nào Docker hỗ trợ

Docker: https://docs.docker.com/engine/install/ubuntu/#install-using-the-convenience-script


    ServerAdmin admin@localhost
    DocumentRoot /var/www/html/public

    
            AllowOverride All
            Order allow,deny
            Allow from all
    

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


Dockerfile

Cuối cùng truy cập

RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip
    
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
3 và bạn đã có một project chạy thành công với phiên bản PHP là 7.2.5.

FROM php:5.6.40-apache

Tổng kết

RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip
    
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

Mặc dù bài viết của mình nhìn khá là đơn giản, tuy nhiên khi áp dụng vào một dự án thực sự thì sẽ cần rất nhiều thứ, khi đó nội dung của hai file

FROM php:5.6.40-apache
0 và
FROM php:5.6.40-apache
6 sẽ thay đổi rất nhiều. Ví dụ bạn có thể sẽ cần thêm PHP extension, Apache module, hoặc Node.js / npm để compile asset,... Hoặc bạn có thể sẽ cần thêm các service như MySQL, Redis,... Khi đấy thì bạn cần phải tìm hiểu thêm về Docker và Docker Compose để phục vụ cho công việc của mình.

RUN a2enmod rewrite

Tiếp theo thì chúng ta sẽ bật những modules của Apache cần thiết cho project.

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

Vì project mình dùng làm mẫu khá là đơn giản nên chỉ cần thêm một bước cuối cùng đó chính là cài đặt Composer vào.

Bạn còn có thể cài đặt thêm Node.js và npm để compile các assest nhưng ở đây mình không cần nên mình sẽ bỏ qua.

docker-compose.yml

Bạn có thể dùng thẳng command

FROM php:5.6.40-apache
2 nhưng mình lại ưu tiên sử dụng Docker Compose hơn vì chỉ cần setup một lần là bạn có thể sử dụng nhiều lần mà không cần phải nhớ và gõ lại command.

version: '3'
services:
    php_564:
        container_name: php_564
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - 564:80
        volumes:
            - .:/var/www/html
            - ./vendor:/var/www/html/vendor
            - ./000-default.conf:/etc/apache2/sites-available/000-default.conf

Ở đây mình sử dụng compose file version 3. Mình chỉ cần một service duy nhất đó chính là PHP / Apache, và sẽ sử dụng image được build từ file

FROM php:5.6.40-apache
0 ở trên.

Vì để tránh port 80 đang dùng thì mình bind lại port thành 564.

Việc tiếp theo đó chính là bind các volume cho container. Dữ liệu của container sẽ được chứa ở các volume này, cụ thể là:

  1. Folder chứa source code mình bind
    FROM php:5.6.40-apache
    
    4 với folder gốc nơi chứa file
    FROM php:5.6.40-apache
    
    0 và
    FROM php:5.6.40-apache
    
    6
  2. Folder
    FROM php:5.6.40-apache
    
    7 chứa các package dependencies, tương tự mình bind với folder
    FROM php:5.6.40-apache
    
    7 của folder gốc
  3. Bind file virtual host của Apache với file custom của mình

Command

Sau khi đã có đủ các file:


    ServerAdmin admin@localhost
    DocumentRoot /var/www/html/public

    
            AllowOverride All
            Order allow,deny
            Allow from all
    

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


9,
FROM php:5.6.40-apache
0, và
FROM php:5.6.40-apache
6 thì hãy chạy lệnh sau ở folder gốc:

docker-compose up -d

Tiếp theo chúng ta cần cài đặt các package cần thiết cho project:

docker exec php_564 composer install

Cuối cùng truy cập

RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip
    
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
2 và bạn đã có một project chạy thành công với phiên bản PHP là 5.6.40.

Project 2

  • Github: https://github.com/yemiwebby/laravel-api-testing
  • PHP 7.2.5

Project 2 này cũng rất đơn giản nên nội dung các file sẽ gần như tương tự với project 1.

Dockerfile

FROM php:7.2.5-apache

RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip

RUN apt-get clean && rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

RUN a2enmod rewrite

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

docker-compose.yml


    ServerAdmin admin@localhost
    DocumentRoot /var/www/html/public

    
            AllowOverride All
            Order allow,deny
            Allow from all
    

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


0

Command


    ServerAdmin admin@localhost
    DocumentRoot /var/www/html/public

    
            AllowOverride All
            Order allow,deny
            Allow from all
    

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


1

Sau khi đã có đủ các file:


    ServerAdmin admin@localhost
    DocumentRoot /var/www/html/public

    
            AllowOverride All
            Order allow,deny
            Allow from all
    

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


9,
FROM php:5.6.40-apache
0, và
FROM php:5.6.40-apache
6 thì hãy chạy lệnh sau ở folder gốc:

Tiếp theo chúng ta cần cài đặt các package cần thiết cho project:

Cuối cùng truy cập

RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip
    
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
2 và bạn đã có một project chạy thành công với phiên bản PHP là 5.6.40.

Project 2

Github: https://github.com/yemiwebby/laravel-api-testing

  • https://www.sitepoint.com/docker-php-development-environment/
  • https://dockerwebdev.com/tutorials/