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>&#34;exit&#34;</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>&#34;docker compose&#34;</span> <span style=color:#999;font-style:italic># add `-f docker/compose.yml` if it&#39;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>&#34;up&#34;</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>&#34;php&#34;</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>&#34;</span><span style=color:#ed9d13>${</span>*:<span style=color:#40ffff>2</span><span style=color:#ed9d13>}</span><span style=color:#ed9d13>&#34;</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>&#34;c&#34;</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>&#34;composer </span><span style=color:#ed9d13>${</span>*:<span style=color:#40ffff>2</span><span style=color:#ed9d13>}</span><span style=color:#ed9d13>&#34;</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>&#34;ci&#34;</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>&#39;composer install&#39;</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>&#34;recreate&#34;</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>&#34;build&#34;</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>