Visão geral das notas do Docker (1)

I. Visão geral

1. Predecessor do Docker, LXC

LXC é a abreviatura de Linux Container (contêiner Linux). A virtualização leve pode ser fornecida para isolar processos e recursos sem fornecer mecanismos de interpretação de instruções e outras complexidades da virtualização completa. Equivalente ao NameSpace em C++. Os contêineres particionam efetivamente os recursos gerenciados por um único sistema operacional em grupos isolados para equilibrar melhor as necessidades conflitantes de uso de recursos entre grupos isolados.

2. A relação entre LXC e Docker

Docker não é um substituto para LXC. A camada inferior do docker é implementada usando LXC. LXC protege o processo Linux, para que os processos sejam isolados uns dos outros e possam controlar a alocação de recursos de cada processo. Baseado no LXC, o docker oferece uma série de funções mais poderosas.

3. O que é Docker

Docker é um mecanismo de contêiner de aplicativos de código aberto, baseado na linguagem Go e de código aberto em conformidade com o protocolo Apache2.0. Tecnologias como Linuxcgroup baseado em kernel, namespace e Union FS da classe OverlayFS encapsulam e isolam processos, que é uma tecnologia de virtualização no nível do sistema operacional. A implementação inicial foi baseada no LXC, que foi removido da versão 0.7 e posterior LXCe substituído pelo libcontainer autodesenvolvido.A partir de 1.11, ele evoluiu ainda mais para usar runC e containerd.

 

runcÉ uma ferramenta de linha de comando do Linux para criar e executar contêineres de acordo com a especificação OCI Container Runtime .

containerdÉ um daemon que gerencia o ciclo de vida do contêiner e fornece um conjunto mínimo de funções para executar contêineres e gerenciar imagens em um nó.

Os contêineres usam completamente o mecanismo sandbox e não possuem interfaces entre si (aplicativos semelhantes ao iPhone), e a sobrecarga do contêiner é extremamente baixa.

4. Cenários de aplicativos Docker

  • Empacotamento e publicação automatizados de aplicativos da web.

  • Testes automatizados e integração e lançamento contínuos.

  • Implante e ajuste bancos de dados ou outros aplicativos back-end em ambientes baseados em serviços.

  • Crie seu próprio ambiente PaaS compilando do zero ou estendendo uma plataforma OpenShift ou Cloud Foundry existente.

5. Vantagens do Docker

  • Flexível: até mesmo os aplicativos mais complexos podem ser armazenados em contêineres.

  • Leve: os contêineres utilizam e compartilham o kernel do host.

  • Intercambiáveis: atualizações e upgrades podem ser implantados instantaneamente.

  • Portátil: pode ser construído localmente, implantado na nuvem e executado em qualquer lugar.

  • Escalável: réplicas de contêineres podem ser adicionadas e distribuídas automaticamente. Empilhável: você pode empilhar serviços verticalmente e instantaneamente.

7. O que o Docker mudou?

  • Orientado ao Produto: Entrega do Produto

  • Orientado ao desenvolvimento: simplifique a configuração do ambiente

  • Orientado a testes: testes multi-versão

  • Orientado para a operação: consistência ambiental

  • Orientado para arquitetura: expansão automatizada (microsserviços)

8. Motor Docker

 

  • O servidor é um processo residente

  • API REST implementa o protocolo de interação entre cliente e servidor

  • CLI implementa gerenciamento de contêineres e imagens e fornece aos usuários uma interface operacional unificada

9. Arquitetura Docker

Docker usa a arquitetura C/S, e o Cliente se comunica com o processo do Servidor por meio da interface para construir, executar e publicar o contêiner. O cliente e o servidor podem ser executados no mesmo cluster ou podem se comunicar remotamente entre hosts.

 

Simplificando, o processo de execução de um programa com docker é usar a API remota para ir ao warehouse, extrair a imagem localmente e, em seguida, executar a imagem em um contêiner.

build: build, que é construir a imagem.

navio: transporte, imagem de transporte, transporte do armazém e host.

run: A imagem em execução é um contêiner.

Construir, enviar e operar correspondem a imagens, armazéns e contêineres individualmente.

10. Três conceitos importantes do docker

Imagem:

O sistema operacional é dividido em kernel e espaço do usuário. Para Linux, após o kernel ser iniciado, rooto sistema de arquivos será montado para fornecer suporte ao espaço do usuário. A imagem Docker (Imagem) é equivalente a um rootsistema de arquivos. Por exemplo, a imagem oficial ubuntu:18.04contém um conjunto completo de rootsistemas de arquivos mínimos do sistema Ubuntu 18.04.

A imagem Docker é um sistema de arquivos especial, além de fornecer programas, bibliotecas, recursos, configuração e outros arquivos necessários para o tempo de execução do contêiner, ele também contém alguns parâmetros de configuração preparados para o tempo de execução (como volumes anônimos, variáveis ​​​​de ambiente, usuários, etc.). . A imagem não contém dados dinâmicos e seu conteúdo não será alterado após ser construída.

Armazenamento em camadas:

Como a imagem contém o sistema de arquivos completo rootdo sistema operacional, seu volume costuma ser enorme, portanto, ao projetar o Docker, ele faz uso total da tecnologia Union FS e a projeta como uma arquitetura de armazenamento hierárquica. Então, estritamente falando, uma imagem não é um arquivo compactado como um ISO. Uma imagem é apenas um conceito virtual. Sua manifestação real não é composta de um arquivo, mas de um conjunto de sistemas de arquivos, ou em outras palavras, uma combinação de vários sistemas de arquivos. sistemas de arquivos em camadas.composição.

Quando a imagem for construída, ela será construída camada por camada, sendo a camada anterior a base da próxima camada. Após cada camada ser construída, ela não será alterada novamente. Quaisquer alterações na camada subsequente ocorrerão apenas em sua própria camada. Por exemplo, a operação de exclusão de um arquivo no nível anterior não exclui realmente o arquivo no nível anterior, mas apenas marca o arquivo como excluído no nível atual . Quando o container final for executado, embora este arquivo não seja visto, na verdade, o arquivo sempre seguirá a imagem. Portanto, ao construir uma imagem, você precisa ter cuidado extra. Cada camada deve conter apenas o que precisa ser adicionado à camada. Qualquer coisa extra deve ser limpa antes de a construção da camada ser concluída.

As características do armazenamento em camadas também facilitam a reutilização e personalização de imagens. Você pode até usar a imagem construída anteriormente como camada base e, em seguida, adicionar novas camadas para personalizar o que você precisa e construir uma nova imagem.

 

Recipiente

O relacionamento entre imagem ( Image) e contêiner ( ) é semelhante ao Containerda programação orientada a objetos . A imagem é uma definição estática e o contêiner é a entidade quando a imagem é executada. Os contêineres podem ser criados, iniciados, interrompidos, excluídos, pausados, etc.实例

A essência de um contêiner é um processo, mas diferentemente dos processos executados diretamente no host, os processos de contêiner são executados em seu próprio namespace independente. Portanto, um contêiner pode ter seu próprio rootsistema de arquivos, 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. Os processos no contêiner são executados em um ambiente isolado e usados ​​como se estivessem operando em um sistema independente do host. Esse recurso torna os aplicativos empacotados em contêineres mais seguros do que executados diretamente no host. 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 em camadas, e o mesmo vale para contêineres. Cada tempo de execução do contêiner usa a imagem como camada base e cria uma camada de armazenamento para o contêiner atual sobre ela. Podemos chamar essa camada de armazenamento preparada para leitura e gravação do tempo de execução do contêiner de 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 salva 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 arquivos devem usar um volume de dados (Volume) ou vincular um diretório de host . Ler e escrever nesses locais irá pular a camada de armazenamento do contêiner e ler e gravar diretamente no host (ou armazenamento de rede). Seu desempenho e maior estabilidade.

O ciclo de vida do volume de dados é independente do contêiner. Se o contêiner morrer, o volume de dados não morrerá. Portanto, após usar o volume de dados, os dados não serão perdidos após a exclusão ou execução do contêiner.

Armazém (Registro)

Depois que a imagem é construída, ela pode ser facilmente executada no host atual. No entanto, se precisarmos usar essa imagem em outros servidores, precisaremos de um serviço centralizado para armazenar e distribuir imagens. O Docker Registry é um desses serviços.

Um Docker Registry pode conter vários armazéns ( Repository); cada armazém pode conter vários rótulos ( Tag); cada rótulo corresponde a uma imagem.

Normalmente, um warehouse conterá imagens de diferentes versões do mesmo software, e tags são frequentemente usadas para corresponder a cada versão do software. Podemos <仓库名>:<标签>especificar qual versão deste software é a imagem através do formato. Se nenhum rótulo for fornecido, ele será usado latestcomo rótulo padrão.

Tomando como exemplo a imagem do Ubuntu, ubuntué o nome do warehouse, que contém diferentes rótulos de versão, como, 16.04, 18.04. Podemos usar ubuntu:16.04ou ubuntu:18.04para especificar qual versão da imagem é necessária. Se uma tag for omitida, por exemplo ubuntu, ela será tratada como ubuntu:latest.

O nome do armazém 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 e depende do software ou serviço específico do Docker Registry usado.

Serviços públicos do Registro Docker:

O serviço público Docker Registry é um serviço de registro aberto aos usuários e permite que eles gerenciem imagens. Geralmente, esses serviços públicos permitem aos usuários fazer upload e download de 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 comumente 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 e o Google Container Registry do Google . As imagens do Kubernetes usam esse serviço.

Por algumas razões, o acesso a estes serviços pode ser mais lento dentro do país. Alguns provedores domésticos de serviços de nuvem fornecem serviços de imagem para Docker Hub ( Registry Mirror) Esses serviços de imagem são chamados de aceleradores . Os mais comuns incluem acelerador Alibaba Cloud , acelerador DaoCloud , etc. Usar o acelerador baixará a imagem do Docker Hub diretamente de um endereço doméstico, o que é muito mais rápido do que baixar diretamente do Docker Hub.

Existem também alguns provedores nacionais de serviços em nuvem que fornecem serviços públicos semelhantes ao Docker Hub. Por exemplo, NetEase Cloud Image Service , DaoCloud Image Market , Alibaba Cloud Image Library , etc.

Registro Docker Privado:

Além de usar serviços públicos, os usuários também podem construir um Docker Registry privado localmente. O Docker fornece oficialmente imagens do Docker Registry , que podem ser usadas diretamente como serviços privados de registro.

A imagem de código aberto do Docker Registry fornece apenas a implementação do servidor da API do Docker Registrydocker , que é suficiente para suportar comandos e não afeta o uso. Porém, não inclui interface gráfica, bem como funções avançadas como manutenção de imagens, gerenciamento de usuários e controle de acesso. Esses recursos avançados são fornecidos na versão comercial oficial do Docker Trusted Registry .

Além do Docker Registry oficial, existem softwares de terceiros que implementam a API Docker Registry e ainda fornecem uma interface de usuário e algumas funções avançadas. Por exemplo, Harbour e Sonatype Nexus .

Links de referência:

Espelho · Docker – da entrada à prática · Olhe para a nuvem

Tutorial do Docker | Tutorial para iniciantes

Explicação detalhada do Docker-Yuyou Xiaosheng-Blog Garden

Princípios da arquitetura Docker1 e uso simples - Música - Blog Park

Introdução ao Docker (usando o Docker para implantar aplicativos da Web)_Olhando para o Starry Sky-CSDN Blog_docker implantação

Acho que você gosta

Origin blog.csdn.net/WHQ556677/article/details/122273359
Recomendado
Clasificación