This repostory currently only maintains the update of Dockerfile. It is recommended to use my latest php environment bash.
Adopting a port-based environment, it is easier to integrate and use the proxy, and it has more functions.
https://github.com/DevinY/phpenv
D-Laravel (English manual)
D-Laravel uses docker-composer micro service framework,
it helps you quickly to build basic Laravel development environment by using simple commands: console and create.
Using D-Laravel also means no longer to install mysql, nginx and php-fpm in Mac.
You can deploy the environment by self-defined docker-compose-custom.yml file.
Why use D-Laravel
It Provides easy way to execute the docker-compose command, quickly generate a laravel project environment, and automatically build a database and adjust Laravel's .env database settings for you.
The sublime3 package of D-Laravel alias can be installed, and the artisan and composer commands in the container (MacOS and Linux environment) are executed via sublime.
You can execute the latest PHP version in Mac OS.
It helps you to generate self-signed certification and completes HTTPS setting.
No need to install DnsMasq.
Port 80 won't be used when not start dlaravel.
Initial speed in seconds!!!
It can simulate different DB environment.
It also could open kinds of testing hosts.
Easy docker-compose v3.6 setting.
Using Dockerhub to remark official image to build basic Laravel environment.
It seems fashion if use docker. :P
./console help (help, console parameter) ./create test1 (build test1.test) ./console down or ./console up (stop or start container) ./console restart (first ./console down and then ./console up) `./console alias` (If you think ./console command is too log, you could create c alias in terminal which simplifies command to "c info", "c up", or "c down") ./console alias (print console alias samples, it can be added to .bashrc or .zshrc) ./console version Generate self-signed certificate for all current projects. (MacOS and Linux) ./console secure
Main Directory structure
etc/ (nginx、php.ini and mysql settings) data/ (mysql data files, auto-generated by ./console up) dockerfiles/ (some dockerfiles) sites/ (project files, the project will be set in this folder when executes ./create test1) create (Simplified bash, to fast build laravel project) console (Simplified bash file, to use kinds of docker-compose commands. ex. login mysql by "./console mysql") docker-compose.yml (A soft link to connect different settings. ex. linking to docker-compose-custom.yml by "./console custom")
1. Please install docker.
Mac OS: https://docs.docker.com/docker-for-mac/ Ubuntu: https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/#install-docker-ce Windows 10: (required for laravel install in gitbash!!) https://docs.docker.com/docker-for-windows/install/ To run console and create bash on Windows 10: Gitbash is required. Laravel installer have to run correctly in gitbash also.
2. git clone D-Laravel repo and execute "./console pull" in the folder
git clone https://github.com/DevinY/dlaravel.git cd dlaravel You can ignore below's pull command. It will auto download the images according to docker-compose.yml when initials. ./console pull The first time to download needed images from dockhub will take longer time. Be patient. :P
3. execute "./create ['project name']" to biuild new project
ex. ./create test1 It will build http://test1.test website (can't be accessed from outside) So you can use this command to build many different projects. You need to provide privilege to modify /etc/hosts file, so D-Laravel will ask for your systme password during executing "./create project". (Mac OS using only)
4. executing "./console down" in D-Laravel foldee
Attention: D-Laravel is only used for development, Mysql root password is empty. You may need to revise TZ in docker-compose.yml, default is Asia/Taipei.
5. Updating D-Laravel bash program and some settings
git pull .gitignore in D-Laravel already excludes dynamic files, ex. docker-comnpose.yml, docker-compose-custom.yml, sites folder etc. You can git pull latest version and setting in D-Laravel folder.
6. alias and function (without entering the container can be implemented within the container composer or artisan instructions)
Get the console alias in your system.
./console alias
And then add the output to your ~/.bash_profile, or ~/.zshrc if you are using Z shell. The OS X won't create .bash_profile for you. Type 'touch ~/.bash_profile' to create your new one.
Execute the laravel installer in the container using the identity of dlaravel
alias laravel='docker-compose exec -u dlaravel php /home/dlaravel/.composer/vendor/bin/laravel'
run composer.sh in project folder, for example: ce dump
alias ce="../../composer.sh"
We can add aliases to our computer so that you do not have to go into the container to execute the php artisan directive. Let artisan's instructions be more concise, which I call the alias directly as a. For example: a --version
alias a="../../artisan.sh"
alias phpunit = 'docker-compose -f ../../docker-compose.yml exec -u dlaravel php $ (basename $ {PWD}) / vendor / bin / phpunit -c $ (basename $ {PWD}) / phpunit.xml '
Join this alias can do simple phpunit.
Others
./create [project name] will create and build laravel, it would set all configures automatically including DB. But how do we do if project already exists and only needs nginx setting? Using "--host" to update /etc/hosts file, for example: "127.0.0.1 project1.test". ./create --host [project name] (./create --host project1) You can move exist Laravel project to D-Laravel site folder. Or manually executes "composer create-project" (not default version etc.) Ex. Create project manually by using lumen ./console exec //It can execute php command in container. ./console exec php composer create-project --prefer-dist laravel/lumen project1
Adjust images in setting
PHP: Official repository rebuilds php to fit Laravel environment
image: deviny/fpm:7.3.5 image: deviny/fpm:7.2.18 image: deviny/fpm:7.1.29 image: deviny/fpm:5.6.39
Nginx: OFFICIAL REPOSITORY
Mysql: OFFICIAL REPOSITORY
Remark: When you need to revise different mysql version and that D-Laravel/data already exist, you may need to reset DB name in D-Laravel.data to ensure mysql image works normally.
Ex. Rename data to data_mysql8
db: image: mysql:8 ... volumes: - ./etc/mysql/my.cnf:/etc/mysql/my.cnf - ./data_mysql8:/var/lib/mysql
Advandace
If you would like to rebuild your own php-fpm image. You can do as below:
cd dockerfiles/fpm/7.3 docker build -t myfpm .
And then edit Your docker-compose.yml file.
php: network_mode: "service:web" image: myfpm
Docker commands and Devin/dlaravel "./console" bash command comparison table
Docker official commands | simplified ./console Bash commands | Describtion |
---|---|---|
docker-compose pull | ./console pull | pull latest images |
docker-compose up -d | ./console up | start container |
docker-compose down | ./console down | stop container |
docker-compose ps or docker ps | ./console ps | show docker-compose process |
docker-compose exec -u dlaravel php bash | ./console | access php container |
docker-compose exec php command | ./console exec command | execute php container command,ex. ./console exec php -v |
docker-compose exec db mysql | ./console mysql | exectue mysql |
docker-compose exec web nginx -s reload | ./console reload | reload nginx setting |
docker-compose logs -f [SERVICE] | ./console logs | show nginx log,stop it with Ctrl+C |
./create [ProjectName] | create a project with default settings | |
Ex. ./create test1 | Ex. create a http://test1.test website | |
./console restart | restart container | |
./console info | show url info | |
Switch model: | ||
./console random | using random port when initiate container | |
./console normal | using local port 80 and 127.0.0.1:3306 | |
./console custom | using self-defined docker-compose-custom.yml | |
command below: -f: specific docker-compose.yml path。 up -d:start container in background | ||
docker-compose -f docker-compose-normal.yml up -d | using port 80 and port 3306 | |
docker-compose -f docker-compose-random.yml up -d | specific yml file with random port |