Docker and PHP: Difference between revisions

From Rixort Wiki
Jump to navigation Jump to search
No edit summary
(6 intermediate revisions by the same user not shown)
Line 10: Line 10:
== Run a basic PHP Docker image ==
== Run a basic PHP Docker image ==


  docker run php:7.4-apache-buster php --version
  docker run --rm php:7.4-apache-buster php --version
 
The <code>--rm</code> argument removes the container after it has finished.


== Basic PHP Dockerfile ==
== Basic PHP Dockerfile ==
Line 33: Line 35:
  services:
  services:
   app:
   app:
     image: laravel-www
     image: phpinfo
     container_name: laravel-www
     container_name: phpinfo
     build:
     build:
       context: .
       context: .
Line 44: Line 46:


  docker-compose up --build -d
  docker-compose up --build -d
<code>-d</code> runs the container as a daemon, and returns the command line immediately.
Dockerfile doesn't have to be in a different directory, but this seems to be something of a convention and perhaps keeps things tidy. By default docker-compose will look for a Dockerfile in the current directory.
== Database ==
Assuming you want to use MariaDB:
version: "3"
services:
    app:
        build: .
        ports:
            - 8080:80
   
    database:
        image: mariadb
        restart: always
        environment:
            MARIADB_RANDOM_ROOT_PASSWORD: "yes"
            MARIADB_DATABASE: app
            MARIADB_USER: app
            MARIADB_PASSWORD: secret
        ports:
            - 3307:3306
The advantage of adding a port mapping here is that you can connect to the database container from the host, which is handy if you have a graphical MariaDB client such as DBeaver. You can of course also login to the container and run the mysql client on the command line.
For port mapping from the host, choose something other than the default port (3306), otherwise you will get a clash if MariaDB is running on the host (which it probably will be on a local development machine).


== Extensions ==
== Extensions ==

Revision as of 16:16, 11 June 2021

Contents of a Docker directory

The following files must be present to use docker-compose:

docker-compose.yml
Dockerfile

docker-compose build will build the image.

Run a basic PHP Docker image

docker run --rm php:7.4-apache-buster php --version

The --rm argument removes the container after it has finished.

Basic PHP Dockerfile

Build an image and copy in a PHP file:

FROM php:7.4-apache-buster

COPY index.php /var/www/html/

To build the image:

docker build -t phpinfo:latest .

To run the image:

docker run --rm -p 8080:80 phpinfo

Basic PHP Docker Compose

version: "3"
services:
  app:
    image: phpinfo
    container_name: phpinfo
    build:
      context: .
      dockerfile: docker/Dockerfile
    ports:
      - 8080:80

This can be built and run with:

docker-compose up --build -d

-d runs the container as a daemon, and returns the command line immediately.

Dockerfile doesn't have to be in a different directory, but this seems to be something of a convention and perhaps keeps things tidy. By default docker-compose will look for a Dockerfile in the current directory.

Database

Assuming you want to use MariaDB:

version: "3"
services:
    app:
        build: .
        ports:
            - 8080:80
   
    database:
        image: mariadb
        restart: always
        environment: 
            MARIADB_RANDOM_ROOT_PASSWORD: "yes"
            MARIADB_DATABASE: app
            MARIADB_USER: app
            MARIADB_PASSWORD: secret
        ports:
            - 3307:3306

The advantage of adding a port mapping here is that you can connect to the database container from the host, which is handy if you have a graphical MariaDB client such as DBeaver. You can of course also login to the container and run the mysql client on the command line.

For port mapping from the host, choose something other than the default port (3306), otherwise you will get a clash if MariaDB is running on the host (which it probably will be on a local development machine).

Extensions

PHP extensions can be installed via docker-php-ext-install, e.g. to install the MySQL extension:

RUN docker-php-ext-install pdo_mysql