Learn Docker Compose With Apache Php Mysql and Wordpress
I. Introduction In this article, we will look at a particular set of use cases using docker-compose. II. Docker Compose Architect...
https://www.czetsuyatech.com/2020/04/docker-compose-with-apache-php-mysql-wordpress.html
I. Introduction
In this article, we will look at a particular set of use cases using docker-compose.
II. Docker Compose Architecture
We will start by going through this diagram.
We have the MariaDB database in the center where almost all the other services will depend. Adminer and Phymyadmin are both database management tools that we can use to execute crud operations into the database.
And then we will create a web page that runs PHP script deployed on an HTTP server. This script will simply connect to our database.
Finally, we will run a WordPress image that will connect to the same database that we have.
III. MariaDB Docker Container
In this section, we will configure our docker-compose file to start our MariaDB database container.
To do so, we need to set the required environment variables and make sure to map the /var/lib/mysql to a volume, so that the data will be persisted on container restart.
version: "3.3" volumes: maria_db: services: db: image: mariadb:10.5.2-bionic restart: always ports: - "3306:3306" environment: MYSQL_DATABASE: wordpress MYSQL_USER: kerri MYSQL_PASSWORD: kerri MYSQL_ROOT_PASSWORD: kerri volumes: - maria_db:/var/lib/mysql
You can start the container by executing > docker-compose up.
III. Adding the Phpmyadmin and Adminer Images
The first step would be to add the networks and then the images:
version: "3.3" networks: frontend: backend: volumes: maria_db: services: db: image: mariadb:10.5.2-bionic restart: always ports: - "3306:3306" environment: MYSQL_DATABASE: wordpress MYSQL_USER: kerri MYSQL_PASSWORD: kerri MYSQL_ROOT_PASSWORD: kerri volumes: - maria_db:/var/lib/mysql networks: - backend adminer: image: adminer depends_on: - db ports: - 8001:8080 networks: - frontend - backend phpmyadmin: image: phpmyadmin/phpmyadmin depends_on: - db ports: - 8002:80 environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: kerri networks: - frontend - backend
Now try running: docker-compose up again and load the following URLs in your browser:
HTTP://localhost:8001 - adminer
HTTP://localhost:8001 - PHPMyAdmin
IV. Running Apache, Php and MariaDB Images
Let's remove the PHPMyAdmin and adminer and add the apache and PHP images.
version: "3.3" networks: frontend: backend: volumes: maria_db: services: db: image: mariadb:10.5.2-bionic restart: always ports: - "3306:3306" environment: MYSQL_DATABASE: wordpress MYSQL_USER: kerri MYSQL_PASSWORD: kerri MYSQL_ROOT_PASSWORD: kerri volumes: - maria_db:/var/lib/mysql networks: - backend php: build: './php/' depends_on: - db networks: - backend volumes: - ./apache/public_html:/var/www/html/ web: build: './apache/' depends_on: - php - db ports: - "8000:80" networks: - frontend - backend volumes: - ./apache/public_html/:/var/www/html/
Inside the folder where the docker-compose.yml is located, add the following folders and files
+apache
++public_html
+++index.php
++Dockerfile
+local.apache.conf
+php
++Dockerfile
Load the URL HTTP://localhost:8000 in your browser and you should see the index.php file connecting to the database.
*You can find these files in the Github repository in the reference section.
V. Running Wordpress with MariaDB
In this final configuration, we will try to run a Wordpress website connected to the MariaDB instance that we have using docker containers.
version: "3.3" networks: frontend: backend: volumes: wordpress: maria_db: services: db: image: mariadb:10.5.2-bionic restart: always ports: - "3306:3306" environment: MYSQL_DATABASE: wordpress MYSQL_USER: kerri MYSQL_PASSWORD: kerri MYSQL_ROOT_PASSWORD: kerri volumes: - maria_db:/var/lib/mysql networks: - backend wordpress: image: wordpress restart: always depends_on: - db ports: - 8080:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: kerri WORDPRESS_DB_PASSWORD: kerri WORDPRESS_DB_NAME: wordpress volumes: - wordpress:/var/www/html networks: - frontend - backend
We need to specify the database connection settings in Wordpress so that it can connect to the MariaDB instance.
Run docker-compose up and load the URL HTTP://localhost:8080 in your browser.
VI. Reminders
Of course, you can run all the services at once, by compiling them into 1 docker-compose file. I deliberately use non-overlapping ports so that you can do that.
*DONT: Use non-fpm PHP version otherwise it won't work.
VII. Youtube Videos
VIII. References
- https://hub.docker.com/_/mariadb
- https://hub.docker.com/_/php
- https://hub.docker.com/_/httpd
- https://hub.docker.com/r/phpmyadmin/phpmyadmin/
- https://hub.docker.com/_/adminer/
- https://github.com/czetsuya/docker-apache-php-mysql-wordpress
Post a Comment