Как контейнеризировать проект CodeIgniter с помощью Docker?

#docker #codeigniter #docker-compose

#docker #codeigniter #docker-compose

Вопрос:

Я очень новичок в Docker, и у меня есть проект CodeIgniter, над которым я работал через свой локальный хост (XAMPP) до сих пор. Теперь я хочу разместить свой проект в Docker, используя GCP.

Может ли кто-нибудь дать рекомендации относительно того, как я мог бы написать docker-compose.yml для контейнеризации проекта с помощью контейнеров redis, php, mysql и nginx? Кроме того, как мне нужно структурировать мой проект CI, чтобы он работал?

Комментарии:

1. Вы можете попробовать hub.docker.com/r/bitnami/codeigniter

2. Спасибо за предупреждение @TekNath, я думаю, было бы неплохо узнать, как это сделать вручную

3. Смотрите ibexoft.com/setup-codeigniter-docker-container-for-development за инструкциями.

Ответ №1:

Я ежедневно использую docker с Codeigniter 4. Вот моя структура, хотя в моей структуре я не использую ни redis, ни nginx. Вместо этого я использую apache.

Структура папок:

 .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
  

Что касается файлов конфигурации, вот 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
  

Файл Dockerfile

 FROM php:7.2-apache
RUN apt-get update amp;amp; 
    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/ 
    amp;amp; 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>
  

В моей серии YouTube о codeigniter 4 я создал репозиторий github, который отражает эту структуру:

Комментарии:

1. Вау, хорошо, спасибо за помощь. Очень признателен.

Ответ №2:

Я столкнулся с этим вопросом, когда изучал docker, и хотел оставить обновление здесь. Я использую bitnami / codeigniter3. Это было легко для меня, поскольку мне не нужно было переносить мое приложение на Codeigniter 4.

Комментарии:

1. Этот контейнер также будет работать для codeigniter 3.

Ответ №3:

Недавно у меня возникли проблемы с тем же, но каким-то образом я понял это и использовал приведенный ниже код. Кроме того, я настроил MySQL на другой порт, поскольку я запускал другое приложение на 3306.

 version: "1.0"
services:
  webserver:
    image: thecodingmachine/php:7.4-v3-apache-node12
    container_name: test-webserver
    working_dir: /var/www/html
    environment:
      PHP_EXTENSIONS: apcu pdo_mysql opcache redis zip gd yaml exif xdebug
      PHP_EXTENSION_GD: 1
      PHP_EXTENSION_MYSQLI: 1
      APACHE_DOCUMENT_ROOT: app
      APACHE_RUN_GROUP: www-data # use www-data user in container.. which is also used on most webservers for deployer
      APACHE_RUN_USER: www-data
      PHP_EXTENSION_XDEBUG: 1
    depends_on:
      - mysql
    volumes:
      - ./:/var/www/html
      - ~/.ssh:/root/.ssh
    stdin_open: true
    tty: true
    ports:
      - "9090:80"
  mysql:
    image: mysql:5.7
    container_name: test-mysql
    restart: unless-stopped
    ports:
      - "3307:3307"
    expose:
      - 3307
    environment:
      MYSQL_ROOT_PASSWORD: MYSQL_ALLOW_EMPTY_PASSWORD
      MYSQL_DATABASE: test-db
      MYSQL_USER: testuser
      MYSQL_PASSWORD: password
      MYSQL_TCP_PORT: 3307
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    restart: unless-stopped
    container_name: test-phpadmin
    environment:
      PMA_HOST: mysql
      PMA_USER: testuser
      PMA_PASSWORD: password
      PMA_PORT: 3307
      UPLOAD_LIMIT: 300M
    ports:
      - 9091:80
  

Кроме того, добавлено в мое репозиторий github. Включенный код git содержит некоторый прокомментированный код для CI4.