I'm very new to Docker and I have a CodeIgniter project that I have been working on via my localhost (XAMPP) up until now. I now want to host my project on Docker using GCP.
Would anyone be able to provide guidance as to how I would write a docker-compose.yml to containerise the project with redis, php, mysql and and nginx containers? Also how would I need my CI project structured for it to work?
You can use docker run to create a container and execute PHP. You just need to add some volumes to the container. These volumes should include the paths to your code.
I use docker with Codeigniter 4 on daily basis. Here's my structure, although in my structure I'm not using neither redis or nginx. I'm using apache instead.
Folder structure:
.database
.docker
|php
|sites-available
|site.conf
|Dockerfile
|custom.ini
|docker-compose.yml
.git
app
|app
|public
|tests
|vendor
|writable
|.env
|composer.json
|composer.lock
|spark
.gitignore
As for the config files, here's the docker-compose.yml
version: '3'
services:
web:
container_name: ci4-web
build:
context: ./php
ports:
- 80:80
volumes:
- ../app:/var/www/html/app/
- ./custom.ini:/usr/local/etc/php/conf.d/custom.ini
links:
- mysql
depends_on:
- mysql
mysql:
container_name: db-ci4
image: mysql:latest
volumes:
- ./db:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
The Dockerfile
FROM php:7.2-apache
RUN apt-get update && \
apt-get install -y
RUN apt-get install -y curl
RUN apt-get install -y build-essential libssl-dev zlib1g-dev libpng-dev libjpeg-dev libfreetype6-dev
RUN apt-get install -y libicu-dev
COPY sites-available/elioter.conf /etc/apache2/sites-enabled/elioter.conf
RUN apt-get update
RUN docker-php-ext-install intl
RUN docker-php-ext-configure intl
RUN docker-php-ext-install mysqli pdo pdo_mysql zip mbstring
RUN a2enmod rewrite
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd
RUN service apache2 restart
my site.conf
<VirtualHost *:80>
DocumentRoot "/var/www/html/app/public/"
ServerName ci4.local
<Directory "/var/www/html/app/public/">
AllowOverride all
</Directory>
</VirtualHost>
On my youtube series about codeigniter 4 I created a github repo that reflects this structure:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With