--- tags: DevOps --- # Docker tutorial PART II > Use docker to build laravel environment ### Create dockerfile ``` $ mkdir -p /dockerfile/php-fpm $ cd /dockerfile/php-fpm $ touch Dockerfile $ vim Dockerfile ``` ### Dockerfile ```dockerfile= FROM php:7.1-fpm MAINTAINER BoZhiLin RUN apt update && apt install -y \ vim \ git \ wget \ libzip-dev \ zip \ && docker-php-ext-configure zip --with-libzip \ && docker-php-ext-install zip \ pdo \ pdo_mysql RUN wget -c https://getcomposer.org/composer.phar \ && chmod u+x composer.phar \ && mv composer.phar /usr/local/bin/composer RUN chown -R www-data:www-data /var/www/ WORKDIR /var/www/ CMD ["php-fpm"] ``` ### Build image ```$ docker build -t php-fpm:01 . --no-cache``` ### Push to Docker Hub ``` $ docker login $ docker tag php-fpm:01 bozhilin/php-fpm:7.1 $ docker push bozhilin/php-fpm:7.1 ``` ### Create config for Nginx ``` $ mkdir -p /dockerfile/nginx/conf.d $ cd /dockerfile/nginx/conf.d $ touch default.conf $ vim default.conf ``` ### default.conf * fastcgi_pass laravel-app * fastcgi+param DB_HOST mysql ```nginx= server { listen 80 default_server; server_name _; root /var/www/blog/public; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } error_page 404 /index.php; sendfile off; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass laravel-app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param DB_HOST mysql; fastcgi_param BEANSTALKD_HOST dev_queue; } location ~ /\.ht { deny all; } } ``` ### MySQL container ```$ docker run -d --name mysql -v /var/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=blog mysql:5.7``` ### Clone or create laravel project ``` $ cd /var/www $ composer create-project laravel/laravel blog 5.7.* $ cd blog/ $ vim .env ``` ### DB parameters ``` DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=blog DB_USERNAME=root DB_PASSWORD=root ``` ### PHP-FPM container ```$ docker run -itd --name laravel-app -v /var/www:/var/www --link mysql:mysql bozhilin/php-fpm:7.1``` ### Nginx container ```$ docker run -d --name nginx-server -p 8080:80 -v /var/www:/var/www -v /dockerfile/nginx/conf.d/:/etc/nginx/conf.d/ --link laravel-app:laravel-app nginx``` ```$ chown -R www-data:www-data /var/www``` ### Open website with browser ![](https://i.imgur.com/p77VoSn.png) ### Create tables with migrations ``` $ docker exec -ti laravel-app php /var/www/blog/artisan migrate $ docker exec -ti laravel-app php /var/www/blog/artisan make:auth ```