O que é docker? As teorias relacionadas à tecnologia de contêineres docker estão cheias de produtos secos! !

Prefácio

Em primeiro lugar, o docker também pertence a um tipo de tecnologia de virtualização, então podemos falar sobre o desenvolvimento da virtualização primeiro e, em seguida, falar sobre a diferença entre as máquinas virtuais e o docker em combinação com o docker.

1. O desenvolvimento da virtualização

  • A composição do computador
1.在我们上大学的时候,就会被冯诺依曼体系洗脑,导致我们都知道了计算机是由计算器、控制器、存储器、输入、输出这五部分组成。

2.那计算器和控制器现在一般都结合在一起作为cpu,存储器一般包括内存和磁盘,输入输出一般指的是网络的I/O或者磁盘的I/O。

3.所以,我们在生活中常见的IT资源就有cpu、内存、磁盘、网卡等等这些设备,使用操作系统来驱动这些设备,让它们协同合作,这就变成了
一台完整的计算机。
  • O pano de fundo da virtualização
随着计算任务的变化,我们对计算机有了更多的需求。比如,你只有一台电脑,上面已经装了windows系统,你却想让他在跑一台linux;

再比如,你现在的电脑计算能力不够了,但是加上你同学的电脑就可以了。也就是说,我们想要计算机的资源能够具有很强的弹性伸缩能力,
可任意增长,也可任意消减。
  • O propósito da virtualização
1.希望能够使用软件的方法重新定义和划分IT资源;
2.可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率;
3.使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。

虚拟化目前有两个方向:

其一是把一个物理机虚拟成多个独立的逻辑虚拟机;
其二是把若干分散的物理机拟为一个大的逻辑虚拟机。现在用的较多的一般都是第一种技术。

Nota:

  • A tecnologia de virtualização é, na verdade, um conceito que surgiu desde muito cedo, depois de tantos anos de desenvolvimento, suas iterações técnicas são mostradas na figura abaixo. Agora está no estágio de virtualização em nível de contêiner, ou seja, o aplicativo, pacote de software de desenvolvimento, ambiente dependente, etc. são empacotados em um contêiner unificado e todo o contêiner é implantado em outras plataformas ou servidores.

Insira a descrição da imagem aqui

Em segundo lugar, conheça o docker

2.1 Visão geral do docker

  • O Docker é um mecanismo de contêiner de aplicativo de código aberto que permite aos desenvolvedores empacotar seus aplicativos e dependências em uma imagem portátil e publicá-la em qualquer máquina Linux ou Windows popular, que também pode ser virtualizada. Os contêineres usam o mecanismo de sandbox completamente e não haverá interfaces entre eles.
docker也可以从以下四个方面来理解:
1)Docker是世界领先的软件容器平台;

2)Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程
进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docke最初实现是基于LXC;

3)Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件;

4)用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
  • Para entender o docker, você pode começar entendendo os contêineres
1.什么是容器?
一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。
1) 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
2) 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。
3) 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

2.容器较为通俗的解释:
如果需要通俗的描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样,
我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。

Insira a descrição da imagem aqui

  • Docker: carregador de contêiner de código O
    processo de execução do Docker é ir ao warehouse para extrair a imagem localmente e, em seguida, usar um comando para executar a imagem em um contêiner. Portanto, geralmente nos referimos ao Docker como docker ou docker, que é exatamente o mesmo que o portador de tradução para chinês do Docker.
    Insira a descrição da imagem aqui

2.2 A origem e composição do Docker

2.2.1 Origem do docker

  • Docker é um mecanismo de contêiner de alto nível baseado em LXC de código-fonte aberto pelo provedor de PaaS dotCloud. O código-fonte é hospedado no Github, baseado na linguagem Go e código-fonte aberto em conformidade com o protocolo Apache2.0;
  • Docker tem estado muito quente desde 2013, seja pela atividade de código no github ou pelo suporte integrado do Redhat para Docker no RHEL6.5, até mesmo o Compute Engine do Google oferece suporte para docker para ser executado nele;

2.2.2 Composição Docker

  • Um Docker completo consiste nas seguintes partes:
    Docker Client: Cliente
    Docker Daemon: Daemon
    Docker Image: Mirror
    Docker Container: Container
    Docker Registry: Gerenciamento de armazém de imagens

补充:

  • Namespaces
Docker使用 namespace 提供容器的隔离工作区的技术。运行容器时,Docker会为该容器创建以组名称空间;
这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间内运行,并且其访问仅限于该名称空间;

Docker Engine在Linux上使用以下名称空间:

1.pid 名称空间:进程隔离(PID:进程ID)
2.net 名称空间:管理网络接口(NET:网络)
3.ipc 名称空间:管理访问IPC资源(IPC:进程间通信)
4.mnt 名称空间:管理文件系统挂载点(MNT)
5.uts 名称空间:隔离内核和版本标识符 (UTS:Unix时间共享系统)
6.user命名空间:操作进程的用户和用户组
  • A tecnologia subjacente
    Docker é escrita em linguagem GO e usa várias funções do kernel Linux para fornecer suas funções

  • O formato de contêiner
    Docker Engine combina o namespace, grupo de controle e UnionFS em um wrapper chamado formato de contêiner.O formato de contêiner padrão é libcontainer.

Docker resolve o problema das ilhas KVM

2.3 Pensamentos do Docker e cenários de uso

2.3.1 Três Idéias do Docker

  • recipiente
  • Padronização: ① método de transporte, ② método de armazenamento, ③ interface de API
  • isolamento

2.3.2 Cenários de uso do Docker

  • Implantação simples de aplicativos empacotados;
  • Ele pode ser migrado livremente do hardware subjacente (o aplicativo é isolado e o aplicativo é dividido e desacoplado). Por exemplo: migração do servidor da nuvem Tencent para a nuvem Alibaba
  • Integração contínua e entrega contínua (CI / CD): desenvolvimento para liberação de teste;
  • Implantar microsserviços;
  • Fornece produtos PAAS (Platform as a Service)
    O host em nuvem do Openstack é semelhante ao ECS da nuvem Alibaba, que pertence ao IAAS, e o Docker (K8S) pertence ao PAAS

2.4 Recursos de contêineres Docker

  • Vários contêineres Docker leves em execução em uma máquina podem compartilhar o kernel do sistema operacional dessa máquina; eles podem ser iniciados rapidamente e ocupam poucos recursos de computação e memória. A imagem é construída por meio da camada do sistema de arquivos e compartilha alguns arquivos comuns. Desta forma, o uso do disco pode ser reduzido tanto quanto possível, e a imagem pode ser baixada mais rapidamente.
  • Padrões, contêineres Docker são baseados em padrões abertos e podem ser executados em todas as versões principais do Linux, Microsoft Windows e qualquer infraestrutura, incluindo VMs, servidores bare metal e nuvens.
  • Segurança, o isolamento que o Docker oferece aos aplicativos não se limita ao isolamento uns dos outros, mas também independente da infraestrutura subjacente. O Docker fornece o isolamento mais forte por padrão, portanto, os problemas do aplicativo são apenas o problema de um único contêiner e não afetarão a máquina inteira.

2.5 Por que usar o Docker

  • Ambiente operacional consistente. A imagem do Docker fornece um ambiente de tempo de execução completo, exceto para o kernel, que garante a consistência do ambiente de tempo de execução do aplicativo, para que não haja problemas como "Este código está bom em minha máquina";
  • Tempo de inicialização mais rápido. Ele pode atingir um tempo de inicialização de segundos ou até milissegundos. Economize muito tempo de desenvolvimento, teste e implantação;
  • Isolamento. Evite servidores públicos, os recursos serão facilmente afetados por outros usuários;
  • Escalabilidade flexível, expansão rápida, boa para lidar com surtos concentrados de pressão do servidor;
  • Migração conveniente, os aplicativos executados em uma plataforma podem ser facilmente migrados para outra plataforma sem se preocupar com mudanças no ambiente operacional que fazem com que o aplicativo falhe ao executar normalmente;
  • Entrega e implantação contínuas. O uso do Docker pode alcançar integração contínua, entrega contínua e implantação personalizando imagens de aplicativos.

使用docker的意义:

  • O mecanismo do docker unifica o ambiente de infraestrutura - o ambiente do docker;
  • O mecanismo do docker unifica a imagem do método docker de empacotamento do programa (encaixotamento);
  • O mecanismo docker unifica o contêiner de modo-docker de implantação (execução) do programa;

Três, o conceito básico do Docker

  • O Docker inclui três conceitos básicos: container de
    imagem (imagem)
    (container)
    warehouse (repositório)
    Insira a descrição da imagem aqui

3.1 Imagem

  • O espelhamento se refere a um sistema de arquivos especial.O sistema
    operacional é dividido em kernel e espaço do usuário. Para Linux, após o kernel ser iniciado, o sistema de arquivos raiz será montado para fornecer suporte de espaço do usuário para ele. A imagem Docker (imagem) é equivalente a um sistema de arquivos raiz; a
    imagem Docker como um sistema de arquivos especial, além de fornecer programas, bibliotecas, recursos, configuração e outros arquivos exigidos pelo tempo de execução do contêiner, também contém alguns arquivos de tempo de execução. Prepare alguns parâmetros de configuraçã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 depois de criada; o
    Docker foi projetado para fazer uso total da tecnologia Union FS e projetá-la como uma arquitetura de armazenamento em camadas. A imagem espelhada é, na verdade, composta de uma combinação de sistemas de arquivos de várias camadas;

  • Precauções:

1.镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到
这个文件,但是实际上该文件会一直跟随镜像。
2.因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。
  • O recurso de armazenamento hierárquico também torna mais fácil reutilizar e personalizar o espelhamento. Você pode até usar a imagem criada anteriormente como a camada de base e, em seguida, adicionar novas camadas para personalizar o que você precisa e construir uma nova imagem.

3.2 Container

  • O contêiner se refere à entidade quando a imagem está em execução.
  • A relação entre a imagem e o contêiner:
    Assim 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 da imagem em tempo de execução. Os contêineres podem ser criados, iniciados, parados, excluídos, suspensos, etc.
  • A essência de um contêiner: é um processo, mas ao contrário de um processo que é executado diretamente no host, o processo do contêiner é executado em seu próprio namespace independente. Conforme mencionado anteriormente, o espelhamento usa armazenamento em camadas, assim como o 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, todas as informações armazenadas na camada de armazenamento do contêiner serão perdidas quando o contêiner for excluído.

3.3 Repositório

  • O warehouse é, na verdade, um local onde os arquivos espelho são armazenados centralmente.
  • Após a criação da imagem, ela pode ser facilmente executada no host atual. No entanto, se precisarmos usar essa imagem em outros servidores, precisaremos de um serviço de armazenamento e distribuição centralizado para a imagem. O Docker Registry é um desses serviços.
  • Um Docker Registry pode conter vários repositórios; cada repositório pode conter várias tags; cada tag corresponde a um espelho. Portanto: O warehouse de espelho é um lugar onde o Docker usa para armazenar arquivos de espelho centralmente, semelhante ao warehouse de código que usamos antes.
  • Normalmente, um warehouse conterá imagens de diferentes versões do mesmo software, e as tags são freqüentemente usadas para corresponder a cada versão do software.
    Podemos usar o formato de <nome do warehouse>: <tag> para especificar qual versão do software é a imagem espelhada. Se nenhum rótulo for fornecido, o último será usado como o rótulo padrão.

补充:

一、Docker Registry 公开服务 和 私有 Docker Registry 的概念:

1.Docker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务。
一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像;
最常使用的Registry公开服务是官方的Docker Hub ,这也是默认的Registry,并拥有大量的高质量的官方镜像。

2.除了使用公开服务外,用户还可以在本地搭建私有Docker Registry 。
Docker官方提供了Docker Registry镜像,可以直接使用做为私有Registry服务;
开源的Docker Registry镜像只提供了Docker Registry API的服务端实现,足以支持Docker命令,不影响使用;
但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。

二、Build,Ship,and Run的概念:

Build(构建镜像):镜像就像是集装箱包括文件以及运行环境等等资源。
Ship(运输镜像):主机和仓库间运输,这里的仓库就像是超级码头一样。
Run (运行镜像):运行的镜像就是一个容器,容器就是运行程序的地方。

Quarto, a comparação de VM (máquina virtual) e contêiner

  • Resumindo: os contêineres e as máquinas virtuais têm vantagens semelhantes no isolamento e na alocação de recursos, mas suas funções são diferentes. Como o contêiner virtualiza o sistema operacional, não o hardware, o contêiner é mais fácil de transplantar e mais eficiente.
  • Comparação entre os dois
1.传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
2.而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

Insira a descrição da imagem aqui

  • Resumo do contêiner e da máquina virtual (VM)
1.Docker以容器的方式实现了应用程序的隔离,隔离和安全性可以给主机上同时运行多个容器。
2.容器是轻量级的,因为不需要要管理撑的额外负担,而时直接在主机的内核中运行。
3.与vm虚拟机相比,可以在给定的硬件组合上运行更多的容器。甚至可以在虚拟机的主机中运行docker,具体的区别如下:
diferença recipiente VM
Velocidade inicial Segundo nível Nível minuto
Desempenho de corrida Perto de nativo Cerca de 5% de perda
Uso de disco MB GB
Quantidade Centenas de milhares Geralmente uma dúzia
Isolamento Isolamento de nível de processo Nível do sistema
sistema operacional Suporta principalmente Linux Suporta quase todos os sistemas
Grau de encapsulamento Empacote apenas o código do projeto e as dependências, compartilhe o kernel do host Sistema operacional completo

Nota:

  • Tanto contêineres quanto máquinas virtuais (VM) podem coexistir

Acho que você gosta

Origin blog.csdn.net/weixin_42449832/article/details/114311718
Recomendado
Clasificación