laradock/workspace/Dockerfile

769 lines
25 KiB
Docker
Raw Normal View History

2016-12-15 21:13:00 +08:00
#
#--------------------------------------------------------------------------
# Image Setup
#--------------------------------------------------------------------------
#
# To edit the 'workspace' base Image, visit its repository on Github
2017-04-21 01:55:09 +08:00
# https://github.com/Laradock/workspace
2016-12-15 21:13:00 +08:00
#
# To change its version, see the available Tags on the Docker Hub:
# https://hub.docker.com/r/laradock/workspace/tags/
#
# Note: Base Image name format {image-tag}-{php-version}
#
2016-12-15 21:13:00 +08:00
ARG PHP_VERSION=${PHP_VERSION}
FROM laradock/workspace:2.2-${PHP_VERSION}
2016-12-15 21:13:00 +08:00
2018-03-16 17:34:47 +08:00
LABEL maintainer="Mahmoud Zalt <mahmoud@zalt.me>"
2016-12-15 21:13:00 +08:00
# Start as root
USER root
###########################################################################
# Laradock non-root user:
###########################################################################
# Add a non-root user to prevent files being created with root permissions on host machine.
ARG PUID=1000
ENV PUID ${PUID}
ARG PGID=1000
ENV PGID ${PGID}
# always run apt update when start and after add new source list, then clean up at end.
RUN apt-get update -yqq && \
2018-05-28 08:47:22 +08:00
pecl channel-update pecl.php.net && \
groupadd -g ${PGID} laradock && \
useradd -u ${PUID} -g laradock -m laradock -G docker_env && \
usermod -p "*" laradock
2016-12-15 21:13:00 +08:00
#
#--------------------------------------------------------------------------
# Mandatory Software's Installation
#--------------------------------------------------------------------------
#
# Mandatory Software's such as ("php-cli", "git", "vim", ....) are
2016-12-15 21:13:00 +08:00
# installed on the base image 'laradock/workspace' image. If you want
# to add more Software's or remove existing one, you need to edit the
2017-04-21 01:55:09 +08:00
# base image (https://github.com/Laradock/workspace).
2016-12-15 21:13:00 +08:00
#
#
#--------------------------------------------------------------------------
# Optional Software's Installation
#--------------------------------------------------------------------------
#
# Optional Software's will only be installed if you set them to `true`
# in the `docker-compose.yml` before the build.
# Example:
# - INSTALL_NODE=false
# - ...
#
###########################################################################
# Set Timezone
###########################################################################
2016-12-15 21:13:00 +08:00
ARG TZ=UTC
ENV TZ ${TZ}
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
###########################################################################
# User Aliases
###########################################################################
USER root
COPY ./aliases.sh /root/aliases.sh
COPY ./aliases.sh /home/laradock/aliases.sh
2017-11-06 18:12:02 +08:00
RUN sed -i 's/\r//' /root/aliases.sh && \
sed -i 's/\r//' /home/laradock/aliases.sh && \
chown laradock:laradock /home/laradock/aliases.sh && \
echo "" >> ~/.bashrc && \
echo "# Load Custom Aliases" >> ~/.bashrc && \
echo "source ~/aliases.sh" >> ~/.bashrc && \
echo "" >> ~/.bashrc
2017-11-06 18:12:02 +08:00
USER laradock
2016-12-15 21:13:00 +08:00
RUN echo "" >> ~/.bashrc && \
echo "# Load Custom Aliases" >> ~/.bashrc && \
echo "source ~/aliases.sh" >> ~/.bashrc && \
echo "" >> ~/.bashrc
2016-12-15 21:13:00 +08:00
###########################################################################
2016-12-15 21:13:00 +08:00
# Composer:
###########################################################################
USER root
2016-12-15 21:13:00 +08:00
# Add the composer.json
COPY ./composer.json /home/laradock/.composer/composer.json
# Make sure that ~/.composer belongs to laradock
RUN chown -R laradock:laradock /home/laradock/.composer
2016-12-15 21:13:00 +08:00
USER laradock
# Check if global install need to be ran
ARG COMPOSER_GLOBAL_INSTALL=false
ENV COMPOSER_GLOBAL_INSTALL ${COMPOSER_GLOBAL_INSTALL}
2016-12-15 21:13:00 +08:00
RUN if [ ${COMPOSER_GLOBAL_INSTALL} = true ]; then \
# run the install
composer global install \
;fi
ARG COMPOSER_REPO_PACKAGIST
ENV COMPOSER_REPO_PACKAGIST ${COMPOSER_REPO_PACKAGIST}
RUN if [ ${COMPOSER_REPO_PACKAGIST} ]; then \
composer config -g repo.packagist composer ${COMPOSER_REPO_PACKAGIST} \
;fi
# Export composer vendor path
RUN echo "" >> ~/.bashrc && \
echo 'export PATH="~/.composer/vendor/bin:$PATH"' >> ~/.bashrc
###########################################################################
# Non-root user : PHPUnit path
###########################################################################
# add ./vendor/bin to non-root user's bashrc (needed for phpunit)
USER laradock
RUN echo "" >> ~/.bashrc && \
echo 'export PATH="/var/www/vendor/bin:$PATH"' >> ~/.bashrc
###########################################################################
2016-12-15 21:13:00 +08:00
# Crontab
###########################################################################
2016-12-15 21:13:00 +08:00
USER root
COPY ./crontab /etc/cron.d
RUN chmod -R 644 /etc/cron.d
###########################################################################
# Drush:
###########################################################################
# Deprecated install of Drush 8 and earlier versions.
# Drush 9 and up require Drush to be listed as a composer dependency of your site.
USER root
ARG INSTALL_DRUSH=false
ARG DRUSH_VERSION
ENV DRUSH_VERSION ${DRUSH_VERSION}
RUN if [ ${INSTALL_DRUSH} = true ]; then \
apt-get -y install mysql-client && \
# Install Drush with the phar file.
curl -fsSL -o /usr/local/bin/drush https://github.com/drush-ops/drush/releases/download/${DRUSH_VERSION}/drush.phar | bash && \
chmod +x /usr/local/bin/drush && \
drush core-status \
;fi
###########################################################################
# SOAP:
###########################################################################
USER root
ARG INSTALL_SOAP=false
ARG PHP_VERSION=${PHP_VERSION}
2018-03-23 15:17:35 +08:00
RUN if [ ${INSTALL_SOAP} = true ]; then \
# Install the PHP SOAP extension
apt-get -y install libxml2-dev php${PHP_VERSION}-soap \
;fi
2018-03-23 15:17:35 +08:00
###########################################################################
# LDAP:
###########################################################################
2018-03-23 15:17:35 +08:00
ARG INSTALL_LDAP=false
ARG PHP_VERSION=${PHP_VERSION}
RUN if [ ${INSTALL_LDAP} = true ]; then \
apt-get install -y libldap2-dev && \
apt-get install -y php${PHP_VERSION}-ldap \
;fi
###########################################################################
# IMAP:
###########################################################################
ARG INSTALL_IMAP=false
ARG PHP_VERSION=${PHP_VERSION}
RUN if [ ${INSTALL_IMAP} = true ]; then \
apt-get install -y php${PHP_VERSION}-imap \
;fi
2018-05-07 16:58:55 +08:00
###########################################################################
# Subversion:
###########################################################################
USER root
ARG INSTALL_SUBVERSION=false
RUN if [ ${INSTALL_SUBVERSION} = true ]; then \
apt-get install -y subversion \
;fi
###########################################################################
2016-12-15 21:13:00 +08:00
# xDebug:
###########################################################################
USER root
2016-12-15 21:13:00 +08:00
ARG INSTALL_XDEBUG=false
ARG PHP_VERSION=${PHP_VERSION}
2016-12-15 21:13:00 +08:00
RUN if [ ${INSTALL_XDEBUG} = true ]; then \
# Load the xdebug extension only with phpunit commands
apt-get install -y --force-yes php${PHP_VERSION}-xdebug && \
sed -i 's/^;//g' /etc/php/${PHP_VERSION}/cli/conf.d/20-xdebug.ini && \
2016-12-15 21:13:00 +08:00
echo "alias phpunit='php -dzend_extension=xdebug.so /var/www/vendor/bin/phpunit'" >> ~/.bashrc \
;fi
2016-12-15 21:13:00 +08:00
# ADD for REMOTE debugging
COPY ./xdebug.ini /etc/php/${PHP_VERSION}/cli/conf.d/xdebug.ini
2016-12-15 21:13:00 +08:00
###########################################################################
2017-04-21 06:02:54 +08:00
# Blackfire:
###########################################################################
2017-04-21 06:02:54 +08:00
ARG INSTALL_BLACKFIRE=false
ARG BLACKFIRE_CLIENT_ID
ENV BLACKFIRE_CLIENT_ID ${BLACKFIRE_CLIENT_ID}
ARG BLACKFIRE_CLIENT_TOKEN
2017-04-21 06:02:54 +08:00
ENV BLACKFIRE_CLIENT_TOKEN ${BLACKFIRE_CLIENT_TOKEN}
RUN if [ ${INSTALL_XDEBUG} = false -a ${INSTALL_BLACKFIRE} = true ]; then \
curl -L https://packagecloud.io/gpg.key | apt-key add - && \
echo "deb http://packages.blackfire.io/debian any main" | tee /etc/apt/sources.list.d/blackfire.list && \
apt-get update -yqq && \
2017-04-21 06:02:54 +08:00
apt-get install blackfire-agent \
;fi
###########################################################################
2016-12-15 21:13:00 +08:00
# ssh:
###########################################################################
2016-12-15 21:13:00 +08:00
ARG INSTALL_WORKSPACE_SSH=false
COPY insecure_id_rsa /tmp/id_rsa
COPY insecure_id_rsa.pub /tmp/id_rsa.pub
2016-12-15 21:13:00 +08:00
RUN if [ ${INSTALL_WORKSPACE_SSH} = true ]; then \
rm -f /etc/service/sshd/down && \
cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys \
&& cat /tmp/id_rsa.pub >> /root/.ssh/id_rsa.pub \
&& cat /tmp/id_rsa >> /root/.ssh/id_rsa \
&& rm -f /tmp/id_rsa* \
&& chmod 644 /root/.ssh/authorized_keys /root/.ssh/id_rsa.pub \
&& chmod 400 /root/.ssh/id_rsa \
&& cp -rf /root/.ssh /home/laradock \
&& chown -R laradock:laradock /home/laradock/.ssh \
2016-12-15 21:13:00 +08:00
;fi
###########################################################################
2016-12-15 21:13:00 +08:00
# MongoDB:
###########################################################################
2016-12-15 21:13:00 +08:00
ARG INSTALL_MONGO=false
ARG PHP_VERSION=${PHP_VERSION}
2016-12-15 21:13:00 +08:00
RUN if [ ${INSTALL_MONGO} = true ]; then \
# Install the mongodb extension
2017-08-31 21:41:01 +08:00
pecl -q install mongodb && \
echo "extension=mongodb.so" >> /etc/php/${PHP_VERSION}/mods-available/mongodb.ini && \
ln -s /etc/php/${PHP_VERSION}/mods-available/mongodb.ini /etc/php/${PHP_VERSION}/cli/conf.d/30-mongodb.ini \
2016-12-15 21:13:00 +08:00
;fi
###########################################################################
# AMQP:
###########################################################################
ARG INSTALL_AMQP=false
ARG PHP_VERSION=${PHP_VERSION}
RUN if [ ${INSTALL_AMQP} = true ]; then \
apt-get install librabbitmq-dev -y && \
pecl -q install amqp && \
echo "extension=amqp.so" >> /etc/php/${PHP_VERSION}/mods-available/amqp.ini && \
ln -s /etc/php/${PHP_VERSION}/mods-available/amqp.ini /etc/php/${PHP_VERSION}/cli/conf.d/30-amqp.ini \
;fi
###########################################################################
# PHP REDIS EXTENSION
###########################################################################
2017-08-31 21:41:01 +08:00
ARG INSTALL_PHPREDIS=false
ARG PHP_VERSION=${PHP_VERSION}
2017-08-31 21:41:01 +08:00
RUN if [ ${INSTALL_PHPREDIS} = true ]; then \
# Install Php Redis extension
printf "\n" | pecl -q install -o -f redis && \
echo "extension=redis.so" >> /etc/php/${PHP_VERSION}/mods-available/redis.ini && \
2017-08-31 21:41:01 +08:00
phpenmod redis \
;fi
###########################################################################
# Swoole EXTENSION
###########################################################################
2018-01-09 11:25:57 +08:00
ARG INSTALL_SWOOLE=false
ARG PHP_VERSION=${PHP_VERSION}
2018-01-09 11:25:57 +08:00
RUN if [ ${INSTALL_SWOOLE} = true ]; then \
# Install Php Swoole Extension
if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \
pecl -q install swoole-2.0.11; \
else \
pecl -q install swoole; \
fi && \
echo "extension=swoole.so" >> /etc/php/${PHP_VERSION}/mods-available/swoole.ini && \
ln -s /etc/php/${PHP_VERSION}/mods-available/swoole.ini /etc/php/${PHP_VERSION}/cli/conf.d/20-swoole.ini \
2018-01-09 11:25:57 +08:00
;fi
###########################################################################
2017-08-19 22:58:40 +08:00
# Drupal Console:
###########################################################################
2017-08-19 22:58:40 +08:00
USER root
2017-08-19 22:58:40 +08:00
ARG INSTALL_DRUPAL_CONSOLE=false
2017-08-19 22:58:40 +08:00
RUN if [ ${INSTALL_DRUPAL_CONSOLE} = true ]; then \
apt-get -y install mysql-client && \
curl https://drupalconsole.com/installer -L -o drupal.phar && \
mv drupal.phar /usr/local/bin/drupal && \
chmod +x /usr/local/bin/drupal \
;fi
2016-12-15 21:13:00 +08:00
USER laradock
###########################################################################
2016-12-15 21:13:00 +08:00
# Node / NVM:
###########################################################################
2016-12-15 21:13:00 +08:00
# Check if NVM needs to be installed
ARG NODE_VERSION=stable
ENV NODE_VERSION ${NODE_VERSION}
ARG INSTALL_NODE=false
ARG NPM_REGISTRY
ENV NPM_REGISTRY ${NPM_REGISTRY}
2016-12-15 21:13:00 +08:00
ENV NVM_DIR /home/laradock/.nvm
2016-12-15 21:13:00 +08:00
RUN if [ ${INSTALL_NODE} = true ]; then \
# Install nvm (A Node Version Manager)
2018-02-06 14:29:41 +08:00
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash && \
2016-12-15 21:13:00 +08:00
. $NVM_DIR/nvm.sh && \
nvm install ${NODE_VERSION} && \
nvm use ${NODE_VERSION} && \
nvm alias ${NODE_VERSION} && \
if [ ${NPM_REGISTRY} ]; then \
npm config set registry ${NPM_REGISTRY} \
;fi && \
2016-12-15 21:13:00 +08:00
npm install -g gulp bower vue-cli \
;fi
# Wouldn't execute when added to the RUN statement in the above block
# Source NVM when loading bash since ~/.profile isn't loaded on non-login shell
RUN if [ ${INSTALL_NODE} = true ]; then \
echo "" >> ~/.bashrc && \
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc && \
echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.bashrc \
;fi
# Add NVM binaries to root's .bashrc
USER root
RUN if [ ${INSTALL_NODE} = true ]; then \
echo "" >> ~/.bashrc && \
echo 'export NVM_DIR="/home/laradock/.nvm"' >> ~/.bashrc && \
echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.bashrc \
;fi
# Add PATH for node
ENV PATH $PATH:$NVM_DIR/versions/node/v${NODE_VERSION}/bin
RUN if [ ${NPM_REGISTRY} ]; then \
. ~/.bashrc && npm config set registry ${NPM_REGISTRY} \
;fi
###########################################################################
2016-12-15 21:13:00 +08:00
# YARN:
###########################################################################
2016-12-15 21:13:00 +08:00
USER laradock
ARG INSTALL_YARN=false
ARG YARN_VERSION=latest
ENV YARN_VERSION ${YARN_VERSION}
2016-12-15 21:13:00 +08:00
RUN if [ ${INSTALL_YARN} = true ]; then \
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && \
if [ ${YARN_VERSION} = "latest" ]; then \
curl -o- -L https://yarnpkg.com/install.sh | bash; \
else \
curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version ${YARN_VERSION}; \
fi && \
2016-12-15 21:13:00 +08:00
echo "" >> ~/.bashrc && \
echo 'export PATH="$HOME/.yarn/bin:$PATH"' >> ~/.bashrc \
;fi
# Add YARN binaries to root's .bashrc
USER root
RUN if [ ${INSTALL_YARN} = true ]; then \
echo "" >> ~/.bashrc && \
echo 'export YARN_DIR="/home/laradock/.yarn"' >> ~/.bashrc && \
echo 'export PATH="$YARN_DIR/bin:$PATH"' >> ~/.bashrc \
;fi
###########################################################################
2016-12-15 21:13:00 +08:00
# PHP Aerospike:
###########################################################################
2016-12-15 21:13:00 +08:00
USER root
2017-05-07 22:56:15 +08:00
ARG INSTALL_AEROSPIKE=false
ARG PHP_VERSION=${PHP_VERSION}
ARG AEROSPIKE_PHP_REPOSITORY
2016-12-15 21:13:00 +08:00
2017-05-07 22:54:55 +08:00
RUN if [ ${INSTALL_AEROSPIKE} = true ]; then \
2017-05-07 22:56:15 +08:00
# Fix dependencies for PHPUnit within aerospike extension
apt-get -y install sudo wget && \
2016-12-15 21:13:00 +08:00
# Install the php aerospike extension
curl -L -o /tmp/aerospike-client-php.tar.gz ${AEROSPIKE_PHP_REPOSITORY} \
2016-12-15 21:13:00 +08:00
&& mkdir -p aerospike-client-php \
&& tar -C aerospike-client-php -zxvf /tmp/aerospike-client-php.tar.gz --strip 1 \
&& ( \
cd aerospike-client-php/src \
2016-12-15 21:13:00 +08:00
&& phpize \
&& ./build.sh \
&& make install \
) \
&& rm /tmp/aerospike-client-php.tar.gz \
&& echo 'extension=aerospike.so' >> /etc/php/${PHP_VERSION}/cli/conf.d/aerospike.ini \
&& echo 'aerospike.udf.lua_system_path=/usr/local/aerospike/lua' >> /etc/php/${PHP_VERSION}/cli/conf.d/aerospike.ini \
&& echo 'aerospike.udf.lua_user_path=/usr/local/aerospike/usr-lua' >> /etc/php/${PHP_VERSION}/cli/conf.d/aerospike.ini \
2016-12-15 21:13:00 +08:00
;fi
###########################################################################
# PHP V8JS:
###########################################################################
USER root
2017-05-07 22:54:55 +08:00
ARG INSTALL_V8JS=false
ARG PHP_VERSION=${PHP_VERSION}
2017-05-07 22:54:55 +08:00
RUN if [ ${INSTALL_V8JS} = true ]; then \
# Install the php V8JS extension
add-apt-repository -y ppa:pinepain/libv8-archived \
&& apt-get update -yqq \
&& apt-get install -y php${PHP_VERSION}-xml php${PHP_VERSION}-dev php-pear libv8-5.4 \
&& pecl install v8js \
&& echo "extension=v8js.so" >> /etc/php/${PHP_VERSION}/cli/php.ini \
;fi
###########################################################################
# Laravel Envoy:
###########################################################################
USER laradock
ARG INSTALL_LARAVEL_ENVOY=false
RUN if [ ${INSTALL_LARAVEL_ENVOY} = true ]; then \
# Install the Laravel Envoy
composer global require "laravel/envoy=~1.0" \
;fi
###########################################################################
# Laravel Installer:
###########################################################################
USER root
ARG COMPOSER_REPO_PACKAGIST
ENV COMPOSER_REPO_PACKAGIST ${COMPOSER_REPO_PACKAGIST}
RUN if [ ${COMPOSER_REPO_PACKAGIST} ]; then \
composer config -g repo.packagist composer ${COMPOSER_REPO_PACKAGIST} \
;fi
ARG INSTALL_LARAVEL_INSTALLER=false
RUN if [ ${INSTALL_LARAVEL_INSTALLER} = true ]; then \
# Install the Laravel Installer
composer global require "laravel/installer" \
;fi
###########################################################################
# Deployer:
###########################################################################
USER root
ARG INSTALL_DEPLOYER=false
RUN if [ ${INSTALL_DEPLOYER} = true ]; then \
# Install the Deployer
# Using Phar as currently there is no support for laravel 4 from composer version
# Waiting to be resolved on https://github.com/deployphp/deployer/issues/1552
curl -LO https://deployer.org/deployer.phar && \
mv deployer.phar /usr/local/bin/dep && \
chmod +x /usr/local/bin/dep \
;fi
###########################################################################
# Prestissimo:
###########################################################################
USER laradock
ARG INSTALL_PRESTISSIMO=false
RUN if [ ${INSTALL_PRESTISSIMO} = true ]; then \
# Install Prestissimo
composer global require "hirak/prestissimo" \
;fi
###########################################################################
# Linuxbrew:
###########################################################################
USER root
ARG INSTALL_LINUXBREW=false
RUN if [ ${INSTALL_LINUXBREW} = true ]; then \
# Preparation
apt-get upgrade -y && \
apt-get install -y build-essential make cmake scons curl git \
ruby autoconf automake autoconf-archive \
gettext libtool flex bison \
libbz2-dev libcurl4-openssl-dev \
libexpat-dev libncurses-dev && \
# Install the Linuxbrew
2017-05-04 17:41:02 +08:00
git clone --depth=1 https://github.com/Homebrew/linuxbrew.git ~/.linuxbrew && \
echo "" >> ~/.bashrc && \
echo 'export PKG_CONFIG_PATH"=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig:$PKG_CONFIG_PATH"' >> ~/.bashrc && \
# Setup linuxbrew
echo 'export LINUXBREWHOME="$HOME/.linuxbrew"' >> ~/.bashrc && \
echo 'export PATH="$LINUXBREWHOME/bin:$PATH"' >> ~/.bashrc && \
echo 'export MANPATH="$LINUXBREWHOME/man:$MANPATH"' >> ~/.bashrc && \
echo 'export PKG_CONFIG_PATH="$LINUXBREWHOME/lib64/pkgconfig:$LINUXBREWHOME/lib/pkgconfig:$PKG_CONFIG_PATH"' >> ~/.bashrc && \
echo 'export LD_LIBRARY_PATH="$LINUXBREWHOME/lib64:$LINUXBREWHOME/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc \
;fi
###########################################################################
# SQL SERVER:
###########################################################################
ARG INSTALL_MSSQL=false
ARG PHP_VERSION=${PHP_VERSION}
RUN set -eux; if [ ${INSTALL_MSSQL} = true ]; then \
2018-06-11 14:23:40 +08:00
if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \
apt-get -y install php5.6-sybase freetds-bin freetds-common libsybdb5 \
&& php -m | grep -q 'mssql' \
&& php -m | grep -q 'pdo_dblib' \
;else \
###########################################################################
# The following steps were taken from
# https://github.com/Microsoft/msphpsql/wiki/Install-and-configuration
###########################################################################
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list && \
apt-get update -yqq && \
ACCEPT_EULA=Y apt-get install -yqq msodbcsql=13.0.1.0-1 mssql-tools=14.0.2.0-1 && \
apt-get install -yqq unixodbc-dev-utf16 && \
ln -sfn /opt/mssql-tools/bin/sqlcmd-13.0.1.0 /usr/bin/sqlcmd && \
ln -sfn /opt/mssql-tools/bin/bcp-13.0.1.0 /usr/bin/bcp && \
ACCEPT_EULA=Y apt-get install -yqq \
unixodbc \
unixodbc-dev \
libgss3 \
odbcinst \
msodbcsql \
locales && \
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \
locale-gen && \
pecl install sqlsrv-4.3.0 pdo_sqlsrv-4.3.0 && \
apt-get install -y locales && \
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \
locale-gen && \
echo "extension=sqlsrv.so" > /etc/php/${PHP_VERSION}/cli/conf.d/20-sqlsrv.ini && \
echo "extension=pdo_sqlsrv.so" > /etc/php/${PHP_VERSION}/cli/conf.d/20-pdo_sqlsrv.ini \
&& php -m | grep -q 'sqlsrv' \
&& php -m | grep -q 'pdo_sqlsrv' \
;fi \
;fi
###########################################################################
# Minio:
###########################################################################
USER root
COPY mc/config.json /root/.mc/config.json
ARG INSTALL_MC=false
RUN if [ ${INSTALL_MC} = true ]; then\
curl -fsSL -o /usr/local/bin/mc https://dl.minio.io/client/mc/release/linux-amd64/mc && \
chmod +x /usr/local/bin/mc \
;fi
###########################################################################
# Image optimizers:
###########################################################################
USER root
ARG INSTALL_IMAGE_OPTIMIZERS=false
RUN if [ ${INSTALL_IMAGE_OPTIMIZERS} = true ]; then \
apt-get install -y --force-yes jpegoptim optipng pngquant gifsicle && \
if [ ${INSTALL_NODE} = true ]; then \
. ~/.bashrc && npm install -g svgo \
;fi\
;fi
USER laradock
###########################################################################
# Symfony:
###########################################################################
USER root
ARG INSTALL_SYMFONY=false
RUN if [ ${INSTALL_SYMFONY} = true ]; then \
mkdir -p /usr/local/bin \
&& curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony \
&& chmod a+x /usr/local/bin/symfony \
# Symfony 3 alias
&& echo 'alias dev="php bin/console -e=dev"' >> ~/.bashrc \
&& echo 'alias prod="php bin/console -e=prod"' >> ~/.bashrc \
# Symfony 2 alias
# && echo 'alias dev="php app/console -e=dev"' >> ~/.bashrc \
# && echo 'alias prod="php app/console -e=prod"' >> ~/.bashrc \
;fi
###########################################################################
# PYTHON:
###########################################################################
ARG INSTALL_PYTHON=false
RUN if [ ${INSTALL_PYTHON} = true ]; then \
apt-get -y install python python-pip python-dev build-essential \
2018-05-20 19:22:30 +08:00
&& python -m pip install --upgrade pip \
&& python -m pip install --upgrade virtualenv \
2017-07-08 18:58:05 +08:00
;fi
###########################################################################
2017-09-05 07:36:24 +08:00
# ImageMagick:
###########################################################################
2017-09-05 07:36:24 +08:00
USER root
2017-09-05 07:36:24 +08:00
ARG INSTALL_IMAGEMAGICK=false
2017-09-05 07:36:24 +08:00
RUN if [ ${INSTALL_IMAGEMAGICK} = true ]; then \
apt-get install -y --force-yes imagemagick php-imagick \
2017-09-05 07:36:24 +08:00
;fi
###########################################################################
# Terraform:
###########################################################################
USER root
ARG INSTALL_TERRAFORM=false
RUN if [ ${INSTALL_TERRAFORM} = true ]; then \
apt-get -y install sudo wget unzip \
&& wget https://releases.hashicorp.com/terraform/0.10.6/terraform_0.10.6_linux_amd64.zip \
&& unzip terraform_0.10.6_linux_amd64.zip \
&& mv terraform /usr/local/bin \
&& rm terraform_0.10.6_linux_amd64.zip \
;fi
###########################################################################
# pgsql client
###########################################################################
USER root
ARG INSTALL_PG_CLIENT=false
RUN if [ ${INSTALL_PG_CLIENT} = true ]; then \
# Install the pgsql client
apt-get -y install postgresql-client \
;fi
###########################################################################
Install Dependencies to Run Dusk Tests **Why we need this change?** Currently we are unable to run Dusk (Browser) tests in workspace container. This change, is to allow us to install all dependencies needed to run Dust test which consists of 1. Linux packages such as xvfb (x-virtual frame buffer to run browser in headless container) and etc. 2. Chrome browser. 3. Chrome driver. To install the Dusk dependencies. 1. Update `WORKSPACE_INSTALL_DUSK_DEPS` to true. 2. Run `docker-compose build workspace`. I've also added couple of aliases to facilitate the preparation of test environment. 1. xvfb = `Xvfb -ac :0 -screen 0 1024x768x16 &` (run x-virtual frame buffer in the background) 2. serve = `php artisan serve --quiet &` (run laravel app in the background) Once those are installed, we will need to update the default chrome driver argument in Laravel 5.5 from `--headless` to `sandbox`. Below are the steps to run Dusk in workspace. 1. `docker-compose run workspace bash` (get into workspace). 2. `laravel new dusk-test` (generate new lavarel app for testing purpose). 3. `cd dusk-test` (change directory to newly generate app folder). 4. `composer install --dev laravel/dusk` (install dusk via composer). 5. `php artisan dusk:install` (generate dusk files). 6. `sed -i '/APP_URL/d' .env` (remove APP_URL entry in .env) 7. `echo 'APP_URL=localhost:8000' >> .env` (add new APP_URL entry in .env) 8. `sed -i--'s/headless/no-sandbox/g' tests/DuskTestCase.php` (replace the default chrome driver argument). 9. `xvfb` (alias to run Xvfb instance in the background). 10. `serve` (alias to run laravel app in the background). 11. `dusk` (alias to run Dusk test).
2017-09-28 17:59:16 +08:00
# Dusk Dependencies:
###########################################################################
Install Dependencies to Run Dusk Tests **Why we need this change?** Currently we are unable to run Dusk (Browser) tests in workspace container. This change, is to allow us to install all dependencies needed to run Dust test which consists of 1. Linux packages such as xvfb (x-virtual frame buffer to run browser in headless container) and etc. 2. Chrome browser. 3. Chrome driver. To install the Dusk dependencies. 1. Update `WORKSPACE_INSTALL_DUSK_DEPS` to true. 2. Run `docker-compose build workspace`. I've also added couple of aliases to facilitate the preparation of test environment. 1. xvfb = `Xvfb -ac :0 -screen 0 1024x768x16 &` (run x-virtual frame buffer in the background) 2. serve = `php artisan serve --quiet &` (run laravel app in the background) Once those are installed, we will need to update the default chrome driver argument in Laravel 5.5 from `--headless` to `sandbox`. Below are the steps to run Dusk in workspace. 1. `docker-compose run workspace bash` (get into workspace). 2. `laravel new dusk-test` (generate new lavarel app for testing purpose). 3. `cd dusk-test` (change directory to newly generate app folder). 4. `composer install --dev laravel/dusk` (install dusk via composer). 5. `php artisan dusk:install` (generate dusk files). 6. `sed -i '/APP_URL/d' .env` (remove APP_URL entry in .env) 7. `echo 'APP_URL=localhost:8000' >> .env` (add new APP_URL entry in .env) 8. `sed -i--'s/headless/no-sandbox/g' tests/DuskTestCase.php` (replace the default chrome driver argument). 9. `xvfb` (alias to run Xvfb instance in the background). 10. `serve` (alias to run laravel app in the background). 11. `dusk` (alias to run Dusk test).
2017-09-28 17:59:16 +08:00
USER root
ARG CHROME_DRIVER_VERSION=stable
ENV CHROME_DRIVER_VERSION ${CHROME_DRIVER_VERSION}
Install Dependencies to Run Dusk Tests **Why we need this change?** Currently we are unable to run Dusk (Browser) tests in workspace container. This change, is to allow us to install all dependencies needed to run Dust test which consists of 1. Linux packages such as xvfb (x-virtual frame buffer to run browser in headless container) and etc. 2. Chrome browser. 3. Chrome driver. To install the Dusk dependencies. 1. Update `WORKSPACE_INSTALL_DUSK_DEPS` to true. 2. Run `docker-compose build workspace`. I've also added couple of aliases to facilitate the preparation of test environment. 1. xvfb = `Xvfb -ac :0 -screen 0 1024x768x16 &` (run x-virtual frame buffer in the background) 2. serve = `php artisan serve --quiet &` (run laravel app in the background) Once those are installed, we will need to update the default chrome driver argument in Laravel 5.5 from `--headless` to `sandbox`. Below are the steps to run Dusk in workspace. 1. `docker-compose run workspace bash` (get into workspace). 2. `laravel new dusk-test` (generate new lavarel app for testing purpose). 3. `cd dusk-test` (change directory to newly generate app folder). 4. `composer install --dev laravel/dusk` (install dusk via composer). 5. `php artisan dusk:install` (generate dusk files). 6. `sed -i '/APP_URL/d' .env` (remove APP_URL entry in .env) 7. `echo 'APP_URL=localhost:8000' >> .env` (add new APP_URL entry in .env) 8. `sed -i--'s/headless/no-sandbox/g' tests/DuskTestCase.php` (replace the default chrome driver argument). 9. `xvfb` (alias to run Xvfb instance in the background). 10. `serve` (alias to run laravel app in the background). 11. `dusk` (alias to run Dusk test).
2017-09-28 17:59:16 +08:00
ARG INSTALL_DUSK_DEPS=false
Install Dependencies to Run Dusk Tests **Why we need this change?** Currently we are unable to run Dusk (Browser) tests in workspace container. This change, is to allow us to install all dependencies needed to run Dust test which consists of 1. Linux packages such as xvfb (x-virtual frame buffer to run browser in headless container) and etc. 2. Chrome browser. 3. Chrome driver. To install the Dusk dependencies. 1. Update `WORKSPACE_INSTALL_DUSK_DEPS` to true. 2. Run `docker-compose build workspace`. I've also added couple of aliases to facilitate the preparation of test environment. 1. xvfb = `Xvfb -ac :0 -screen 0 1024x768x16 &` (run x-virtual frame buffer in the background) 2. serve = `php artisan serve --quiet &` (run laravel app in the background) Once those are installed, we will need to update the default chrome driver argument in Laravel 5.5 from `--headless` to `sandbox`. Below are the steps to run Dusk in workspace. 1. `docker-compose run workspace bash` (get into workspace). 2. `laravel new dusk-test` (generate new lavarel app for testing purpose). 3. `cd dusk-test` (change directory to newly generate app folder). 4. `composer install --dev laravel/dusk` (install dusk via composer). 5. `php artisan dusk:install` (generate dusk files). 6. `sed -i '/APP_URL/d' .env` (remove APP_URL entry in .env) 7. `echo 'APP_URL=localhost:8000' >> .env` (add new APP_URL entry in .env) 8. `sed -i--'s/headless/no-sandbox/g' tests/DuskTestCase.php` (replace the default chrome driver argument). 9. `xvfb` (alias to run Xvfb instance in the background). 10. `serve` (alias to run laravel app in the background). 11. `dusk` (alias to run Dusk test).
2017-09-28 17:59:16 +08:00
RUN if [ ${INSTALL_DUSK_DEPS} = true ]; then \
apt-get -y install zip wget unzip xdg-utils \
Install Dependencies to Run Dusk Tests **Why we need this change?** Currently we are unable to run Dusk (Browser) tests in workspace container. This change, is to allow us to install all dependencies needed to run Dust test which consists of 1. Linux packages such as xvfb (x-virtual frame buffer to run browser in headless container) and etc. 2. Chrome browser. 3. Chrome driver. To install the Dusk dependencies. 1. Update `WORKSPACE_INSTALL_DUSK_DEPS` to true. 2. Run `docker-compose build workspace`. I've also added couple of aliases to facilitate the preparation of test environment. 1. xvfb = `Xvfb -ac :0 -screen 0 1024x768x16 &` (run x-virtual frame buffer in the background) 2. serve = `php artisan serve --quiet &` (run laravel app in the background) Once those are installed, we will need to update the default chrome driver argument in Laravel 5.5 from `--headless` to `sandbox`. Below are the steps to run Dusk in workspace. 1. `docker-compose run workspace bash` (get into workspace). 2. `laravel new dusk-test` (generate new lavarel app for testing purpose). 3. `cd dusk-test` (change directory to newly generate app folder). 4. `composer install --dev laravel/dusk` (install dusk via composer). 5. `php artisan dusk:install` (generate dusk files). 6. `sed -i '/APP_URL/d' .env` (remove APP_URL entry in .env) 7. `echo 'APP_URL=localhost:8000' >> .env` (add new APP_URL entry in .env) 8. `sed -i--'s/headless/no-sandbox/g' tests/DuskTestCase.php` (replace the default chrome driver argument). 9. `xvfb` (alias to run Xvfb instance in the background). 10. `serve` (alias to run laravel app in the background). 11. `dusk` (alias to run Dusk test).
2017-09-28 17:59:16 +08:00
libxpm4 libxrender1 libgtk2.0-0 libnss3 libgconf-2-4 xvfb \
gtk2-engines-pixbuf xfonts-cyrillic xfonts-100dpi xfonts-75dpi \
xfonts-base xfonts-scalable x11-apps \
&& wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
&& dpkg -i --force-depends google-chrome-stable_current_amd64.deb \
&& apt-get -y -f install \
&& dpkg -i --force-depends google-chrome-stable_current_amd64.deb \
&& rm google-chrome-stable_current_amd64.deb \
&& wget https://chromedriver.storage.googleapis.com/${CHROME_DRIVER_VERSION}/chromedriver_linux64.zip \
Install Dependencies to Run Dusk Tests **Why we need this change?** Currently we are unable to run Dusk (Browser) tests in workspace container. This change, is to allow us to install all dependencies needed to run Dust test which consists of 1. Linux packages such as xvfb (x-virtual frame buffer to run browser in headless container) and etc. 2. Chrome browser. 3. Chrome driver. To install the Dusk dependencies. 1. Update `WORKSPACE_INSTALL_DUSK_DEPS` to true. 2. Run `docker-compose build workspace`. I've also added couple of aliases to facilitate the preparation of test environment. 1. xvfb = `Xvfb -ac :0 -screen 0 1024x768x16 &` (run x-virtual frame buffer in the background) 2. serve = `php artisan serve --quiet &` (run laravel app in the background) Once those are installed, we will need to update the default chrome driver argument in Laravel 5.5 from `--headless` to `sandbox`. Below are the steps to run Dusk in workspace. 1. `docker-compose run workspace bash` (get into workspace). 2. `laravel new dusk-test` (generate new lavarel app for testing purpose). 3. `cd dusk-test` (change directory to newly generate app folder). 4. `composer install --dev laravel/dusk` (install dusk via composer). 5. `php artisan dusk:install` (generate dusk files). 6. `sed -i '/APP_URL/d' .env` (remove APP_URL entry in .env) 7. `echo 'APP_URL=localhost:8000' >> .env` (add new APP_URL entry in .env) 8. `sed -i--'s/headless/no-sandbox/g' tests/DuskTestCase.php` (replace the default chrome driver argument). 9. `xvfb` (alias to run Xvfb instance in the background). 10. `serve` (alias to run laravel app in the background). 11. `dusk` (alias to run Dusk test).
2017-09-28 17:59:16 +08:00
&& unzip chromedriver_linux64.zip \
&& mv chromedriver /usr/local/bin/ \
&& rm chromedriver_linux64.zip \
;fi
###########################################################################
# Check PHP version:
###########################################################################
ARG PHP_VERSION=${PHP_VERSION}
RUN php -v | head -n 1 | grep -q "PHP ${PHP_VERSION}."
2016-12-15 21:13:00 +08:00
#
#--------------------------------------------------------------------------
# Final Touch
#--------------------------------------------------------------------------
#
USER root
# Clean up
2016-12-15 21:13:00 +08:00
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
rm /var/log/lastlog /var/log/faillog
2016-12-15 21:13:00 +08:00
# Set default work directory
WORKDIR /var/www