This Blog would provide an overview of Creating and running Custom Container to run perl application in web apps on Linux.
Creating Custom Perl Container
- I would recommend to setup a local Docker dev environment for creating Custom container(makes it easy to debug). Refer my another blog Running Docker on Azure VM
- Make sure your Docker file is running as expected in development environment
- Deploy your Docker files into Github. Ex: appserviceperl
- Create DockerHub account and Setup Continuous integration from Github
Below are list of steps my DockerFile has to create App Service Perl image
Github Repo : https://github.com/prashanthmadi/appserviceperl
- I have extended httpd official container and set custom httpd.conf file
FROM httpd:2.4 COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf
- Established symlinks for below as all our site content would be in
/usr/local/apache2/htdocs -> /home/site/wwwroot
/usr/local/apache2/logs -> /home/LogFiles
RUN rm -f /usr/local/apache2/logs/* \ && chmod 777 /usr/local/apache2/logs \ && rm -rf /usr/local/apache2/htdocs \ && rm -rf /usr/local/apache2/logs \ && mkdir -p /home/site/wwwroot \ && mkdir -p /home/LogFiles \ && chown -R root:www-data /home \ && ln -s /home/site/wwwroot /usr/local/apache2/htdocs \ && ln -s /home/LogFiles /usr/local/apache2/logs
- Installed perl again as cpanm fails with default installation.
RUN apt-get update \ && apt-get install make \ && apt-get install -y perl
- Created a /home/cpan directory for temporary use and need to be deleted later
RUN mkdir -p /home/cpan
- Copied cpanfile to /home/cpan/cpanfile. this file has required perl dependencies. You can alter this as per your requirement.
COPY ./cpanfile /home/cpan/cpanfile
- Download cpanm inside /home/cpan folder and insall modules listed in cpanfile
RUN apt-get install -y curl \ && cd /home/cpan \ && curl -LO http://xrl.us/cpanm \ && apt-get install -y libhtml-parser-perl \ && perl cpanm --force --installdeps .
- deleting /home/cpan folder as we don't need it anymore
RUN rm -rf /home/cpan
Installing Custom Container to run Perl App on Web Apps Linux
- Navigate to azure portal and select "Web App On Linux" option inside Web + Mobile
- We need to Select "Configure container" option to use Custom Container
- Here you can use Built-in container or one from Docker Hub/Private registry
- I have my Perl Custom Container @ Docker Hub - prashanthmadi/appserviceperl
- So, I have selected Docker Hub and entered my Image name.
- Finish the process by pressing Create Button
- Create a
index.plfile with below content and deploy it using FTP/Git.
#!/usr/bin/perl -w print "Content-type: text/html\n\n"; print "Hello, World.";
- Navigate to http://
<your_webapp_name>.azurewebsites.net/ and it should show "Hello World"
Extending Custom Container to install more Perl dependencies
For adding extra modules, make a fork of my github repo.
change content in cpanfile (samples available at below link)…
Publish your new project to dockerhub and use it while configuring container.