Um artigo para que você saiba o que é docker

1. O que é Docker

Docker é uma plataforma de conteinerização de código aberto projetada para simplificar o processo de desenvolvimento, implantação e execução de aplicativos. Ele fornece um ambiente em contêiner leve, portátil e independente que permite aos desenvolvedores criar, empacotar e distribuir aplicativos de maneira consistente em diferentes computadores.

A seguir estão vários conceitos básicos do Docker:

  • Contêiner : O contêiner é a unidade básica de implantação do Docker. É um ambiente de tempo de execução leve e independente que contém um aplicativo e suas dependências associadas. Os contêineres usam o namespace e a tecnologia de grupo de controle do kernel do Linux para obter isolamento e gerenciamento de recursos, de modo que os aplicativos executados em diferentes contêineres não afetem uns aos outros.
  • Imagem : uma imagem é um modelo para criar contêineres. Ele contém um sistema de arquivos completo, que inclui todos os arquivos, dependências e informações de configuração necessárias para a execução do aplicativo. As imagens são imutáveis ​​e várias instâncias de contêiner idênticas podem ser criadas por meio de imagens do Docker.
  • Registro de imagem : O registro de imagem é um local para armazenar e distribuir imagens do Docker. O warehouse de imagens públicas mais usado é o Docker Hub, que possui um grande número de imagens oficiais e compartilhadas pela comunidade. Além disso, você também pode construir um armazém de espelhos privado para armazenar suas próprias imagens espelhadas.
  • Dockerfile : um Dockerfile é um arquivo de texto que define o processo de construção de uma imagem do Docker. Ele contém uma série de instruções para especificar a imagem base, instalar software, copiar arquivos, configurar o ambiente etc. Por meio do Dockerfile, as imagens podem ser criadas automaticamente para garantir a consistência e a repetibilidade das imagens.

Os pontos fortes do Docker estão em sua leveza, portabilidade e flexibilidade. Ao usar o Docker, os desenvolvedores podem criar com mais facilidade um ambiente de desenvolvimento confiável, implantar aplicativos rapidamente, obter expansão elástica e orquestração de serviços e muito mais. Ao mesmo tempo, também fornece um rico ecossistema de ferramentas e serviços, como a ferramenta de orquestração de contêineres Docker Compose e a plataforma de orquestração de contêineres Kubernetes, tornando o gerenciamento de aplicativos em contêineres mais conveniente e eficiente.

2. A diferença e a conexão entre o Docker e a tecnologia virtual

  • Com base em contêineres, o Docker realizou mais encapsulamento, desde sistema de arquivos, interconexão de rede até isolamento de processos, etc., o que simplifica muito a criação e manutenção de contêineres. Isso torna a tecnologia Docker mais leve e rápida do que a tecnologia de máquinas virtuais.
  • A imagem abaixo compara a diferença entre o Docker e os métodos de virtualização tradicionais. A tecnologia tradicional de máquina virtual é virtualizar um conjunto de hardware, executar um sistema operacional completo nele e, em seguida, executar o processo de aplicativo necessário no sistema. O processo do aplicativo no contêiner é executado diretamente no kernel do host. O contêiner não possui seu próprio kernel e não há virtualização de hardware. Portanto, os contêineres são mais portáteis do que as máquinas virtuais tradicionais.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

3. Por que usar o Docker

Como um método de virtualização emergente, o Docker tem muitas vantagens em comparação com os métodos de virtualização tradicionais:

  • Uso mais eficiente dos recursos do sistema

Como os contêineres não exigem sobrecarga adicional, como virtualização de hardware e execução de um sistema operacional completo, o Docker utiliza os recursos do sistema com mais eficiência. Quer se trate de velocidade de execução de aplicativos, consumo de memória ou velocidade de armazenamento de arquivos, é mais eficiente do que a tecnologia de máquina virtual tradicional. Portanto, em comparação com a tecnologia de máquina virtual, um host com a mesma configuração geralmente pode executar mais aplicativos.

  • tempo de inicialização mais rápido

A tecnologia de máquina virtual tradicional geralmente leva vários minutos para iniciar os serviços de aplicativo, enquanto os aplicativos de contêiner Docker, porque são executados diretamente no kernel do host e não precisam iniciar um sistema operacional completo, podem atingir um tempo de inicialização de segundo nível ou mesmo de milissegundos. Economiza muito o tempo de desenvolvimento, teste e implantação.

  • ambiente operacional consistente

Um problema comum durante o desenvolvimento são os problemas de consistência do ambiente. Devido à inconsistência entre o ambiente de desenvolvimento, ambiente de teste e ambiente de produção, alguns bugs não foram descobertos durante o processo de desenvolvimento. A imagem do Docker fornece um ambiente de execução completo, exceto o kernel, garantindo a consistência do ambiente de execução do aplicativo, para que não haja mais problemas como "esse código está bom na minha máquina" .

  • Entrega e implantação contínuas

Para o pessoal de desenvolvimento e operação e manutenção (DevOps), a maior esperança é criar ou configurar uma vez, e pode ser executado normalmente em qualquer lugar.

O uso do Docker pode alcançar integração contínua, entrega contínua e implantação personalizando imagens de aplicativos. Os desenvolvedores podem usar o Dockerfile para criar imagens e combiná-las com sistemas de Integração Contínua (Continuous Integration) para testes de integração, enquanto o pessoal de operação e manutenção pode implantar rapidamente as imagens diretamente no ambiente de produção, mesmo combinadas com sistemas de Continuous Deployment (Continuous Delivery/Deployment) para implantação automática.

Além disso, o uso do Dockerfile para tornar a construção da imagem transparente não apenas permite que a equipe de desenvolvimento entenda o ambiente operacional do aplicativo, mas também facilita que a equipe de operação e manutenção entenda as condições necessárias para a operação do aplicativo, ajudando a implantar melhor a imagem na produção ambiente.

  • migração mais fácil

Como o Docker garante a consistência do ambiente de execução, ele facilita a migração de aplicativos. O Docker pode ser executado em várias plataformas, seja uma máquina física, uma máquina virtual, uma nuvem pública, uma nuvem privada ou até mesmo um laptop, os resultados são os mesmos. Portanto, o usuário pode migrar facilmente o aplicativo executado em uma plataforma para outra sem se preocupar com a situação de o aplicativo não poder ser executado normalmente devido à mudança do ambiente operacional.

  • Manutenção e expansão mais fáceis

A tecnologia de armazenamento e espelhamento em camadas usada pelo Docker facilita a reutilização das partes repetidas do aplicativo, além de facilitar a manutenção e atualização do aplicativo. Também é muito simples expandir ainda mais o espelhamento com base no espelhamento básico. Além disso, a equipe do Docker mantém um grande número de imagens oficiais de alta qualidade em conjunto com várias equipes de projetos de código aberto , que podem ser usadas diretamente no ambiente de produção ou usadas como base para posterior personalização, o que reduz muito o custo de produção da imagem para serviços de aplicativos.

  • Resumo da comparação com máquinas virtuais tradicionais
característica recipiente máquina virtual
comece segundo nível nível minuto
Uso do disco rígido GeralmenteMB GeralmenteGB
desempenho perto de nativo mais fraco que
Suporte do sistema Uma única máquina suporta milhares de contêineres Geralmente dezenas

4. Vários conceitos básicos

4.1 Espelhamento

Todos sabemos que o sistema operacional é dividido em kernel e espaço do usuário. Para Linux, depois que o kernel for iniciado, o sistema de arquivos raiz será montado para fornecer suporte ao espaço do usuário. A imagem do Docker (Imagem) é equivalente a um sistema de arquivos raiz. Por exemplo, a imagem oficial ubuntu:18.04 contém um sistema de arquivos raiz completo do sistema mínimo do Ubuntu 18.04.

Uma imagem Docker é um sistema de arquivos especial. Além de fornecer os programas, bibliotecas, recursos, configuração e outros arquivos necessários para o container runtime, ele também contém alguns parâmetros de configuração preparados para runtime (como volumes anônimos, variáveis ​​de ambiente, usuários, etc). As imagens não contêm nenhum dado dinâmico e seu conteúdo não é alterado após a construção.

Armazenamento hierárquico de espelhos:

  • Como a imagem contém o sistema de arquivos raiz completo do sistema operacional, seu volume geralmente é enorme; portanto, ao projetar o Docker, ele faz uso total da tecnologia Union FS e o projeta como uma arquitetura de armazenamento hierárquico. Então, estritamente falando, uma imagem não é um arquivo empacotado como um ISO. Uma imagem é apenas um conceito virtual. Sua incorporação real não é composta por um arquivo, mas por um grupo de sistemas de arquivos, ou em outras palavras, uma combinação de vários sistemas de arquivos de camadas. composição.
  • Quando a imagem é construída, ela será construída camada por camada, e a camada anterior é a base da próxima camada. Depois que cada camada é construída, ela não será alterada novamente e quaisquer alterações na próxima camada ocorrerão apenas em sua própria camada. Por exemplo, a operação de exclusão de um arquivo na camada anterior não exclui realmente o arquivo na camada anterior, mas apenas marca o arquivo como excluído na camada atual. Quando o container final estiver em execução, embora este arquivo não seja visto, na verdade, o arquivo sempre seguirá a imagem. Portanto, ao construir uma imagem, você precisa ter muito cuidado, cada camada deve conter apenas o que precisa ser adicionado a essa camada, e qualquer coisa extra deve ser limpa antes do final da construção da camada.
  • O recurso de armazenamento hierárquico também facilita a reutilização e personalização de imagens. Você pode até usar a imagem construída anteriormente como a camada base e, em seguida, adicionar novas camadas para personalizar o que você precisa e criar uma nova imagem.

4.2 Contêineres

  • O relacionamento entre a imagem (Image) e o contêiner (Container) é como a classe e a instância na programação orientada a objetos.A imagem é uma definição estática e o contêiner é a entidade do tempo de execução da imagem. Os contêineres podem ser criados, iniciados, interrompidos, excluídos, pausados ​​etc.
  • A essência de um contêiner é um processo, mas, ao contrário de um processo executado diretamente no host, um processo de contêiner é executado em seu próprio namespace independente. Portanto, um contêiner pode ter seu próprio sistema de arquivos raiz, sua própria configuração de rede, seu próprio espaço de processo e até mesmo seu próprio espaço de ID de usuário. O processo no container é executado em um ambiente isolado e, quando usado, parece estar operando em um sistema independente do host. Esse recurso torna os aplicativos encapsulados em contêineres mais seguros do que executados diretamente no host. Também por causa desse recurso de isolamento, muitas pessoas costumam confundir contêineres e máquinas virtuais quando aprendem o Docker pela primeira vez.
  • Conforme mencionado anteriormente, as imagens usam armazenamento hierárquico, assim como os contêineres. Quando cada contêiner é executado, a imagem é usada como a camada base e uma camada de armazenamento para o contêiner atual é criada nela. Podemos chamar essa camada de armazenamento preparada para leitura e gravação do tempo de execução do contêiner como a camada de armazenamento do contêiner.
  • O ciclo de vida da camada de armazenamento do contêiner é o mesmo do contêiner. Quando o contêiner morre, a camada de armazenamento do contêiner também morre. Portanto, qualquer informação armazenada na camada de armazenamento do contêiner será perdida quando o contêiner for excluído.
  • De acordo com as práticas recomendadas do Docker, os contêineres não devem gravar nenhum dado em sua camada de armazenamento e a camada de armazenamento do contêiner deve permanecer sem estado. Todas as operações de gravação de arquivo devem usar volumes de dados (Volume) ou vincular diretórios de host. Ler e gravar nesses locais ignorará a camada de armazenamento do contêiner e lerá e gravará diretamente no host (ou armazenamento de rede). Maior estabilidade.
  • O ciclo de vida do volume de dados é independente do contêiner. Quando o contêiner morre, o volume de dados não morre. Portanto, depois de usar o volume de dados, os dados não serão perdidos depois que o contêiner for excluído ou reiniciado.

4.3 Armazém de espelhos

  • Depois que a imagem é criada, ela pode ser facilmente executada na máquina host atual. No entanto, se precisarmos usar essa imagem em outros servidores, precisamos de um serviço centralizado de armazenamento e distribuição de imagens. O Docker Registry é um desses serviços.
  • Um Docker Registry pode conter vários warehouses (Repository); cada warehouse pode conter várias tags (Tag); cada tag corresponde a uma imagem espelhada.
  • Normalmente, um warehouse conterá imagens de diferentes versões do mesmo software, e tags são freqüentemente usadas para corresponder a cada versão do software. Podemos usar <仓库名>:<标签>o formato de para especificar qual versão do software é a imagem espelhada. Se nenhum rótulo for fornecido, será usado latestcomo rótulo padrão.
  • Tomando como exemplo a imagem do Ubuntu, ubuntué o nome do warehouse, que contém diferentes tags de versão, como: 16.04, 18.04. Podemos usar ubuntu:16.04ou ubuntu:18.04para especificar qual versão da imagem precisamos. Se uma tag for omitida, por exemplo ubuntu, ela será tratada como ubuntu:latest.
  • O nome do warehouse geralmente aparece na forma de um caminho de duas partesjwilder/nginx-proxy . Por exemplo , o primeiro geralmente significa o nome do usuário no ambiente multiusuário do Docker Registry e o último geralmente significa o nome do software correspondente. Mas isso não é absoluto, dependendo do software ou serviço específico do Docker Registry usado.

4.3.1 Serviço público do Docker Registry

  • O serviço público Docker Registry é um serviço de registro aberto aos usuários e permite que os usuários gerenciem imagens. Geralmente, esses serviços públicos permitem que os usuários carreguem e baixem imagens públicas gratuitamente e podem fornecer serviços pagos para que os usuários gerenciem imagens privadas.
  • O serviço público de Registro mais usado é o Docker Hub oficial, que também é o Registro padrão e possui um grande número de imagens oficiais de alta qualidade. Além disso, há o Quay.io da Red Hat; o Google Container Registry do Google, que é usado pelo espelho do Kubernetes; e o ghcr.io lançado pela plataforma de hospedagem de código GitHub.
  • O acesso a esses serviços dentro do país pode ser mais lento por vários motivos. Alguns provedores de serviços de nuvem domésticos fornecem serviços de espelhamento ( Registry Mirror) para o Docker Hub, e esses serviços de espelhamento são chamados de aceleradores . Os mais comuns são Alibaba Cloud Accelerator , DaoCloud Accelerator , etc. Usar o acelerador fará o download direto da imagem do Docker Hub do endereço doméstico, o que será muito mais rápido do que baixar diretamente do Docker Hub.
  • Existem também alguns provedores de serviços em nuvem na China que fornecem serviços públicos semelhantes ao Docker Hub. Por exemplo, NetEase Cloud Mirror Service , DaoCloud Mirror Market , Alibaba Cloud Mirror Library , etc.

4.3.2 Registro privado do Docker

  • Além de usar serviços públicos, os usuários também podem criar um Docker Registry privado localmente. O Docker fornece oficialmente a imagem do Docker Registry, que pode ser usada diretamente como um serviço de registro privado.
  • A imagem do Docker Registry de código aberto fornece apenas a implementação do lado do servidor da API do Docker Registrydocker , que é suficiente para dar suporte a comandos sem afetar o uso. No entanto, não inclui uma interface gráfica e funções avançadas como manutenção de imagem, gerenciamento de usuários e controle de acesso.
  • Além do Docker Registry oficial, existem softwares de terceiros que implementam a API do Docker Registry e até fornecem uma interface de usuário e alguns recursos avançados. Por exemplo, Harbour e Sonatype Nexus .

4.4 Dockerfile

  • Dockerfile é um arquivo de texto usado para construir um espelho, e o conteúdo do texto contém instruções e instruções necessárias para construir um espelho.
  • Em uma pasta, se houver um arquivo chamado Dockfile cujo conteúdo atenda aos requisitos de sintaxe, execute o comando: neste caminho de pasta e você docker build --tag name:tag .poderá criar uma imagem espelhada de acordo com a descrição. nameÉ o nome da imagem tage é a versão ou número da tag da imagem. Se não for especificado, será o padrão lastest. Observe que há um espaço e um ponto depois dele.

Acho que você gosta

Origin blog.csdn.net/m0_51913750/article/details/131605981
Recomendado
Clasificación