Select Page

Running PrestaShop in docker from scratch (Dockerfile method)

Ram Chandra
Published: July 7, 2022

In our last blog, we talked about Running PrestaShop in Docker Container using official PrestaShop image from docker hub. Here we will explain how you can create your own PrestaShop docker image from scratch.

There are a number of benefits in custom PrestaShop image, for instance:

  • There is no need for a separate database container.
  • There is no need for a docker network.
  • The PrestaShop installation is done by the image author, so he has access to modify/customise anything.

We will use Dockerfile to manage almost all steps automatically so let’s start by preparing folder for Dockerfile:

Step 1 : Prepare folder for docker image

First of all, create an empty folder “prestashop” and create a Dockerfile inside this folder. Then download PrestaShop from official website and extract all files inside prestashop folder.

The folder structure should look like this:

Searching for an experienced
Prestashop Company ?
Read More


image-27

Step 2 : Prepare Dockerfile

Edit and put this content in Dockerfile:

FROM php:7.4-apache
WORKDIR /var/www/html
# update packages
RUN apt-get update
# install zip and pdo extensions
RUN apt-get install -y \
        libzip-dev \
        zip \
    && docker-php-ext-configure zip \
    && docker-php-ext-install zip \
    && docker-php-ext-install pdo pdo_mysql
# install gd image library
RUN apt-get install -y \
		libfreetype6-dev \
		libjpeg62-turbo-dev \
		libpng-dev \
	&& docker-php-ext-configure gd --with-freetype --with-jpeg \
  && docker-php-ext-install -j "$(nproc)" gd
# install intl extension
RUN apt-get install -y zlib1g-dev libicu-dev g++ \
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl
# enable mod_rewrite
RUN a2enmod rewrite
# install opcache for php acceleration
RUN docker-php-ext-install opcache \
    && docker-php-ext-enable opcache \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get autoremove -y
# install database
RUN apt-get update
RUN apt-get install -y mariadb-server
# create user-psuser password-admin and assign privileges
RUN service mariadb start && mysql -uroot mysql -e "CREATE USER 'psuser'@localhost IDENTIFIED BY 'admin';GRANT ALL PRIVILEGES ON *.* TO 'psuser'@localhost IDENTIFIED BY 'admin';FLUSH PRIVILEGES;"
# copy prestashop folder content
COPY prestashop/ /var/www/html
# Change owner and permissions
# RUN chown -R www-data:www-data /var/www/html/var/logs
RUN chmod -R 0777 /var/www/html/var/logs \
/var/www/html/var/cache \
/var/www/html/config \
/var/www/html/img \
/var/www/html/mails \
/var/www/html/modules \
/var/www/html/translations \
/var/www/html/upload \
/var/www/html/download \
/var/www/html/app/config \
/var/www/html/app/Resources/translations \
/var/www/html/img
# RUN chown -R www-data:www-data /var/www/html/entrypoint.sh
# RUN chmod -R 0777 /var/www/html/entrypoint.sh
# ENTRYPOINT ["/var/www/html/entrypoint.sh"]
RUN touch /usr/local/etc/php/php.ini && echo "short_open_tag=FALSE" >> /usr/local/etc/php/php.ini
EXPOSE 80

Let’s understand each step in this Dockerfile:

  • FROM php:7.4-apache – Using php:7.4-apache.
  • WORKDIR /var/www/html – Set document root.
  • RUN apt-get update – Update packages list.
  • All commands starting with “RUN apt-get install” install the necessary extensions for PrestaShop.
  • RUN a2enmod rewrite – Enable mod_rewrite.
  • RUN docker-php-ext-install opcache… – install opcache for php acceleration (optional).
  • RUN service mariadb start && … – Start mysql server and create user with password.
  • COPY prestashop/ /var/www/html – Copy PrestaShop files to html directory of image.
  • RUN chmod -R 0777 /var… – Assign read/write permissions to necessary folders in prestashop
  • RUN touch /usr/local/etc/php/php.ini && … – Create php.ini and set short_open_tag=FALSE (Optional)
  • EXPOSE 80 – Docker container port configuration for TCP connections.

Step 3 : Open terminal and build docker image

Open terminal in the folder where Dockerfile is located and run this command:

docker build -t myps:latest .

The “myps” is custom image name, you can use any name for your docker image. After running this command, the commands from Dockerfile will execute and create docker image. It will take sometime to perform all commands so do not interrupt or leave the terminal.

Step 4 : PrestaShop installation

Now that our image is created, we will install the PrestaShop and commit to docker image so that our image is updated with an installed PrestaShop. Hence, run a container on the created image with this command:

docker run --name mypscontainer -d -p 8910:80 myps:latest && docker exec -ti mypscontainer service mariadb start

This command runs a container and starts mysql server inside the container:

  • mypscontainer is custom container name, you can use any name here.
  • myps is our image name created in previous steps.
  • 8910 is port number where we want to run our container.

After container starts, go to http://localhost:8910, the PrestaShop installation page will open. Complete the installation and use these details for database connection:

  • Host : 127.0.0.1
  • Username : psuser
  • Password : admin

The above user was created while image creation from the Dockerfile.

After the installation is complete, open terminal and run these two commands to remove “install” folder and rename “admin” folder (this step is required for PrestaShop):

docker exec -ti mypscontainer rm -rf /var/www/html/install
docker exec -ti mypscontainer mv /var/www/html/admin /var/www/html/adminps

The mypscontainer is the container name, so use your container name or id in its place.

Step 5 : Commit this installed PrestaShop container to image

Now, our PrestaShop is installed in the container so we will commit this to our image so that whenever we start container, we will get this installed PrestaShop. Run this command in terminal to commit the container:

docker commit mypscontainer myps:latest

The mypscontainer is container name, myps is image name and latest is the image tag. You can use your corresponding values here.

Now always use this command to run container and start database server together:

docker run --name mypscontainer -d -p 8910:80 myps:latest && docker exec -ti mypscontainer service mariadb start

That’s all about running PrestaShop in docker from scratch. If any issue or doubt in the above process, please feel free to let us know in the comment section.

I would be happy to help.

Also, you can explore our PrestaShop Development Services and a large range of quality PrestaShop Modules.

For any doubt contact us at [email protected].

Source: webkul.com