{"id":717,"date":"2024-11-20T20:37:22","date_gmt":"2024-11-21T01:37:22","guid":{"rendered":"https:\/\/waterloobae.com\/?p=717"},"modified":"2025-08-20T14:24:12","modified_gmt":"2025-08-20T18:24:12","slug":"laravel-how-to-build-laravel-application-with-docker-1-2","status":"publish","type":"post","link":"https:\/\/waterloobae.com\/blog\/2024\/11\/20\/laravel-how-to-build-laravel-application-with-docker-1-2\/","title":{"rendered":"[Laravel] How to build Laravel application with Docker 1\/2"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">First Setup<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run following command from the directory you would like to start building Laravel application.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">% curl -s \"https:\/\/laravel.build\/app_name\" | bash \n% cd app_name<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then, Sail script is also installed in the application directory. Sail helps to run artisan command in to application Docker containers. So, it is easier to include sail in the PATH environment variable.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">%alias sail='sh $([ -f sail ] &amp;&amp; echo sail || echo vendor\/bin\/sail)'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To make sure this is always available, you may add this to your shell configuration file in your home directory, such as&nbsp;<code>~\/.zshrc<\/code>&nbsp;or&nbsp;<code>~\/.bashrc<\/code>, and then restart your shell.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">% sail up -d\n% sail composer require laravel\/breeze --dev\n% sail artisan breeze:install\n% sail artisan migrate\n% npm install\n% npm run dev<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">DB Tables and Models<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tables and models can be created with artisan commands as below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">% sail artisan make:model MyClass -m\n% sail artisan migrate\n% sail artisan migrate:rollback ## if needed to rollback one migration.<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Authorization<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">authorization can be simplified with aids of middleware. Commands below show some of examples.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">% sail artisan make:migration add_role_to_users_table \n% sail artisan migrate\n% sail artisan make:controller\n% sail artisan make:middleware CheckUserRole\n% sail artisan make:controller MyController --resource\n% sail artisan route:list<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">When application needs to be developed by other machines or developers. It can be pushed to Git repository with .gitignore below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"\" class=\"\">\/.phpunit.cache\n\/node_modules\n\/public\/build\n\/public\/hot\n\/public\/storage\n\/storage\/*.key\n\/vendor\n.env\n.env.backup\n.env.production\n.phpactor.json\n.phpunit.result.cache\nHomestead.json\nHomestead.yaml\nauth.json\nnpm-debug.log\nyarn-error.log\n\/.fleet\n\/.idea\n\/.vscode\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>First Setup Run following command from the directory you would like to start building Laravel application. Then, Sail script is also installed in the application directory. Sail helps to run artisan command in to application Docker containers. So, it is easier to include sail in the PATH environment variable. To make sure this is always [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,14],"tags":[],"class_list":["post-717","post","type-post","status-publish","format-standard","hentry","category-it-tips","category-laravel"],"_links":{"self":[{"href":"https:\/\/waterloobae.com\/blog\/wp-json\/wp\/v2\/posts\/717","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/waterloobae.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/waterloobae.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/waterloobae.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/waterloobae.com\/blog\/wp-json\/wp\/v2\/comments?post=717"}],"version-history":[{"count":5,"href":"https:\/\/waterloobae.com\/blog\/wp-json\/wp\/v2\/posts\/717\/revisions"}],"predecessor-version":[{"id":797,"href":"https:\/\/waterloobae.com\/blog\/wp-json\/wp\/v2\/posts\/717\/revisions\/797"}],"wp:attachment":[{"href":"https:\/\/waterloobae.com\/blog\/wp-json\/wp\/v2\/media?parent=717"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/waterloobae.com\/blog\/wp-json\/wp\/v2\/categories?post=717"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/waterloobae.com\/blog\/wp-json\/wp\/v2\/tags?post=717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}