Difference between revisions of "Work-Adventure/install/Add docker-compose as systemd unit"

From Technologia Incognita
Jump to: navigation, search
(Docker compose as a systemd unit)
m (page section layout chg)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
:: → Source: https://gist.github.com/mosquito/b23e1c1e5723a7fd9e6568e5cf91180f
 
 
 
== Docker compose as a systemd unit ==
 
== Docker compose as a systemd unit ==
  
 
SystemD calling binaries using an absolute path. In my case is prefixed by <code>/usr/bin</code>, you should use paths specific for your environment.
 
SystemD calling binaries using an absolute path. In my case is prefixed by <code>/usr/bin</code>, you should use paths specific for your environment.
  
Create <code>/etc/systemd/system/docker-compose@.service</code>:
+
Create a general <code>/etc/systemd/system/docker-compose@.service</code>:
  
 
<pre>
 
<pre>
Line 16: Line 14:
 
Type=oneshot
 
Type=oneshot
 
RemainAfterExit=true
 
RemainAfterExit=true
WorkingDirectory=/opt/docker/compose/%i
+
# for each of your services
 +
# place your .env and docker-compose.yaml files in a subdirectory of the WorkingDirectory
 +
WorkingDirectory=/opt/%i
 
ExecStart=/usr/bin/docker-compose up -d --remove-orphans
 
ExecStart=/usr/bin/docker-compose up -d --remove-orphans
 
ExecStop=/usr/bin/docker-compose down
 
ExecStop=/usr/bin/docker-compose down
Line 24: Line 24:
 
</pre>
 
</pre>
  
Place your <code>docker-compose.yaml</code> and <code>.env</code> files into <code>/opt/docker/compose/myservice</code> and call
+
Place the <code>docker-compose.yaml</code> and <code>.env</code> files of any of your services (traefik-infra, workadventure ...) in a subdirectory of <code>/opt</code> (example <code>/opt/workadventure</code>) and call
 +
 
 +
<pre>
 +
systemctl start docker-compose@yourservice
 +
</pre>
 +
 
 +
Example:
 +
 
 +
For <code>/opt/traefik-infra</code> and <code>/opt/workadventure</code> run
 +
<pre>
 +
systemctl start docker-compose@traefik-infra
 +
systemctl start docker-compose@workadventure
 +
</pre>
 +
 
  
 +
To have them started automatically after system boot, run once
 
<pre>
 
<pre>
systemctl start docker-compose@myservice
+
systemctl enable docker-compose@traefik-infra
 +
systemctl enable docker-compose@workadventure
 +
systemctl daemon-reload
 
</pre>
 
</pre>
 +
 +
 +
== More information and discussion ==
 +
 +
* https://gist.github.com/mosquito/b23e1c1e5723a7fd9e6568e5cf91180f

Latest revision as of 11:44, 20 March 2021

Docker compose as a systemd unit

SystemD calling binaries using an absolute path. In my case is prefixed by /usr/bin, you should use paths specific for your environment.

Create a general /etc/systemd/system/docker-compose@.service:

[Unit]
Description=%i service with docker compose
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=true
# for each of your services
# place your .env and docker-compose.yaml files in a subdirectory of the WorkingDirectory
WorkingDirectory=/opt/%i
ExecStart=/usr/bin/docker-compose up -d --remove-orphans
ExecStop=/usr/bin/docker-compose down

[Install]
WantedBy=multi-user.target

Place the docker-compose.yaml and .env files of any of your services (traefik-infra, workadventure ...) in a subdirectory of /opt (example /opt/workadventure) and call

systemctl start docker-compose@yourservice

Example:

For /opt/traefik-infra and /opt/workadventure run

systemctl start docker-compose@traefik-infra
systemctl start docker-compose@workadventure


To have them started automatically after system boot, run once

systemctl enable docker-compose@traefik-infra
systemctl enable docker-compose@workadventure
systemctl daemon-reload


More information and discussion