Criando um serviço no Ubuntu para rodar uma imagem Docker

Ricardo Baltazar
Juntos Somos Mais
Published in
3 min readFeb 19, 2023
Photo by Gabriel Heinzer on Unsplash

Primeiro precisamos entender o que é o systemd .

O Systemd é um sistema de inicialização usado por muitas distribuições Linux. Ele é responsável por iniciar e gerenciar os serviços do sistema. Para configurar um serviço no Systemd, é necessário criar um arquivo de unidade no diretório /etc/systemd/system/. Neste artigo, vamos explicar cada um dos parâmetros que podem ser usados no arquivo de unidade.

Crie um arquivo no diretório /etc/systemd/system

[Unit]
Description=Onion Share
Wants=network-online.target
After=network-online.target
Wants=docker.service
After=docker.service

StartLimitInterval=0

[Service]
Type=forking
TimeoutStartSec=infinity
TimeoutStopSec=16min
ExecStart=/mnt/disk1/onion-farm/scripts/start
ExecStop=/mnt/disk1/umbrel/scripts/stop
User=root
Group=root
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=onion-service-startup
RemainAfterExit=yes
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Segue um resumo sobre os campos que podem ser usados nesse arquivo.

Seção [Unit]

A seção [Unit] é usada para definir informações gerais sobre o serviço.

  • Description: Uma descrição curta do serviço.
  • Documentation: Uma URL ou caminho para a documentação do serviço.
  • Requires: Uma lista de unidades que devem ser iniciadas antes deste serviço.
  • After: Uma lista de unidades que devem ser iniciadas antes deste serviço.

Seção [Service]

A seção [Service] é usada para definir informações específicas do serviço.

  • ExecStart: O comando ou script que deve ser executado para iniciar o serviço.
  • Type: O tipo do serviço, pode ser simple, forking, oneshot, dbus, notify, idle.
  • User: O usuário que deve ser usado para executar o serviço.
  • Group: O grupo que deve ser usado para executar o serviço.
  • WorkingDirectory: O diretório de trabalho para o serviço.
  • Environment: Uma lista de variáveis de ambiente a serem definidas para o serviço.
  • StandardOutput: Onde enviar a saída padrão do serviço, pode ser inherit, null, tty, journal, syslog, kmsg, journal+console, syslog+console, kmsg+console.
  • StandardError: Onde enviar a saída de erro do serviço, pode ser inherit, null, tty, journal, syslog, kmsg, journal+console, syslog+console, kmsg+console.
  • Restart: Quando o serviço deve ser reiniciado, pode ser no, on-success, on-failure, on-abnormal, on-abort, on-watchdog, always.
  • RestartSec: O tempo a esperar antes de reiniciar o serviço.
  • TimeoutStartSec: Quanto tempo esperar pelo início do serviço antes de considerá-lo falhado.
  • TimeoutStopSec: Quanto tempo esperar pelo término do serviço antes de considerá-lo falhado.
  • SyslogIdentifier: A identificação a ser usada ao registrar o serviço no syslog.

Seção [Install]

A seção [Install] é usada para definir como o serviço deve ser instalado.

  • WantedBy: A unidade ou alvo que deve ser iniciado quando este serviço é iniciado.

Agora precisamos criar os arquivos que vão iniciar e para o serviço docker.

Crie a pasta onde os arquivos serão adicionados. No meu caso eu criei no diretório mnt/disk1/onion-farm/scripts/start

#!/bin/bash

docker run \
-p 3000:5000 \
-v $(pwd)/html/:/var/www/html/ \
-v $(pwd)/http.d/:/etc/nginx/http.d/ \
-v $(pwd)/torrc.d/:/etc/torrc.d/ \
-v $(pwd)/tor/:/var/lib/tor/ \
-d \
--name onion-farm \
ricardobchaves6/onion-farm:v1.0.0

Vamos criar o arquivo que vai parar o container.

#!/bin/bash

docker stop -t 30 onion-farm
docker rm onion-farm

Vamos adicionar as permissões para os arquivos: sudo chmod 775 start stop .

Execute o comando abaixo para que o seu serviço seja iniciado ao reiniciar o sistema operacional:

sudo systemctl enable onion-farm-startup.service

Teste seu serviço com:

  systemctl start onion-farm-startup.service
systemctl stop onion-farm-startup.service

Sobre o start e stop, não vou explicar porque é simples de mais :)

--

--