anúncios

domingo, 29 de outubro de 2023

Alterando o diretório padrão do Docker

O Docker é uma das ferramentas mais populares para o empacotamento e execução de aplicativos em contêineres. No entanto, o diretório padrão de armazenamento do Docker no GNU/Linux Debian e derivados é /var/lib/docker, o que pode se tornar um problema se você estiver com espaço em disco limitado na partição raiz. Felizmente, é possível alterar o local de armazenamento padrão do Docker para outro diretório. Esse é objetivo deste post.

Por que Mudar o Diretório Padrão do Docker?

Motivo #1: Falta de Espaço na Partição Raiz

Um dos principais motivos para alterar o diretório padrão do Docker é a falta de espaço na partição raiz do sistema. O diretório padrão, que normalmente é /var/lib/docker, pode crescer significativamente à medida que você cria e executa contêineres, armazena imagens e realiza outras operações relacionadas ao Docker. Se o espaço na partição raiz se esgotar, isso pode levar a problemas de funcionamento do sistema e até mesmo à interrupção de serviços essenciais.

Ao mover o diretório de armazenamento para outra partição ou disco com espaço suficiente, você evita a falta de espaço na partição raiz e garante que o Docker continue funcionando sem problemas.

Aplicar na prática

Segue os procedimentos de configuração para alterar o diretório padrão do Docker

O Docker utiliza um arquivo de configuração chamado daemon.json para definir várias configurações, incluindo o local de armazenamento padrão. Se esse arquivo não existir, você pode criá-lo.

Para editar o arquivo de configuração, você pode usar um editor de texto de sua preferência. No exemplo a seguir, usaremos o editor vim:

sudo vim /etc/docker/daemon.json

Dentro do arquivo daemon.json, adicione a seguinte configuração para especificar o novo diretório que você deseja usar:


{
"data-root": "/caminho/para/o/novo/diretorio"
}

Certifique-se de substituir /caminho/para/o/novo/diretorio pelo caminho absoluto do novo diretório que você deseja utilizar para armazenar os contêineres e imagens do Docker.

ESC +:x (salvar e sair do editor Vim)

Antes de reiniciar o serviço Docker, é uma boa prática copiar os dados existentes do diretório padrão /var/lib/docker para o novo diretório que você especificou em data-root. Isso garante que você não perca nenhum contêiner, imagem ou dados importantes. Use o comando rsync para realizar a cópia:

sudo rsync -aP /var/lib/docker/ /caminho/para/o/novo/diretorio

Certifique-se de substituir /caminho/para/o/novo/diretorio pelo caminho absoluto do novo diretório que você definiu anteriormente.

Após copiar os dados existentes, você pode reiniciar o serviço Docker para que as alterações entrem em vigor:

sudo systemctl restart docker

Com essas etapas, você pode personalizar o local de armazenamento do Docker no Debian e desfrutar de maior flexibilidade no gerenciamento de recursos de disco em seu sistema.

Antes de concluir o processo, é essencial verificar se a alteração do diretório padrão do Docker foi bem-sucedida. Execute o seguinte comando para confirmar a configuração atual:

docker info | grep -i "Docker Root Dir:"

O resultado deve mostrar o novo diretório que você configurou em data-root. Certifique-se de que a saída corresponda ao caminho do novo diretório.

Feito!

sábado, 28 de outubro de 2023

Desvendando a Promise do JavaScript moderno

No mundo do desenvolvimento JavaScript, a programação assíncrona é uma parte fundamental. Afinal, muitas tarefas, como fazer solicitações à web, carregar recursos externos ou executar operações de longa duração, não podem bloquear a execução do código. Aqui é onde a Promise entram em cena.

O Problema da Assincronia

JavaScript é uma linguagem single-threaded, o que significa que ele executa um bloco de código após o outro. Quando nos deparamos com operações assíncronas, como buscar dados de um servidor ou ler um arquivo, não podemos simplesmente esperar que a operação seja concluída, pois isso bloquearia a interface do usuário. Em vez disso, precisamos de uma maneira de lidar com essas tarefas de forma assíncrona.

O que são Promise?

As Promises são um recurso JavaScript que nos permitem lidar com operações assíncronas de uma maneira mais organizada e eficiente. Elas representam um valor que pode não estar disponível imediatamente, mas será resolvido em algum momento no futuro. Uma Promise pode estar em um dos três estados: pendente (pending), cumprida (fulfilled) ou rejeitada (rejected).

Pendente (Pending): Este é o estado inicial de uma Promise. Isso significa que a operação ainda não foi concluída, mas pode estar em progresso.

Cumprida (Fulfilled): Isso significa que a operação assíncrona foi concluída com sucesso e a Promise tem um valor resultante.

Rejeitada (Rejected): Isso significa que ocorreu um erro durante a operação assíncrona e a Promise possui um motivo de rejeição, geralmente uma exceção ou uma mensagem de erro.

Criando uma Promise

Você pode criar uma Promise usando o construtor Promise. O construtor Promise recebe uma função executora como argumento, que possui dois parâmetros: resolve e reject. A função executora deve conter a lógica da operação assíncrona.

const exemploPromise = new Promise((resolve, reject) => {
// Realize alguma operação assíncrona aqui
// Se a operação for bem-sucedida, chame resolve com o valor desejado
// Se ocorrer um erro, chame reject com o motivo da rejeição
});

Tratando Promise

Para lidar com Promise, você pode encadear os métodos then e catch. O método then é chamado quando a Promessa é cumprida, e você pode acessar o valor resolvido. O método catch é chamado quando a Promise é rejeitada e permite que você trate erros.

exemploPromise
.then(valor => {
console.log('Operação concluída com sucesso:', valor);
})
.catch(erro => {
console.error('Ocorreu um erro:', erro);
});

Exemplo prático

Vamos ao um exemplo prático. Suponha que você deseja buscar dados de um servidor com uma Promise:

const fetchDados = () => {
return new Promise((resolve, reject) => {
// Simulando uma solicitação à API
setTimeout(() => {
const dados = { id: 1, nome: "Exemplo de Dados" };
resolve(dados);
}, 2000);
});
};

fetchDados()
.then(dados => {
console.log('Dados obtidos com sucesso:', dados);
})
.catch(erro => {
console.error('Erro ao buscar dados:', erro);
});

Neste exemplo, fetchDados retorna uma Promise que é resolvida após um atraso de 2 segundos. Se a operação for bem-sucedida, a Promise é cumprida e os dados são exibidos no bloco then. Caso ocorra um erro, a Promise é rejeitada e o bloco catch trata o erro.

As Promises são uma parte essencial do JavaScript moderno, facilitando a lida com operações assíncronas e simplificando o código. Elas são a base para muitas APIs modernas, como a API Fetch, que usa Promessas para gerenciar solicitações de rede. Aprofundar seu conhecimento em Promessas é uma habilidade valiosa para qualquer desenvolvedor JavaScript.

Feito!

sexta-feira, 27 de outubro de 2023

Entendendo as diferenças entre Fetch e Axios

Quando se trata de fazer requisições HTTP em JavaScript, duas das opções mais populares são o método fetch e a biblioteca Axios. Ambos são utilizados para fazer solicitações a servidores web, mas eles têm diferenças significativas em termos de facilidade de uso, funcionalidade e suporte a recursos avançados. O presente post explica as diferenças entre fetch e Axios e apresenta um exemplo prático de como usar cada um deles.

fetch - O Nativo do Navegador

O fetch é um método nativo do JavaScript que permite fazer requisições HTTP. Ele foi introduzido com o objetivo de simplificar as solicitações assíncronas, permitindo que você faça requisições e receba respostas de servidores web. O fetch é amplamente suportado nos navegadores modernos e é uma parte do padrão ECMAScript.

Vantagens do fetch:

Padrão do navegador: Como parte do JavaScript nativo, o fetch está disponível em todos os navegadores modernos sem a necessidade de bibliotecas externas.

Promese: O fetch utiliza Promise, o que torna mais fácil o tratamento de respostas assíncronas.

API de Streams: Permite a leitura de respostas de maneira incremental usando a API de Streams, o que é útil para lidar com downloads de arquivos grandes.

Desvantagens do fetch:

Complexidade: O fetch pode ser mais verboso e requer manipulação manual de cabeçalhos e parâmetros.

Compatibilidade com Navegadores Antigos: Não é adequado para navegadores mais antigos, exigindo polifilas em alguns casos.

Axios - A Alternativa Popular

Axios é uma biblioteca JavaScript que simplifica a realização de requisições HTTP em comparação com o fetch. Ela é amplamente utilizada e fornece uma camada de abstração sobre o XMLHttpRequest nativo do navegador.

Vantagens do Axios:

Sintaxe Limpa: O Axios oferece uma sintaxe clara e simples para fazer solicitações HTTP, o que a torna mais amigável e fácil de usar.

Interceptores: Permite o uso de interceptores para pré-processar solicitações e respostas, o que é útil para autenticação e tratamento de erros.

Compatibilidade com Navegadores: Funciona em uma ampla variedade de navegadores, incluindo versões mais antigas, sem a necessidade de polifilas.

Desvantagens do Axios:

Dependência Externa: Você precisa incluir a biblioteca Axios em seu projeto, o que aumenta o tamanho do código em comparação com o fetch nativo.

Exemplo prático de utilização com fetch e Axios para fazer uma solitação GET a uma API REST que fornece informações do filósofo contemporâneo do século XXI.

API retorna pérolas ditas por Kanye West

Usando fetch:


  fetch('https://api.kanye.rest')
     .then(response => response.json())
         .then(data => console.log(data))
     .catch(error => console.error('Erro:', error));

Usando Axios:

npm install axios
  axios.get('https://api.kanye.rest')
    .then(response => console.log(response.data))
    .catch(error => console.error('Erro:', error));

Neste exemplo, o Axios fornece uma sintaxe mais limpa e legível em comparação com o fetch. No entanto, o fetch pode ser preferível se você estiver trabalhando em um ambiente moderno e quiser evitar dependências adicionais.

Em resumo, a escolha entre fetch e Axios depende das necessidades do seu projeto. Se você está desenvolvendo para navegadores modernos e deseja usar recursos nativos sempre que possível, o fetch pode ser a escolha certa. Por outro lado, se você procura facilidade de uso e funcionalidades adicionais, o Axios é uma opção sólida e amplamente adotada.

Ambos têm seu lugar no desenvolvimento web, e a escolha depende das circunstâncias específicas de seu projeto e de suas preferências pessoais.

Feito!