Docker Compose helper script
<p>Make a new file at the root folder called <code>dc</code> without extension.</p><p>Content example. Modify for your needs.</p><div class=highlight><pre tabindex=0 style=color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868"> 1</span><span><span style=color:#cd2828;font-weight:700>#!/bin/bash
</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868"> 2</span><span><span style=color:#cd2828;font-weight:700></span><span style=color:#24909d>trap</span> <span style=color:#ed9d13>"exit"</span> <span style=color:#3677a9>0</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868"> 3</span><span><span style=color:#40ffff>DC</span>=<span style=color:#ed9d13>"docker compose"</span> <span style=color:#999;font-style:italic># add `-f docker/compose.yml` if it's in another folder</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868"> 4</span><span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868"> 5</span><span><span style=color:#6ab825;font-weight:700>if</span> [ <span style=color:#40ffff>$#</span> -eq <span style=color:#3677a9>0</span> ]; <span style=color:#6ab825;font-weight:700>then</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868"> 6</span><span> <span style=color:#40ffff>$DC</span> ps -a
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868"> 7</span><span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868"> 8</span><span><span style=color:#6ab825;font-weight:700>elif</span> [ <span style=color:#40ffff>$1</span> == <span style=color:#ed9d13>"up"</span> ]; <span style=color:#6ab825;font-weight:700>then</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868"> 9</span><span> <span style=color:#40ffff>$DC</span> up -d
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">10</span><span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">11</span><span><span style=color:#6ab825;font-weight:700>elif</span> [ <span style=color:#40ffff>$1</span> == <span style=color:#ed9d13>"php"</span> ]; <span style=color:#6ab825;font-weight:700>then</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">12</span><span> <span style=color:#6ab825;font-weight:700>if</span> [ <span style=color:#40ffff>$#</span> -gt <span style=color:#3677a9>1</span> ]; <span style=color:#6ab825;font-weight:700>then</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">13</span><span> <span style=color:#40ffff>$DC</span> <span style=color:#24909d>exec</span> php su app -c <span style=color:#ed9d13>"</span><span style=color:#ed9d13>${</span>*:<span style=color:#40ffff>2</span><span style=color:#ed9d13>}</span><span style=color:#ed9d13>"</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">14</span><span> <span style=color:#6ab825;font-weight:700>else</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">15</span><span> <span style=color:#40ffff>$DC</span> <span style=color:#24909d>exec</span> php su app
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">16</span><span> <span style=color:#6ab825;font-weight:700>fi</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">17</span><span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">18</span><span><span style=color:#6ab825;font-weight:700>elif</span> [ <span style=color:#40ffff>$1</span> == <span style=color:#ed9d13>"c"</span> ]; <span style=color:#6ab825;font-weight:700>then</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">19</span><span> <span style=color:#40ffff>$DC</span> <span style=color:#24909d>exec</span> php su app -c <span style=color:#ed9d13>"composer </span><span style=color:#ed9d13>${</span>*:<span style=color:#40ffff>2</span><span style=color:#ed9d13>}</span><span style=color:#ed9d13>"</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">20</span><span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">21</span><span><span style=color:#6ab825;font-weight:700>elif</span> [ <span style=color:#40ffff>$1</span> == <span style=color:#ed9d13>"ci"</span> ]; <span style=color:#6ab825;font-weight:700>then</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">22</span><span> <span style=color:#40ffff>$DC</span> <span style=color:#24909d>exec</span> php su app -c <span style=color:#ed9d13>'composer install'</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">23</span><span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">24</span><span><span style=color:#6ab825;font-weight:700>elif</span> [ <span style=color:#40ffff>$1</span> == <span style=color:#ed9d13>"recreate"</span> ]; <span style=color:#6ab825;font-weight:700>then</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">25</span><span> <span style=color:#40ffff>$DC</span> up -d --force-recreate <span style=color:#ed9d13>${</span>*:<span style=color:#40ffff>2</span><span style=color:#ed9d13>}</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">26</span><span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">27</span><span><span style=color:#6ab825;font-weight:700>elif</span> [ <span style=color:#40ffff>$1</span> == <span style=color:#ed9d13>"build"</span> ]; <span style=color:#6ab825;font-weight:700>then</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">28</span><span> <span style=color:#40ffff>$DC</span> up -d --force-recreate --build <span style=color:#ed9d13>${</span>*:<span style=color:#40ffff>2</span><span style=color:#ed9d13>}</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">29</span><span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">30</span><span><span style=color:#6ab825;font-weight:700>else</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">31</span><span> <span style=color:#40ffff>$DC</span> <span style=color:#40ffff>$*</span>
</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686868">32</span><span><span style=color:#6ab825;font-weight:700>fi</span>
</span></span></code></pre></div><p>Give execute permission with <code>chmod +x ./dc</code></p><p>And now you can run:</p><ul><li><code>./dc</code> - to show all containers with status</li><li><code>./dc up</code> - to start in detached mode</li><li><code>./dc ci</code> - to run composer install in the php container as user app</li><li><code>./dc c require spatie/image</code> - to run any composer command inside php container</li><li><code>./dc php</code> - interactive exec inside php container</li><li><code>./dc php ls -alh</code> - run any command inside php container</li><li><code>./dc recreate</code> - applies any modifications to docker-compose.yml</li><li><code>./dc recreate php</code> - applies modifications to compose, only for php container</li><li><code>./dc build</code> - if you have a custom dockerfile, does run dc up with a fresh build.</li><li><code>./dc logs -n 10 -f php</code> - any other docker-compose command works as expected.</li></ul><hr width=100% id=EOF><p style=color:#777>Last modified on 2024-11-18</p>