<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Isaacreyes</id>
		<title>VeRLab Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://www.verlab.dcc.ufmg.br/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Isaacreyes"/>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php/Special:Contributions/Isaacreyes"/>
		<updated>2026-05-17T09:53:07Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Docker&amp;diff=1486</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Docker&amp;diff=1486"/>
				<updated>2025-04-09T14:41:00Z</updated>
		
		<summary type="html">&lt;p&gt;Isaacreyes: /* Criar regra udev para dispositivo USB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker Rootless Mode ==&lt;br /&gt;
&lt;br /&gt;
O modo disponível do Docker para os usuários da rede é o '''Docker Engine no modo Rootless''', ou seja, apenas a versão em linha de comando e no modo de acesso non-root.&lt;br /&gt;
&lt;br /&gt;
Em geral, funciona para todas as aplicações e pode-se ler mais informações no [https://docs.docker.com/engine/security/rootless/ link Docker Rootless]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante''': para estas configurações é necessário que a máquina tenha um docker instalado com versão &amp;gt;= 20.10 (pode ser conferido com: &amp;lt;code&amp;gt;docker version&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Este processo ainda se encontra em uma fase experimental e não está disponível em todas as máquinas. As máquinas disponíveis com docker até o momento são '''PROC1, PROC2, PROC5, PROC6, PROC7, EPONA, NYMERIA, DROGON''', '''EVA, WALL-E, MAGRITTE''' e '''DALEK'''.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuração Docker rootless com Systemd (&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;não é possível usar simultaneamente em outras máquinas, apenas em uma máquina da rede por vez&amp;lt;/span&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A opção mais intuitiva para executar o Docker Rootless é gerenciando pelo '''systemctl --user'''. Porém tem a limitação de &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''funcionar em apenas uma máquina da rede por vez'''&amp;lt;/span&amp;gt;, pois o arquivo que gerencia o systemctl do usuário é salvo na /home que é compartilhada em todas as máquinas, portanto '''apenas um processo docker rootless do usuário pode ser criado, mas em qualquer máquina da rede'''.&lt;br /&gt;
&lt;br /&gt;
=== Pré-requisitos ===&lt;br /&gt;
Para utilizar docker rootless em uma máquina no laboratório é preciso que o usuário: &lt;br /&gt;
&lt;br /&gt;
* solicite à equipe de rede para criar uma pasta de rascunho no disco local como /draft-xxx/nome_do_usuario e dar permissão de leitura/escrita.&lt;br /&gt;
* solicite à equipe de rede a instalação do docker na máquina.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuração ===&lt;br /&gt;
Feito estas etapas, para configurar o acesso na máquina é preciso seguir os seguintes passos para executar o docker rootless:&lt;br /&gt;
&lt;br /&gt;
# Crie a pasta &amp;lt;code&amp;gt;~/.config/docker&amp;lt;/code&amp;gt; com o comando &amp;lt;code&amp;gt;mkdir -p ~/.config/docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Altere a pasta de armazenamento dos arquivos de cache do Docker para a pasta de rascunho /draft-xxx com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo '{&amp;quot;data-root&amp;quot;:&amp;quot;/&amp;lt;path-em-disco-local&amp;gt;/&amp;lt;user&amp;gt;/docker-cache&amp;quot;}' | tee ~/.config/docker/daemon.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante:''' Lembre-se de ajustar o &amp;lt;code&amp;gt;&amp;lt;path-em-disco-local&amp;gt;/&amp;lt;user&amp;gt;&amp;lt;/code&amp;gt; para uma armazenamento de rascunho na máquina e alguma pasta do seu usuário (por exemplo, &amp;lt;code&amp;gt;/draft-hdd/fulano&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Esses dois primeiros passos são específicos para as máquinas do VeRLab: por padrão o Docker guarda arquivos na /home do usuário, mas essa pasta é compartilhada em rede (por NFS ou MooseFS) e o Docker não dá suporte a isso.[https://github.com/docker/for-linux/issues/1172 Aqui está um issue citando o problema]&lt;br /&gt;
&lt;br /&gt;
# Execute &amp;lt;code&amp;gt;dockerd-rootless-setuptool.sh install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante''': Após terminar, o comando vai pedir que você altere seu .bashrc para adicionar uma linha semelhante a &amp;lt;code&amp;gt;export DOCKER_HOST=unix:///run/user/&amp;lt;uid&amp;gt;/docker.sock&amp;lt;/code&amp;gt; (varia por usuário). Faça essa alteração antes de prosseguir copiando e colando o comando no terminal.&lt;br /&gt;
# Reinicie o Bash com &amp;lt;code&amp;gt;exec bash&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Ative a inicialização automática do Docker em seu usuário: &amp;lt;code&amp;gt;systemctl --user enable --now docker&amp;lt;/code&amp;gt; ou manualmente: &amp;lt;code&amp;gt;systemctl --user start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Com isso, a configuração está pronta!&lt;br /&gt;
&lt;br /&gt;
=== Utilização ===&lt;br /&gt;
Comandos para confirmar se o Docker está funcionando:&lt;br /&gt;
* Verificar status do docker daemon:  &amp;lt;code&amp;gt;systemctl --user status docker.service&amp;lt;/code&amp;gt;&lt;br /&gt;
* Parar docker daemon:  &amp;lt;code&amp;gt;systemctl --user stop docker.service&amp;lt;/code&amp;gt;&lt;br /&gt;
* Verificar configurações do Docker Rootless: &amp;lt;code&amp;gt;docker version&amp;lt;/code&amp;gt;  ou  &amp;lt;code&amp;gt;docker info&amp;lt;/code&amp;gt;&lt;br /&gt;
* Baixar uma imagem teste e executá-la: &amp;lt;code&amp;gt;docker run hello-world&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuração Docker Rootless &amp;quot;Manual&amp;quot; para &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;execução simultânea em várias máquinas da rede&amp;lt;span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Essa opção pode parecer menos intuitiva, pois o usuário precisará executar manualmente o '''daemon do docker rootless''' em um terminal e mantê-lo em execução para poder utilizar os comandos docker em outros terminais.&lt;br /&gt;
&lt;br /&gt;
Isso pode ser facilmente feito utilizando os [https://www.verlab.dcc.ufmg.br/mediawiki/index.php/Trabalhando_remotamente#Usando_tmux_ou_byobu:_multiplexador_de_terminais  multiplexadores de terminal como tmux ou byobu].&lt;br /&gt;
&lt;br /&gt;
Uma vez que parar a execução do docker daemon com ctrl+c ou fechar o terminal, isso vai &amp;quot;matar&amp;quot; a execução do docker rootless na máquina e parar todos seus containers de forma abrupta. Porém tem a flexibilidade de não precisar da pasta /home para armazenar as configurações do daemon, então &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;com essa configuração é possível executar o docker rootless em várias máquinas simultaneamente!&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pré-requisitos ===&lt;br /&gt;
Para utilizar Docker Rootless em uma máquina no laboratório é preciso que o usuário: &lt;br /&gt;
&lt;br /&gt;
* solicite à equipe de rede para criar uma pasta de rascunho no disco local como /draft-xxx/nome_do_usuario e dar permissão de leitura/escrita.&lt;br /&gt;
* solicite à equipe de rede a instalação do docker na máquina.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuração ===&lt;br /&gt;
&lt;br /&gt;
# Abra seu arquivo &amp;lt;code&amp;gt;~/.bashrc&amp;lt;/code&amp;gt; no editor de texto preferido, se for no terminal pode usar o nano: &amp;lt;code&amp;gt;'''nano ~/.bashrc'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Cole as seguintes funções no final desse arquivo e salve o mesmo:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Criar arquivo de configuração do tmux para habilitar o mouse e outras coisas úteis&lt;br /&gt;
|-&lt;br /&gt;
|  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Funções para adicionar no final do aquivo ~/.bashrc e usar docker rootless na rede VeRLab/JLab&lt;br /&gt;
&lt;br /&gt;
# Função para criar pastas e configuração do docker rootless&lt;br /&gt;
function docker-rootless-create-dir(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  # Cria environment variables para pastas&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Create Folder...&amp;quot;&lt;br /&gt;
  export USER_BASE_DIR=/draft-hdd/${MYUSER}  &amp;amp;&amp;amp; \&lt;br /&gt;
  export USER_DOCKER_DIR=$USER_BASE_DIR/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  echo -e &amp;quot;  USER_BASE_DIR=$USER_BASE_DIR\n  USER_DOCKER_DIR=$USER_DOCKER_DIR&amp;quot;&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_BASE_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_BASE_DIR=$USER_BASE_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  # Cria pastas usadas pelo docker rootless&lt;br /&gt;
  mkdir --parents $USER_DOCKER_DIR&lt;br /&gt;
  export XDG_RUNTIME_DIR=$USER_DOCKER_DIR/.docker/run  &amp;amp;&amp;amp; \&lt;br /&gt;
  export XDG_CONFIG_HOME=$USER_DOCKER_DIR/.config&lt;br /&gt;
  mkdir --parents $XDG_RUNTIME_DIR &amp;amp;&amp;amp; \&lt;br /&gt;
  mkdir --parents $XDG_CONFIG_HOME/docker&lt;br /&gt;
&lt;br /&gt;
  # Cria configuração do docker rootless&lt;br /&gt;
  echo &amp;quot;{\&amp;quot;data-root\&amp;quot;:\&amp;quot;${USER_DOCKER_DIR}/docker-cache\&amp;quot;}&amp;quot; | tee $XDG_CONFIG_HOME/docker/daemon.json  &amp;amp;&amp;amp; \&lt;br /&gt;
  nvidia-ctk runtime configure --runtime=docker --config=$XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;HOME=$HOME \nXDG_CONFIG_HOME=$XDG_CONFIG_HOME \nXDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \nXDG_DATA_HOME=$XDG_DATA_HOME \nDOCKER_HOST=$DOCKER_HOST&amp;quot;  &amp;amp;&amp;amp; \&lt;br /&gt;
  echo -e &amp;quot;cat $XDG_CONFIG_HOME/docker/daemon.json\n&amp;quot; &amp;amp;&amp;amp; cat $XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
  echo -e &amp;quot;\nDocker Rootless Folders and Config Files Successfully Created!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Função para iniciar manualmente daemon do docker no modo rootless&lt;br /&gt;
function docker-rootless-daemon-run(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  export USER_DOCKER_DIR=/draft-hdd/${MYUSER}/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  export XDG_RUNTIME_DIR=$USER_DOCKER_DIR/.docker/run  &amp;amp;&amp;amp; \&lt;br /&gt;
  export XDG_CONFIG_HOME=$USER_DOCKER_DIR/.config&lt;br /&gt;
  echo -e &amp;quot;  USER_DOCKER_DIR=$USER_DOCKER_DIR\n  XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR\n  XDG_CONFIG_HOME=$XDG_CONFIG_HOME&amp;quot;&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_DOCKER_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_DOCKER_DIR=$USER_DOCKER_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  echo -e &amp;quot;HOME=$HOME \nXDG_CONFIG_HOME=$XDG_CONFIG_HOME \nXDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \nXDG_DATA_HOME=$XDG_DATA_HOME \nDOCKER_HOST=$DOCKER_HOST&amp;quot;  &amp;amp;&amp;amp; \&lt;br /&gt;
  echo -e &amp;quot;cat $XDG_CONFIG_HOME/docker/daemon.json\n&amp;quot; &amp;amp;&amp;amp; cat $XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
  # Start docker daemon&lt;br /&gt;
  echo -e &amp;quot;Starting Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  dockerd-rootless.sh&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Função para exportar variáveis de ambiente para executar comandos do docker rootless&lt;br /&gt;
function docker-rootless-export(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  export USER_DOCKER_DIR=/draft-hdd/${MYUSER}/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  export DOCKER_HOST=unix://$USER_DOCKER_DIR/.docker/run/docker.sock&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_DOCKER_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_DOCKER_DIR=$USER_DOCKER_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  echo -e &amp;quot;  USER_DOCKER_DIR=$USER_DOCKER_DIR\n  DOCKER_HOST=$DOCKER_HOST&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Utilização ===&lt;br /&gt;
Uma vez que tiver as funções salvas em seu &amp;lt;code&amp;gt;'''~/.bashrc'''&amp;lt;/code&amp;gt; elas serão usadas para:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Como usar as funções docker-rootless-*&lt;br /&gt;
|-&lt;br /&gt;
! Função !! Descrição !! Utilização&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-create-dir()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Cria uma pasta para os arquivos do docker rootless daemon em &amp;lt;code&amp;gt;&amp;quot;/draft-hdd/&amp;lt;usuario&amp;gt;/docker-rootless&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Usada apenas a primeira vez na máquina. Se a pasta já foi criada anteriormente, não precisa mais usar essa função na mesma máquina.&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-daemon-run()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Executar o docker rootless daemon no terminal atual no tmux ou byobu&lt;br /&gt;
|Usada uma vez, para não haver outro terminal executando o docker rootless daemon na máquina.&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-export()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Exportar as variáveis de ambiente com o path correto do docker rootless daemon e do docker.sock (''XDG_RUNTIME_DIR'' e ''DOCKER_HOST'')&lt;br /&gt;
|Usada em todo novo terminal que abrir e quiser usar comando docker. Também pode ser colocada no final do ~/.bashrc para valer automaticamente.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para utilizar o docker:&lt;br /&gt;
&lt;br /&gt;
# Faça ''ssh'' numa das máquinas que tem o docker rootless instalado&lt;br /&gt;
# Se a pasta &amp;lt;code&amp;gt;&amp;quot;/draft-hdd/&amp;lt;usuario&amp;gt;/docker-rootless&amp;quot;&amp;lt;/code&amp;gt; ainda não foi criada para seu usuário na máquina, execute: &amp;lt;code&amp;gt;'''docker-rootless-create-dir'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# No terminal abra o multiplexador de terminais, por exemplo, comando: &amp;lt;code&amp;gt;'''tmux'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Dentro da '''janela 0''' do tmux, execute o docker rootless daemon: &amp;lt;code&amp;gt;'''docker-rootless-daemon-run'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Abra outra janela no tmux: ctrl+b c&lt;br /&gt;
# Na '''janela 1''' faça o export do path para executar comandos docker:  &amp;lt;code&amp;gt;'''docker-rootless-export'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Na '''janela 1''' execute os comandos docker:  &amp;lt;code&amp;gt;'''docker version ; docker compose version; docker info;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Limpar dados do docker rootless: cache, images e containers ==&lt;br /&gt;
&lt;br /&gt;
Para desocupar espaço em disco das máquinas, caso não esteja utilizando o docker, mas deseja manter a estrutura de pastas do docker rootless daemon, pode-se apagar todas as imagens, cache e containers com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''docker system prune --all'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alguns links de referencia:&lt;br /&gt;
* https://stackoverflow.com/questions/44785585/how-can-i-delete-all-local-docker-images&lt;br /&gt;
* https://contabo.com/blog/how-to-remove-docker-volumes-images-and-containers/?gad_source=1&amp;amp;gclid=CjwKCAjwydSzBhBOEiwAj0XN4JA5Mz8X1bAK-PaXKPz9PyQnJKdahvYG3Z6CBm5ydgRmsNymOFU9FhoC4a0QAvD_BwE&lt;br /&gt;
* https://earthly.dev/blog/docker-image-storage-on-host/&lt;br /&gt;
* https://docs.docker.com/reference/cli/docker/system/prune/#extended-description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker abrindo janela no Ubuntu ==&lt;br /&gt;
exemplo com ROS&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;'''docker run --detach --privileged \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /tmp/.X11-unix:/tmp/.X11-unix \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /home:/home/host \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--device=/dev/bus/usb:/dev/bus/usb \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /dev:/dev \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--runtime=nvidia \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--gpus 'all,&amp;quot;capabilities=utility,display,compute&amp;quot;' \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--env DISPLAY=$DISPLAY \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--network=host \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--name ros_noetic_gps_testing_container \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''ros_noetic_gps_testing:latest \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''tail -f /dev/null'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Criar regra udev para dispositivo USB ==&lt;br /&gt;
Para descobrir o idProduct e idVendor do dispositivo, pode-se usar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; udevadm info -a -n /dev/ttyACM0 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para criar o arquivo com a regra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo nano /etc/udev/rules.d/99-ublox-gps.rules &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adicionar essa linha no arquivo e salvar o arquivo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;tty&amp;quot;, ATTRS{idVendor}==&amp;quot;1546&amp;quot;, ATTRS{idProduct}==&amp;quot;01a9&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;dialout&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se quiser criar um novo nome (link simbolico /dev/ublox) adicionar SYMLINK:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SUBSYSTEM==&amp;quot;tty&amp;quot;, ATTRS{idVendor}==&amp;quot;1546&amp;quot;, ATTRS{idProduct}==&amp;quot;01a9&amp;quot;, SYMLINK+=&amp;quot;ublox&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;dialout&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Desconectar e conectar o dispositivo da USB novamente para acionar a nova regra&lt;/div&gt;</summary>
		<author><name>Isaacreyes</name></author>	</entry>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Docker&amp;diff=1485</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Docker&amp;diff=1485"/>
				<updated>2025-04-09T14:37:26Z</updated>
		
		<summary type="html">&lt;p&gt;Isaacreyes: /* Criar regra udev para dispositivo USB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker Rootless Mode ==&lt;br /&gt;
&lt;br /&gt;
O modo disponível do Docker para os usuários da rede é o '''Docker Engine no modo Rootless''', ou seja, apenas a versão em linha de comando e no modo de acesso non-root.&lt;br /&gt;
&lt;br /&gt;
Em geral, funciona para todas as aplicações e pode-se ler mais informações no [https://docs.docker.com/engine/security/rootless/ link Docker Rootless]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante''': para estas configurações é necessário que a máquina tenha um docker instalado com versão &amp;gt;= 20.10 (pode ser conferido com: &amp;lt;code&amp;gt;docker version&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Este processo ainda se encontra em uma fase experimental e não está disponível em todas as máquinas. As máquinas disponíveis com docker até o momento são '''PROC1, PROC2, PROC5, PROC6, PROC7, EPONA, NYMERIA, DROGON''', '''EVA, WALL-E, MAGRITTE''' e '''DALEK'''.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuração Docker rootless com Systemd (&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;não é possível usar simultaneamente em outras máquinas, apenas em uma máquina da rede por vez&amp;lt;/span&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A opção mais intuitiva para executar o Docker Rootless é gerenciando pelo '''systemctl --user'''. Porém tem a limitação de &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''funcionar em apenas uma máquina da rede por vez'''&amp;lt;/span&amp;gt;, pois o arquivo que gerencia o systemctl do usuário é salvo na /home que é compartilhada em todas as máquinas, portanto '''apenas um processo docker rootless do usuário pode ser criado, mas em qualquer máquina da rede'''.&lt;br /&gt;
&lt;br /&gt;
=== Pré-requisitos ===&lt;br /&gt;
Para utilizar docker rootless em uma máquina no laboratório é preciso que o usuário: &lt;br /&gt;
&lt;br /&gt;
* solicite à equipe de rede para criar uma pasta de rascunho no disco local como /draft-xxx/nome_do_usuario e dar permissão de leitura/escrita.&lt;br /&gt;
* solicite à equipe de rede a instalação do docker na máquina.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuração ===&lt;br /&gt;
Feito estas etapas, para configurar o acesso na máquina é preciso seguir os seguintes passos para executar o docker rootless:&lt;br /&gt;
&lt;br /&gt;
# Crie a pasta &amp;lt;code&amp;gt;~/.config/docker&amp;lt;/code&amp;gt; com o comando &amp;lt;code&amp;gt;mkdir -p ~/.config/docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Altere a pasta de armazenamento dos arquivos de cache do Docker para a pasta de rascunho /draft-xxx com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo '{&amp;quot;data-root&amp;quot;:&amp;quot;/&amp;lt;path-em-disco-local&amp;gt;/&amp;lt;user&amp;gt;/docker-cache&amp;quot;}' | tee ~/.config/docker/daemon.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante:''' Lembre-se de ajustar o &amp;lt;code&amp;gt;&amp;lt;path-em-disco-local&amp;gt;/&amp;lt;user&amp;gt;&amp;lt;/code&amp;gt; para uma armazenamento de rascunho na máquina e alguma pasta do seu usuário (por exemplo, &amp;lt;code&amp;gt;/draft-hdd/fulano&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Esses dois primeiros passos são específicos para as máquinas do VeRLab: por padrão o Docker guarda arquivos na /home do usuário, mas essa pasta é compartilhada em rede (por NFS ou MooseFS) e o Docker não dá suporte a isso.[https://github.com/docker/for-linux/issues/1172 Aqui está um issue citando o problema]&lt;br /&gt;
&lt;br /&gt;
# Execute &amp;lt;code&amp;gt;dockerd-rootless-setuptool.sh install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante''': Após terminar, o comando vai pedir que você altere seu .bashrc para adicionar uma linha semelhante a &amp;lt;code&amp;gt;export DOCKER_HOST=unix:///run/user/&amp;lt;uid&amp;gt;/docker.sock&amp;lt;/code&amp;gt; (varia por usuário). Faça essa alteração antes de prosseguir copiando e colando o comando no terminal.&lt;br /&gt;
# Reinicie o Bash com &amp;lt;code&amp;gt;exec bash&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Ative a inicialização automática do Docker em seu usuário: &amp;lt;code&amp;gt;systemctl --user enable --now docker&amp;lt;/code&amp;gt; ou manualmente: &amp;lt;code&amp;gt;systemctl --user start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Com isso, a configuração está pronta!&lt;br /&gt;
&lt;br /&gt;
=== Utilização ===&lt;br /&gt;
Comandos para confirmar se o Docker está funcionando:&lt;br /&gt;
* Verificar status do docker daemon:  &amp;lt;code&amp;gt;systemctl --user status docker.service&amp;lt;/code&amp;gt;&lt;br /&gt;
* Parar docker daemon:  &amp;lt;code&amp;gt;systemctl --user stop docker.service&amp;lt;/code&amp;gt;&lt;br /&gt;
* Verificar configurações do Docker Rootless: &amp;lt;code&amp;gt;docker version&amp;lt;/code&amp;gt;  ou  &amp;lt;code&amp;gt;docker info&amp;lt;/code&amp;gt;&lt;br /&gt;
* Baixar uma imagem teste e executá-la: &amp;lt;code&amp;gt;docker run hello-world&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuração Docker Rootless &amp;quot;Manual&amp;quot; para &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;execução simultânea em várias máquinas da rede&amp;lt;span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Essa opção pode parecer menos intuitiva, pois o usuário precisará executar manualmente o '''daemon do docker rootless''' em um terminal e mantê-lo em execução para poder utilizar os comandos docker em outros terminais.&lt;br /&gt;
&lt;br /&gt;
Isso pode ser facilmente feito utilizando os [https://www.verlab.dcc.ufmg.br/mediawiki/index.php/Trabalhando_remotamente#Usando_tmux_ou_byobu:_multiplexador_de_terminais  multiplexadores de terminal como tmux ou byobu].&lt;br /&gt;
&lt;br /&gt;
Uma vez que parar a execução do docker daemon com ctrl+c ou fechar o terminal, isso vai &amp;quot;matar&amp;quot; a execução do docker rootless na máquina e parar todos seus containers de forma abrupta. Porém tem a flexibilidade de não precisar da pasta /home para armazenar as configurações do daemon, então &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;com essa configuração é possível executar o docker rootless em várias máquinas simultaneamente!&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pré-requisitos ===&lt;br /&gt;
Para utilizar Docker Rootless em uma máquina no laboratório é preciso que o usuário: &lt;br /&gt;
&lt;br /&gt;
* solicite à equipe de rede para criar uma pasta de rascunho no disco local como /draft-xxx/nome_do_usuario e dar permissão de leitura/escrita.&lt;br /&gt;
* solicite à equipe de rede a instalação do docker na máquina.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuração ===&lt;br /&gt;
&lt;br /&gt;
# Abra seu arquivo &amp;lt;code&amp;gt;~/.bashrc&amp;lt;/code&amp;gt; no editor de texto preferido, se for no terminal pode usar o nano: &amp;lt;code&amp;gt;'''nano ~/.bashrc'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Cole as seguintes funções no final desse arquivo e salve o mesmo:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Criar arquivo de configuração do tmux para habilitar o mouse e outras coisas úteis&lt;br /&gt;
|-&lt;br /&gt;
|  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Funções para adicionar no final do aquivo ~/.bashrc e usar docker rootless na rede VeRLab/JLab&lt;br /&gt;
&lt;br /&gt;
# Função para criar pastas e configuração do docker rootless&lt;br /&gt;
function docker-rootless-create-dir(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  # Cria environment variables para pastas&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Create Folder...&amp;quot;&lt;br /&gt;
  export USER_BASE_DIR=/draft-hdd/${MYUSER}  &amp;amp;&amp;amp; \&lt;br /&gt;
  export USER_DOCKER_DIR=$USER_BASE_DIR/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  echo -e &amp;quot;  USER_BASE_DIR=$USER_BASE_DIR\n  USER_DOCKER_DIR=$USER_DOCKER_DIR&amp;quot;&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_BASE_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_BASE_DIR=$USER_BASE_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  # Cria pastas usadas pelo docker rootless&lt;br /&gt;
  mkdir --parents $USER_DOCKER_DIR&lt;br /&gt;
  export XDG_RUNTIME_DIR=$USER_DOCKER_DIR/.docker/run  &amp;amp;&amp;amp; \&lt;br /&gt;
  export XDG_CONFIG_HOME=$USER_DOCKER_DIR/.config&lt;br /&gt;
  mkdir --parents $XDG_RUNTIME_DIR &amp;amp;&amp;amp; \&lt;br /&gt;
  mkdir --parents $XDG_CONFIG_HOME/docker&lt;br /&gt;
&lt;br /&gt;
  # Cria configuração do docker rootless&lt;br /&gt;
  echo &amp;quot;{\&amp;quot;data-root\&amp;quot;:\&amp;quot;${USER_DOCKER_DIR}/docker-cache\&amp;quot;}&amp;quot; | tee $XDG_CONFIG_HOME/docker/daemon.json  &amp;amp;&amp;amp; \&lt;br /&gt;
  nvidia-ctk runtime configure --runtime=docker --config=$XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;HOME=$HOME \nXDG_CONFIG_HOME=$XDG_CONFIG_HOME \nXDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \nXDG_DATA_HOME=$XDG_DATA_HOME \nDOCKER_HOST=$DOCKER_HOST&amp;quot;  &amp;amp;&amp;amp; \&lt;br /&gt;
  echo -e &amp;quot;cat $XDG_CONFIG_HOME/docker/daemon.json\n&amp;quot; &amp;amp;&amp;amp; cat $XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
  echo -e &amp;quot;\nDocker Rootless Folders and Config Files Successfully Created!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Função para iniciar manualmente daemon do docker no modo rootless&lt;br /&gt;
function docker-rootless-daemon-run(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  export USER_DOCKER_DIR=/draft-hdd/${MYUSER}/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  export XDG_RUNTIME_DIR=$USER_DOCKER_DIR/.docker/run  &amp;amp;&amp;amp; \&lt;br /&gt;
  export XDG_CONFIG_HOME=$USER_DOCKER_DIR/.config&lt;br /&gt;
  echo -e &amp;quot;  USER_DOCKER_DIR=$USER_DOCKER_DIR\n  XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR\n  XDG_CONFIG_HOME=$XDG_CONFIG_HOME&amp;quot;&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_DOCKER_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_DOCKER_DIR=$USER_DOCKER_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  echo -e &amp;quot;HOME=$HOME \nXDG_CONFIG_HOME=$XDG_CONFIG_HOME \nXDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \nXDG_DATA_HOME=$XDG_DATA_HOME \nDOCKER_HOST=$DOCKER_HOST&amp;quot;  &amp;amp;&amp;amp; \&lt;br /&gt;
  echo -e &amp;quot;cat $XDG_CONFIG_HOME/docker/daemon.json\n&amp;quot; &amp;amp;&amp;amp; cat $XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
  # Start docker daemon&lt;br /&gt;
  echo -e &amp;quot;Starting Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  dockerd-rootless.sh&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Função para exportar variáveis de ambiente para executar comandos do docker rootless&lt;br /&gt;
function docker-rootless-export(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  export USER_DOCKER_DIR=/draft-hdd/${MYUSER}/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  export DOCKER_HOST=unix://$USER_DOCKER_DIR/.docker/run/docker.sock&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_DOCKER_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_DOCKER_DIR=$USER_DOCKER_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  echo -e &amp;quot;  USER_DOCKER_DIR=$USER_DOCKER_DIR\n  DOCKER_HOST=$DOCKER_HOST&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Utilização ===&lt;br /&gt;
Uma vez que tiver as funções salvas em seu &amp;lt;code&amp;gt;'''~/.bashrc'''&amp;lt;/code&amp;gt; elas serão usadas para:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Como usar as funções docker-rootless-*&lt;br /&gt;
|-&lt;br /&gt;
! Função !! Descrição !! Utilização&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-create-dir()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Cria uma pasta para os arquivos do docker rootless daemon em &amp;lt;code&amp;gt;&amp;quot;/draft-hdd/&amp;lt;usuario&amp;gt;/docker-rootless&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Usada apenas a primeira vez na máquina. Se a pasta já foi criada anteriormente, não precisa mais usar essa função na mesma máquina.&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-daemon-run()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Executar o docker rootless daemon no terminal atual no tmux ou byobu&lt;br /&gt;
|Usada uma vez, para não haver outro terminal executando o docker rootless daemon na máquina.&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-export()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Exportar as variáveis de ambiente com o path correto do docker rootless daemon e do docker.sock (''XDG_RUNTIME_DIR'' e ''DOCKER_HOST'')&lt;br /&gt;
|Usada em todo novo terminal que abrir e quiser usar comando docker. Também pode ser colocada no final do ~/.bashrc para valer automaticamente.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para utilizar o docker:&lt;br /&gt;
&lt;br /&gt;
# Faça ''ssh'' numa das máquinas que tem o docker rootless instalado&lt;br /&gt;
# Se a pasta &amp;lt;code&amp;gt;&amp;quot;/draft-hdd/&amp;lt;usuario&amp;gt;/docker-rootless&amp;quot;&amp;lt;/code&amp;gt; ainda não foi criada para seu usuário na máquina, execute: &amp;lt;code&amp;gt;'''docker-rootless-create-dir'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# No terminal abra o multiplexador de terminais, por exemplo, comando: &amp;lt;code&amp;gt;'''tmux'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Dentro da '''janela 0''' do tmux, execute o docker rootless daemon: &amp;lt;code&amp;gt;'''docker-rootless-daemon-run'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Abra outra janela no tmux: ctrl+b c&lt;br /&gt;
# Na '''janela 1''' faça o export do path para executar comandos docker:  &amp;lt;code&amp;gt;'''docker-rootless-export'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Na '''janela 1''' execute os comandos docker:  &amp;lt;code&amp;gt;'''docker version ; docker compose version; docker info;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Limpar dados do docker rootless: cache, images e containers ==&lt;br /&gt;
&lt;br /&gt;
Para desocupar espaço em disco das máquinas, caso não esteja utilizando o docker, mas deseja manter a estrutura de pastas do docker rootless daemon, pode-se apagar todas as imagens, cache e containers com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''docker system prune --all'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alguns links de referencia:&lt;br /&gt;
* https://stackoverflow.com/questions/44785585/how-can-i-delete-all-local-docker-images&lt;br /&gt;
* https://contabo.com/blog/how-to-remove-docker-volumes-images-and-containers/?gad_source=1&amp;amp;gclid=CjwKCAjwydSzBhBOEiwAj0XN4JA5Mz8X1bAK-PaXKPz9PyQnJKdahvYG3Z6CBm5ydgRmsNymOFU9FhoC4a0QAvD_BwE&lt;br /&gt;
* https://earthly.dev/blog/docker-image-storage-on-host/&lt;br /&gt;
* https://docs.docker.com/reference/cli/docker/system/prune/#extended-description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker abrindo janela no Ubuntu ==&lt;br /&gt;
exemplo com ROS&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;'''docker run --detach --privileged \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /tmp/.X11-unix:/tmp/.X11-unix \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /home:/home/host \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--device=/dev/bus/usb:/dev/bus/usb \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /dev:/dev \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--runtime=nvidia \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--gpus 'all,&amp;quot;capabilities=utility,display,compute&amp;quot;' \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--env DISPLAY=$DISPLAY \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--network=host \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--name ros_noetic_gps_testing_container \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''ros_noetic_gps_testing:latest \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''tail -f /dev/null'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Criar regra udev para dispositivo USB ==&lt;br /&gt;
Para descobrir o idProduct e idVendor do dispositivo, pode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; udevadm info -a -n /dev/ttyACM0 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Criar o arquivo com a regra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo nano /etc/udev/rules.d/99-ublox-gps.rules &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adicionar essa linha no arquivo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;tty&amp;quot;, ATTRS{idVendor}==&amp;quot;1546&amp;quot;, ATTRS{idProduct}==&amp;quot;01a9&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;dialout&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se quiser criar um novo nome (link simbolico /dev/ublox) adicionar SYMLINK:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SUBSYSTEM==&amp;quot;tty&amp;quot;, ATTRS{idVendor}==&amp;quot;2341&amp;quot;, ATTRS{idProduct}==&amp;quot;0043&amp;quot;, SYMLINK+=&amp;quot;ublox&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;dialout&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaacreyes</name></author>	</entry>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Docker&amp;diff=1484</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Docker&amp;diff=1484"/>
				<updated>2025-04-09T14:36:00Z</updated>
		
		<summary type="html">&lt;p&gt;Isaacreyes: /* Docker abrindo janela no Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker Rootless Mode ==&lt;br /&gt;
&lt;br /&gt;
O modo disponível do Docker para os usuários da rede é o '''Docker Engine no modo Rootless''', ou seja, apenas a versão em linha de comando e no modo de acesso non-root.&lt;br /&gt;
&lt;br /&gt;
Em geral, funciona para todas as aplicações e pode-se ler mais informações no [https://docs.docker.com/engine/security/rootless/ link Docker Rootless]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante''': para estas configurações é necessário que a máquina tenha um docker instalado com versão &amp;gt;= 20.10 (pode ser conferido com: &amp;lt;code&amp;gt;docker version&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Este processo ainda se encontra em uma fase experimental e não está disponível em todas as máquinas. As máquinas disponíveis com docker até o momento são '''PROC1, PROC2, PROC5, PROC6, PROC7, EPONA, NYMERIA, DROGON''', '''EVA, WALL-E, MAGRITTE''' e '''DALEK'''.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuração Docker rootless com Systemd (&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;não é possível usar simultaneamente em outras máquinas, apenas em uma máquina da rede por vez&amp;lt;/span&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A opção mais intuitiva para executar o Docker Rootless é gerenciando pelo '''systemctl --user'''. Porém tem a limitação de &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''funcionar em apenas uma máquina da rede por vez'''&amp;lt;/span&amp;gt;, pois o arquivo que gerencia o systemctl do usuário é salvo na /home que é compartilhada em todas as máquinas, portanto '''apenas um processo docker rootless do usuário pode ser criado, mas em qualquer máquina da rede'''.&lt;br /&gt;
&lt;br /&gt;
=== Pré-requisitos ===&lt;br /&gt;
Para utilizar docker rootless em uma máquina no laboratório é preciso que o usuário: &lt;br /&gt;
&lt;br /&gt;
* solicite à equipe de rede para criar uma pasta de rascunho no disco local como /draft-xxx/nome_do_usuario e dar permissão de leitura/escrita.&lt;br /&gt;
* solicite à equipe de rede a instalação do docker na máquina.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuração ===&lt;br /&gt;
Feito estas etapas, para configurar o acesso na máquina é preciso seguir os seguintes passos para executar o docker rootless:&lt;br /&gt;
&lt;br /&gt;
# Crie a pasta &amp;lt;code&amp;gt;~/.config/docker&amp;lt;/code&amp;gt; com o comando &amp;lt;code&amp;gt;mkdir -p ~/.config/docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Altere a pasta de armazenamento dos arquivos de cache do Docker para a pasta de rascunho /draft-xxx com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo '{&amp;quot;data-root&amp;quot;:&amp;quot;/&amp;lt;path-em-disco-local&amp;gt;/&amp;lt;user&amp;gt;/docker-cache&amp;quot;}' | tee ~/.config/docker/daemon.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante:''' Lembre-se de ajustar o &amp;lt;code&amp;gt;&amp;lt;path-em-disco-local&amp;gt;/&amp;lt;user&amp;gt;&amp;lt;/code&amp;gt; para uma armazenamento de rascunho na máquina e alguma pasta do seu usuário (por exemplo, &amp;lt;code&amp;gt;/draft-hdd/fulano&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Esses dois primeiros passos são específicos para as máquinas do VeRLab: por padrão o Docker guarda arquivos na /home do usuário, mas essa pasta é compartilhada em rede (por NFS ou MooseFS) e o Docker não dá suporte a isso.[https://github.com/docker/for-linux/issues/1172 Aqui está um issue citando o problema]&lt;br /&gt;
&lt;br /&gt;
# Execute &amp;lt;code&amp;gt;dockerd-rootless-setuptool.sh install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante''': Após terminar, o comando vai pedir que você altere seu .bashrc para adicionar uma linha semelhante a &amp;lt;code&amp;gt;export DOCKER_HOST=unix:///run/user/&amp;lt;uid&amp;gt;/docker.sock&amp;lt;/code&amp;gt; (varia por usuário). Faça essa alteração antes de prosseguir copiando e colando o comando no terminal.&lt;br /&gt;
# Reinicie o Bash com &amp;lt;code&amp;gt;exec bash&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Ative a inicialização automática do Docker em seu usuário: &amp;lt;code&amp;gt;systemctl --user enable --now docker&amp;lt;/code&amp;gt; ou manualmente: &amp;lt;code&amp;gt;systemctl --user start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Com isso, a configuração está pronta!&lt;br /&gt;
&lt;br /&gt;
=== Utilização ===&lt;br /&gt;
Comandos para confirmar se o Docker está funcionando:&lt;br /&gt;
* Verificar status do docker daemon:  &amp;lt;code&amp;gt;systemctl --user status docker.service&amp;lt;/code&amp;gt;&lt;br /&gt;
* Parar docker daemon:  &amp;lt;code&amp;gt;systemctl --user stop docker.service&amp;lt;/code&amp;gt;&lt;br /&gt;
* Verificar configurações do Docker Rootless: &amp;lt;code&amp;gt;docker version&amp;lt;/code&amp;gt;  ou  &amp;lt;code&amp;gt;docker info&amp;lt;/code&amp;gt;&lt;br /&gt;
* Baixar uma imagem teste e executá-la: &amp;lt;code&amp;gt;docker run hello-world&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuração Docker Rootless &amp;quot;Manual&amp;quot; para &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;execução simultânea em várias máquinas da rede&amp;lt;span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Essa opção pode parecer menos intuitiva, pois o usuário precisará executar manualmente o '''daemon do docker rootless''' em um terminal e mantê-lo em execução para poder utilizar os comandos docker em outros terminais.&lt;br /&gt;
&lt;br /&gt;
Isso pode ser facilmente feito utilizando os [https://www.verlab.dcc.ufmg.br/mediawiki/index.php/Trabalhando_remotamente#Usando_tmux_ou_byobu:_multiplexador_de_terminais  multiplexadores de terminal como tmux ou byobu].&lt;br /&gt;
&lt;br /&gt;
Uma vez que parar a execução do docker daemon com ctrl+c ou fechar o terminal, isso vai &amp;quot;matar&amp;quot; a execução do docker rootless na máquina e parar todos seus containers de forma abrupta. Porém tem a flexibilidade de não precisar da pasta /home para armazenar as configurações do daemon, então &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;com essa configuração é possível executar o docker rootless em várias máquinas simultaneamente!&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pré-requisitos ===&lt;br /&gt;
Para utilizar Docker Rootless em uma máquina no laboratório é preciso que o usuário: &lt;br /&gt;
&lt;br /&gt;
* solicite à equipe de rede para criar uma pasta de rascunho no disco local como /draft-xxx/nome_do_usuario e dar permissão de leitura/escrita.&lt;br /&gt;
* solicite à equipe de rede a instalação do docker na máquina.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuração ===&lt;br /&gt;
&lt;br /&gt;
# Abra seu arquivo &amp;lt;code&amp;gt;~/.bashrc&amp;lt;/code&amp;gt; no editor de texto preferido, se for no terminal pode usar o nano: &amp;lt;code&amp;gt;'''nano ~/.bashrc'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Cole as seguintes funções no final desse arquivo e salve o mesmo:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Criar arquivo de configuração do tmux para habilitar o mouse e outras coisas úteis&lt;br /&gt;
|-&lt;br /&gt;
|  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Funções para adicionar no final do aquivo ~/.bashrc e usar docker rootless na rede VeRLab/JLab&lt;br /&gt;
&lt;br /&gt;
# Função para criar pastas e configuração do docker rootless&lt;br /&gt;
function docker-rootless-create-dir(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  # Cria environment variables para pastas&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Create Folder...&amp;quot;&lt;br /&gt;
  export USER_BASE_DIR=/draft-hdd/${MYUSER}  &amp;amp;&amp;amp; \&lt;br /&gt;
  export USER_DOCKER_DIR=$USER_BASE_DIR/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  echo -e &amp;quot;  USER_BASE_DIR=$USER_BASE_DIR\n  USER_DOCKER_DIR=$USER_DOCKER_DIR&amp;quot;&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_BASE_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_BASE_DIR=$USER_BASE_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  # Cria pastas usadas pelo docker rootless&lt;br /&gt;
  mkdir --parents $USER_DOCKER_DIR&lt;br /&gt;
  export XDG_RUNTIME_DIR=$USER_DOCKER_DIR/.docker/run  &amp;amp;&amp;amp; \&lt;br /&gt;
  export XDG_CONFIG_HOME=$USER_DOCKER_DIR/.config&lt;br /&gt;
  mkdir --parents $XDG_RUNTIME_DIR &amp;amp;&amp;amp; \&lt;br /&gt;
  mkdir --parents $XDG_CONFIG_HOME/docker&lt;br /&gt;
&lt;br /&gt;
  # Cria configuração do docker rootless&lt;br /&gt;
  echo &amp;quot;{\&amp;quot;data-root\&amp;quot;:\&amp;quot;${USER_DOCKER_DIR}/docker-cache\&amp;quot;}&amp;quot; | tee $XDG_CONFIG_HOME/docker/daemon.json  &amp;amp;&amp;amp; \&lt;br /&gt;
  nvidia-ctk runtime configure --runtime=docker --config=$XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;HOME=$HOME \nXDG_CONFIG_HOME=$XDG_CONFIG_HOME \nXDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \nXDG_DATA_HOME=$XDG_DATA_HOME \nDOCKER_HOST=$DOCKER_HOST&amp;quot;  &amp;amp;&amp;amp; \&lt;br /&gt;
  echo -e &amp;quot;cat $XDG_CONFIG_HOME/docker/daemon.json\n&amp;quot; &amp;amp;&amp;amp; cat $XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
  echo -e &amp;quot;\nDocker Rootless Folders and Config Files Successfully Created!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Função para iniciar manualmente daemon do docker no modo rootless&lt;br /&gt;
function docker-rootless-daemon-run(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  export USER_DOCKER_DIR=/draft-hdd/${MYUSER}/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  export XDG_RUNTIME_DIR=$USER_DOCKER_DIR/.docker/run  &amp;amp;&amp;amp; \&lt;br /&gt;
  export XDG_CONFIG_HOME=$USER_DOCKER_DIR/.config&lt;br /&gt;
  echo -e &amp;quot;  USER_DOCKER_DIR=$USER_DOCKER_DIR\n  XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR\n  XDG_CONFIG_HOME=$XDG_CONFIG_HOME&amp;quot;&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_DOCKER_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_DOCKER_DIR=$USER_DOCKER_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  echo -e &amp;quot;HOME=$HOME \nXDG_CONFIG_HOME=$XDG_CONFIG_HOME \nXDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \nXDG_DATA_HOME=$XDG_DATA_HOME \nDOCKER_HOST=$DOCKER_HOST&amp;quot;  &amp;amp;&amp;amp; \&lt;br /&gt;
  echo -e &amp;quot;cat $XDG_CONFIG_HOME/docker/daemon.json\n&amp;quot; &amp;amp;&amp;amp; cat $XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
  # Start docker daemon&lt;br /&gt;
  echo -e &amp;quot;Starting Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  dockerd-rootless.sh&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Função para exportar variáveis de ambiente para executar comandos do docker rootless&lt;br /&gt;
function docker-rootless-export(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  export USER_DOCKER_DIR=/draft-hdd/${MYUSER}/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  export DOCKER_HOST=unix://$USER_DOCKER_DIR/.docker/run/docker.sock&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_DOCKER_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_DOCKER_DIR=$USER_DOCKER_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  echo -e &amp;quot;  USER_DOCKER_DIR=$USER_DOCKER_DIR\n  DOCKER_HOST=$DOCKER_HOST&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Utilização ===&lt;br /&gt;
Uma vez que tiver as funções salvas em seu &amp;lt;code&amp;gt;'''~/.bashrc'''&amp;lt;/code&amp;gt; elas serão usadas para:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Como usar as funções docker-rootless-*&lt;br /&gt;
|-&lt;br /&gt;
! Função !! Descrição !! Utilização&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-create-dir()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Cria uma pasta para os arquivos do docker rootless daemon em &amp;lt;code&amp;gt;&amp;quot;/draft-hdd/&amp;lt;usuario&amp;gt;/docker-rootless&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Usada apenas a primeira vez na máquina. Se a pasta já foi criada anteriormente, não precisa mais usar essa função na mesma máquina.&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-daemon-run()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Executar o docker rootless daemon no terminal atual no tmux ou byobu&lt;br /&gt;
|Usada uma vez, para não haver outro terminal executando o docker rootless daemon na máquina.&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-export()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Exportar as variáveis de ambiente com o path correto do docker rootless daemon e do docker.sock (''XDG_RUNTIME_DIR'' e ''DOCKER_HOST'')&lt;br /&gt;
|Usada em todo novo terminal que abrir e quiser usar comando docker. Também pode ser colocada no final do ~/.bashrc para valer automaticamente.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para utilizar o docker:&lt;br /&gt;
&lt;br /&gt;
# Faça ''ssh'' numa das máquinas que tem o docker rootless instalado&lt;br /&gt;
# Se a pasta &amp;lt;code&amp;gt;&amp;quot;/draft-hdd/&amp;lt;usuario&amp;gt;/docker-rootless&amp;quot;&amp;lt;/code&amp;gt; ainda não foi criada para seu usuário na máquina, execute: &amp;lt;code&amp;gt;'''docker-rootless-create-dir'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# No terminal abra o multiplexador de terminais, por exemplo, comando: &amp;lt;code&amp;gt;'''tmux'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Dentro da '''janela 0''' do tmux, execute o docker rootless daemon: &amp;lt;code&amp;gt;'''docker-rootless-daemon-run'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Abra outra janela no tmux: ctrl+b c&lt;br /&gt;
# Na '''janela 1''' faça o export do path para executar comandos docker:  &amp;lt;code&amp;gt;'''docker-rootless-export'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Na '''janela 1''' execute os comandos docker:  &amp;lt;code&amp;gt;'''docker version ; docker compose version; docker info;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Limpar dados do docker rootless: cache, images e containers ==&lt;br /&gt;
&lt;br /&gt;
Para desocupar espaço em disco das máquinas, caso não esteja utilizando o docker, mas deseja manter a estrutura de pastas do docker rootless daemon, pode-se apagar todas as imagens, cache e containers com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''docker system prune --all'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alguns links de referencia:&lt;br /&gt;
* https://stackoverflow.com/questions/44785585/how-can-i-delete-all-local-docker-images&lt;br /&gt;
* https://contabo.com/blog/how-to-remove-docker-volumes-images-and-containers/?gad_source=1&amp;amp;gclid=CjwKCAjwydSzBhBOEiwAj0XN4JA5Mz8X1bAK-PaXKPz9PyQnJKdahvYG3Z6CBm5ydgRmsNymOFU9FhoC4a0QAvD_BwE&lt;br /&gt;
* https://earthly.dev/blog/docker-image-storage-on-host/&lt;br /&gt;
* https://docs.docker.com/reference/cli/docker/system/prune/#extended-description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker abrindo janela no Ubuntu ==&lt;br /&gt;
exemplo com ROS&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;'''docker run --detach --privileged \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /tmp/.X11-unix:/tmp/.X11-unix \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /home:/home/host \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--device=/dev/bus/usb:/dev/bus/usb \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /dev:/dev \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--runtime=nvidia \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--gpus 'all,&amp;quot;capabilities=utility,display,compute&amp;quot;' \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--env DISPLAY=$DISPLAY \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--network=host \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--name ros_noetic_gps_testing_container \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''ros_noetic_gps_testing:latest \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''tail -f /dev/null'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Criar regra udev para dispositivo USB ==&lt;br /&gt;
Para descobrir o idProduct e idVendor do dispositivo, pode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; udevadm info -a -n /dev/ttyACM0 &amp;lt;\code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Criar o arquivo com a regra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; sudo nano /etc/udev/rules.d/99-ublox-gps.rules &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adicionar essa linha no arquivo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;tty&amp;quot;, ATTRS{idVendor}==&amp;quot;1546&amp;quot;, ATTRS{idProduct}==&amp;quot;01a9&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;dialout&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se quiser criar um novo nome (link simbolico /dev/ublox) adicionar SYMLINK:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SUBSYSTEM==&amp;quot;tty&amp;quot;, ATTRS{idVendor}==&amp;quot;2341&amp;quot;, ATTRS{idProduct}==&amp;quot;0043&amp;quot;, SYMLINK+=&amp;quot;ublox&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;dialout&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaacreyes</name></author>	</entry>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Docker&amp;diff=1483</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Docker&amp;diff=1483"/>
				<updated>2025-04-09T11:51:56Z</updated>
		
		<summary type="html">&lt;p&gt;Isaacreyes: /* Limpar dados do docker rootless: cache, images e containers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker Rootless Mode ==&lt;br /&gt;
&lt;br /&gt;
O modo disponível do Docker para os usuários da rede é o '''Docker Engine no modo Rootless''', ou seja, apenas a versão em linha de comando e no modo de acesso non-root.&lt;br /&gt;
&lt;br /&gt;
Em geral, funciona para todas as aplicações e pode-se ler mais informações no [https://docs.docker.com/engine/security/rootless/ link Docker Rootless]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante''': para estas configurações é necessário que a máquina tenha um docker instalado com versão &amp;gt;= 20.10 (pode ser conferido com: &amp;lt;code&amp;gt;docker version&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Este processo ainda se encontra em uma fase experimental e não está disponível em todas as máquinas. As máquinas disponíveis com docker até o momento são '''PROC1, PROC2, PROC5, PROC6, PROC7, EPONA, NYMERIA, DROGON''', '''EVA, WALL-E, MAGRITTE''' e '''DALEK'''.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuração Docker rootless com Systemd (&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;não é possível usar simultaneamente em outras máquinas, apenas em uma máquina da rede por vez&amp;lt;/span&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A opção mais intuitiva para executar o Docker Rootless é gerenciando pelo '''systemctl --user'''. Porém tem a limitação de &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''funcionar em apenas uma máquina da rede por vez'''&amp;lt;/span&amp;gt;, pois o arquivo que gerencia o systemctl do usuário é salvo na /home que é compartilhada em todas as máquinas, portanto '''apenas um processo docker rootless do usuário pode ser criado, mas em qualquer máquina da rede'''.&lt;br /&gt;
&lt;br /&gt;
=== Pré-requisitos ===&lt;br /&gt;
Para utilizar docker rootless em uma máquina no laboratório é preciso que o usuário: &lt;br /&gt;
&lt;br /&gt;
* solicite à equipe de rede para criar uma pasta de rascunho no disco local como /draft-xxx/nome_do_usuario e dar permissão de leitura/escrita.&lt;br /&gt;
* solicite à equipe de rede a instalação do docker na máquina.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuração ===&lt;br /&gt;
Feito estas etapas, para configurar o acesso na máquina é preciso seguir os seguintes passos para executar o docker rootless:&lt;br /&gt;
&lt;br /&gt;
# Crie a pasta &amp;lt;code&amp;gt;~/.config/docker&amp;lt;/code&amp;gt; com o comando &amp;lt;code&amp;gt;mkdir -p ~/.config/docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Altere a pasta de armazenamento dos arquivos de cache do Docker para a pasta de rascunho /draft-xxx com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo '{&amp;quot;data-root&amp;quot;:&amp;quot;/&amp;lt;path-em-disco-local&amp;gt;/&amp;lt;user&amp;gt;/docker-cache&amp;quot;}' | tee ~/.config/docker/daemon.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante:''' Lembre-se de ajustar o &amp;lt;code&amp;gt;&amp;lt;path-em-disco-local&amp;gt;/&amp;lt;user&amp;gt;&amp;lt;/code&amp;gt; para uma armazenamento de rascunho na máquina e alguma pasta do seu usuário (por exemplo, &amp;lt;code&amp;gt;/draft-hdd/fulano&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Esses dois primeiros passos são específicos para as máquinas do VeRLab: por padrão o Docker guarda arquivos na /home do usuário, mas essa pasta é compartilhada em rede (por NFS ou MooseFS) e o Docker não dá suporte a isso.[https://github.com/docker/for-linux/issues/1172 Aqui está um issue citando o problema]&lt;br /&gt;
&lt;br /&gt;
# Execute &amp;lt;code&amp;gt;dockerd-rootless-setuptool.sh install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Importante''': Após terminar, o comando vai pedir que você altere seu .bashrc para adicionar uma linha semelhante a &amp;lt;code&amp;gt;export DOCKER_HOST=unix:///run/user/&amp;lt;uid&amp;gt;/docker.sock&amp;lt;/code&amp;gt; (varia por usuário). Faça essa alteração antes de prosseguir copiando e colando o comando no terminal.&lt;br /&gt;
# Reinicie o Bash com &amp;lt;code&amp;gt;exec bash&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Ative a inicialização automática do Docker em seu usuário: &amp;lt;code&amp;gt;systemctl --user enable --now docker&amp;lt;/code&amp;gt; ou manualmente: &amp;lt;code&amp;gt;systemctl --user start docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Com isso, a configuração está pronta!&lt;br /&gt;
&lt;br /&gt;
=== Utilização ===&lt;br /&gt;
Comandos para confirmar se o Docker está funcionando:&lt;br /&gt;
* Verificar status do docker daemon:  &amp;lt;code&amp;gt;systemctl --user status docker.service&amp;lt;/code&amp;gt;&lt;br /&gt;
* Parar docker daemon:  &amp;lt;code&amp;gt;systemctl --user stop docker.service&amp;lt;/code&amp;gt;&lt;br /&gt;
* Verificar configurações do Docker Rootless: &amp;lt;code&amp;gt;docker version&amp;lt;/code&amp;gt;  ou  &amp;lt;code&amp;gt;docker info&amp;lt;/code&amp;gt;&lt;br /&gt;
* Baixar uma imagem teste e executá-la: &amp;lt;code&amp;gt;docker run hello-world&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuração Docker Rootless &amp;quot;Manual&amp;quot; para &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;execução simultânea em várias máquinas da rede&amp;lt;span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Essa opção pode parecer menos intuitiva, pois o usuário precisará executar manualmente o '''daemon do docker rootless''' em um terminal e mantê-lo em execução para poder utilizar os comandos docker em outros terminais.&lt;br /&gt;
&lt;br /&gt;
Isso pode ser facilmente feito utilizando os [https://www.verlab.dcc.ufmg.br/mediawiki/index.php/Trabalhando_remotamente#Usando_tmux_ou_byobu:_multiplexador_de_terminais  multiplexadores de terminal como tmux ou byobu].&lt;br /&gt;
&lt;br /&gt;
Uma vez que parar a execução do docker daemon com ctrl+c ou fechar o terminal, isso vai &amp;quot;matar&amp;quot; a execução do docker rootless na máquina e parar todos seus containers de forma abrupta. Porém tem a flexibilidade de não precisar da pasta /home para armazenar as configurações do daemon, então &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;com essa configuração é possível executar o docker rootless em várias máquinas simultaneamente!&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pré-requisitos ===&lt;br /&gt;
Para utilizar Docker Rootless em uma máquina no laboratório é preciso que o usuário: &lt;br /&gt;
&lt;br /&gt;
* solicite à equipe de rede para criar uma pasta de rascunho no disco local como /draft-xxx/nome_do_usuario e dar permissão de leitura/escrita.&lt;br /&gt;
* solicite à equipe de rede a instalação do docker na máquina.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuração ===&lt;br /&gt;
&lt;br /&gt;
# Abra seu arquivo &amp;lt;code&amp;gt;~/.bashrc&amp;lt;/code&amp;gt; no editor de texto preferido, se for no terminal pode usar o nano: &amp;lt;code&amp;gt;'''nano ~/.bashrc'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Cole as seguintes funções no final desse arquivo e salve o mesmo:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Criar arquivo de configuração do tmux para habilitar o mouse e outras coisas úteis&lt;br /&gt;
|-&lt;br /&gt;
|  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Funções para adicionar no final do aquivo ~/.bashrc e usar docker rootless na rede VeRLab/JLab&lt;br /&gt;
&lt;br /&gt;
# Função para criar pastas e configuração do docker rootless&lt;br /&gt;
function docker-rootless-create-dir(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  # Cria environment variables para pastas&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Create Folder...&amp;quot;&lt;br /&gt;
  export USER_BASE_DIR=/draft-hdd/${MYUSER}  &amp;amp;&amp;amp; \&lt;br /&gt;
  export USER_DOCKER_DIR=$USER_BASE_DIR/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  echo -e &amp;quot;  USER_BASE_DIR=$USER_BASE_DIR\n  USER_DOCKER_DIR=$USER_DOCKER_DIR&amp;quot;&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_BASE_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_BASE_DIR=$USER_BASE_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  # Cria pastas usadas pelo docker rootless&lt;br /&gt;
  mkdir --parents $USER_DOCKER_DIR&lt;br /&gt;
  export XDG_RUNTIME_DIR=$USER_DOCKER_DIR/.docker/run  &amp;amp;&amp;amp; \&lt;br /&gt;
  export XDG_CONFIG_HOME=$USER_DOCKER_DIR/.config&lt;br /&gt;
  mkdir --parents $XDG_RUNTIME_DIR &amp;amp;&amp;amp; \&lt;br /&gt;
  mkdir --parents $XDG_CONFIG_HOME/docker&lt;br /&gt;
&lt;br /&gt;
  # Cria configuração do docker rootless&lt;br /&gt;
  echo &amp;quot;{\&amp;quot;data-root\&amp;quot;:\&amp;quot;${USER_DOCKER_DIR}/docker-cache\&amp;quot;}&amp;quot; | tee $XDG_CONFIG_HOME/docker/daemon.json  &amp;amp;&amp;amp; \&lt;br /&gt;
  nvidia-ctk runtime configure --runtime=docker --config=$XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
&lt;br /&gt;
  echo -e &amp;quot;HOME=$HOME \nXDG_CONFIG_HOME=$XDG_CONFIG_HOME \nXDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \nXDG_DATA_HOME=$XDG_DATA_HOME \nDOCKER_HOST=$DOCKER_HOST&amp;quot;  &amp;amp;&amp;amp; \&lt;br /&gt;
  echo -e &amp;quot;cat $XDG_CONFIG_HOME/docker/daemon.json\n&amp;quot; &amp;amp;&amp;amp; cat $XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
  echo -e &amp;quot;\nDocker Rootless Folders and Config Files Successfully Created!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Função para iniciar manualmente daemon do docker no modo rootless&lt;br /&gt;
function docker-rootless-daemon-run(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  export USER_DOCKER_DIR=/draft-hdd/${MYUSER}/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  export XDG_RUNTIME_DIR=$USER_DOCKER_DIR/.docker/run  &amp;amp;&amp;amp; \&lt;br /&gt;
  export XDG_CONFIG_HOME=$USER_DOCKER_DIR/.config&lt;br /&gt;
  echo -e &amp;quot;  USER_DOCKER_DIR=$USER_DOCKER_DIR\n  XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR\n  XDG_CONFIG_HOME=$XDG_CONFIG_HOME&amp;quot;&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_DOCKER_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_DOCKER_DIR=$USER_DOCKER_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  echo -e &amp;quot;HOME=$HOME \nXDG_CONFIG_HOME=$XDG_CONFIG_HOME \nXDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \nXDG_DATA_HOME=$XDG_DATA_HOME \nDOCKER_HOST=$DOCKER_HOST&amp;quot;  &amp;amp;&amp;amp; \&lt;br /&gt;
  echo -e &amp;quot;cat $XDG_CONFIG_HOME/docker/daemon.json\n&amp;quot; &amp;amp;&amp;amp; cat $XDG_CONFIG_HOME/docker/daemon.json&lt;br /&gt;
  # Start docker daemon&lt;br /&gt;
  echo -e &amp;quot;Starting Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  dockerd-rootless.sh&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Função para exportar variáveis de ambiente para executar comandos do docker rootless&lt;br /&gt;
function docker-rootless-export(){&lt;br /&gt;
  MYUSER=$(whoami)&lt;br /&gt;
  echo -e &amp;quot;Exporting Environment Variables for Docker Rootless Daemon...&amp;quot;&lt;br /&gt;
  export USER_DOCKER_DIR=/draft-hdd/${MYUSER}/docker-rootless  &amp;amp;&amp;amp;\&lt;br /&gt;
  export DOCKER_HOST=unix://$USER_DOCKER_DIR/.docker/run/docker.sock&lt;br /&gt;
  # Verifica pasta do usuário usada pelo docker rootless&lt;br /&gt;
  if [ ! -w &amp;quot;$USER_DOCKER_DIR&amp;quot; ]; then&lt;br /&gt;
    echo -e &amp;quot;ERROR!\n  USER_DOCKER_DIR=$USER_DOCKER_DIR needs to be writable!&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
  echo -e &amp;quot;  USER_DOCKER_DIR=$USER_DOCKER_DIR\n  DOCKER_HOST=$DOCKER_HOST&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Utilização ===&lt;br /&gt;
Uma vez que tiver as funções salvas em seu &amp;lt;code&amp;gt;'''~/.bashrc'''&amp;lt;/code&amp;gt; elas serão usadas para:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Como usar as funções docker-rootless-*&lt;br /&gt;
|-&lt;br /&gt;
! Função !! Descrição !! Utilização&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-create-dir()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Cria uma pasta para os arquivos do docker rootless daemon em &amp;lt;code&amp;gt;&amp;quot;/draft-hdd/&amp;lt;usuario&amp;gt;/docker-rootless&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Usada apenas a primeira vez na máquina. Se a pasta já foi criada anteriormente, não precisa mais usar essa função na mesma máquina.&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-daemon-run()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Executar o docker rootless daemon no terminal atual no tmux ou byobu&lt;br /&gt;
|Usada uma vez, para não haver outro terminal executando o docker rootless daemon na máquina.&lt;br /&gt;
|-&lt;br /&gt;
|''docker-rootless-export()''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|Exportar as variáveis de ambiente com o path correto do docker rootless daemon e do docker.sock (''XDG_RUNTIME_DIR'' e ''DOCKER_HOST'')&lt;br /&gt;
|Usada em todo novo terminal que abrir e quiser usar comando docker. Também pode ser colocada no final do ~/.bashrc para valer automaticamente.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para utilizar o docker:&lt;br /&gt;
&lt;br /&gt;
# Faça ''ssh'' numa das máquinas que tem o docker rootless instalado&lt;br /&gt;
# Se a pasta &amp;lt;code&amp;gt;&amp;quot;/draft-hdd/&amp;lt;usuario&amp;gt;/docker-rootless&amp;quot;&amp;lt;/code&amp;gt; ainda não foi criada para seu usuário na máquina, execute: &amp;lt;code&amp;gt;'''docker-rootless-create-dir'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# No terminal abra o multiplexador de terminais, por exemplo, comando: &amp;lt;code&amp;gt;'''tmux'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Dentro da '''janela 0''' do tmux, execute o docker rootless daemon: &amp;lt;code&amp;gt;'''docker-rootless-daemon-run'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Abra outra janela no tmux: ctrl+b c&lt;br /&gt;
# Na '''janela 1''' faça o export do path para executar comandos docker:  &amp;lt;code&amp;gt;'''docker-rootless-export'''&amp;lt;/code&amp;gt;&lt;br /&gt;
# Na '''janela 1''' execute os comandos docker:  &amp;lt;code&amp;gt;'''docker version ; docker compose version; docker info;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Limpar dados do docker rootless: cache, images e containers ==&lt;br /&gt;
&lt;br /&gt;
Para desocupar espaço em disco das máquinas, caso não esteja utilizando o docker, mas deseja manter a estrutura de pastas do docker rootless daemon, pode-se apagar todas as imagens, cache e containers com:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''docker system prune --all'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alguns links de referencia:&lt;br /&gt;
* https://stackoverflow.com/questions/44785585/how-can-i-delete-all-local-docker-images&lt;br /&gt;
* https://contabo.com/blog/how-to-remove-docker-volumes-images-and-containers/?gad_source=1&amp;amp;gclid=CjwKCAjwydSzBhBOEiwAj0XN4JA5Mz8X1bAK-PaXKPz9PyQnJKdahvYG3Z6CBm5ydgRmsNymOFU9FhoC4a0QAvD_BwE&lt;br /&gt;
* https://earthly.dev/blog/docker-image-storage-on-host/&lt;br /&gt;
* https://docs.docker.com/reference/cli/docker/system/prune/#extended-description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker abrindo janela no Ubuntu ==&lt;br /&gt;
exemplo com ROS&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;'''docker run --detach --privileged \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /tmp/.X11-unix:/tmp/.X11-unix \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /home:/home/host \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--device=/dev/bus/usb:/dev/bus/usb \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--volume /dev:/dev \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--runtime=nvidia \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--gpus 'all,&amp;quot;capabilities=utility,display,compute&amp;quot;' \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--env DISPLAY=$DISPLAY \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--network=host \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''--name ros_noetic_gps_testing_container \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''ros_noetic_gps_testing:latest \ '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''tail -f /dev/null'''&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isaacreyes</name></author>	</entry>

	</feed>