VocĂȘ pode perguntar: por que lidar com terminologia se o conceito de contĂȘiner parece bastante simples e direto? No entanto, muitas vezes o uso incorreto de termos cria obstĂĄculos ao desenvolvimento de contĂȘineres. Por exemplo, as pessoas geralmente pensam que os termos âcontĂȘineresâ e âimagensâ sĂŁo usados ââde forma intercambiĂĄvel, embora, de fato, haja importantes diferenças conceituais entre eles. Outro exemplo: no mundo dos contĂȘineres, um "repositĂłrio" nĂŁo significa o que vocĂȘ pensa. AlĂ©m disso, a tecnologia de contĂȘiner Ă© muito mais do que apenas estivador.

Portanto, sem conhecer a terminologia, serĂĄ difĂcil entender como o docker difere do CRI-O, rkt ou lxc / lxd; ou avaliar o papel da Open Container Initiative na padronização de tecnologias de contĂȘineres.
1. Introdução
A introdução aos contĂȘineres Linux Ă© muito simples, mas logo se descobre que essa simplicidade Ă© enganosa. Isso geralmente acontece assim: depois de passar apenas alguns minutos instalando uma janela de encaixe ou outro mecanismo de contĂȘiner, vocĂȘ jĂĄ insere seus primeiros comandos. Apenas alguns minutos - e vocĂȘ jĂĄ criou sua primeira imagem do contĂȘiner e a colocou em domĂnio pĂșblico. Em seguida, vocĂȘ costuma seguir para a arquitetura do ambiente de produção e, de repente, percebe que, para isso, precisa primeiro lidar com a massa de termos e tecnologias que estĂŁo por trĂĄs de tudo isso. Pior, muitos dos termos listados abaixo sĂŁo usados ââde forma intercambiĂĄvel, o que cria muita confusĂŁo para iniciantes.
- Container
- Imagem
- Imagem do container
- Camada de imagem
- Registo
- RepositĂłrio
- Tag
- Imagem Base
- Imagem da plataforma
- Camada
Tendo dominado a terminologia estabelecida neste documento, vocĂȘ entenderĂĄ melhor a base tecnolĂłgica dos contĂȘineres. AlĂ©m disso, ajudarĂĄ vocĂȘ e seus colegas a falarem o mesmo idioma, bem como o design consciente e intencional da arquitetura de ambientes de contĂȘineres, de acordo com as especificidades das tarefas que estĂŁo sendo resolvidas. Por sua vez, do ponto de vista da comunidade de TI e da indĂșstria como um todo, um aumento geral no entendimento das tecnologias de contĂȘineres contribui para o surgimento de novas arquiteturas e soluçÔes. Observe que este artigo Ă© destinado a um leitor que jĂĄ tenha uma idĂ©ia de como executar contĂȘineres.
Contentores: BĂĄsico
Antes de prosseguir com a terminologia dos contĂȘineres, determinaremos o que Ă©, de fato, o prĂłprio contĂȘiner. O termo "contĂȘiner" significa duas coisas ao mesmo tempo. Como um programa Linux normal, um contĂȘiner pode estar em um dos dois estados: funcionando e nĂŁo funcionando. No estado inativo, o contĂȘiner Ă© um arquivo ou um conjunto de arquivos armazenados no disco. Ă nesse estado que os termos Imagem do contĂȘiner e RepositĂłrio do contĂȘiner se referem. Quando vocĂȘ insere o comando de inicialização do contĂȘiner, o mecanismo do contĂȘiner descompacta os arquivos e metadados necessĂĄrios e os transfere para o kernel do Linux. Iniciar um contĂȘiner Ă© muito semelhante a iniciar um processo normal do Linux e requer uma chamada de API para o kernel do Linux. Essa chamada de API geralmente inicia um isolamento adicional e monta uma cĂłpia dos arquivos que estĂŁo na imagem do contĂȘiner. ApĂłs o lançamento do contĂȘiner, Ă© apenas um processo do Linux. O procedimento para iniciar contĂȘineres, bem como o formato das imagens dos contĂȘineres armazenados em disco, sĂŁo definidos e regulamentados por padrĂ”es.
Existem vĂĄrios formatos para imagens de contĂȘiner (
Docker ,
Appc ,
LXD ), mas o setor estĂĄ gradualmente se movendo em direção a um Ășnico padrĂŁo da
Open Container Initiative , Ă s vezes chamado de Open Containers ou simplesmente OCI. Esse padrĂŁo define a
especificação do formato da imagem do contĂȘiner , que define o formato do disco para armazenar imagens do contĂȘiner, bem como os metadados, que, por sua vez, definem coisas como a arquitetura de hardware e o sistema operacional (Linux, Windows, etc.). Um Ășnico formato de imagem em todo o setor Ă© a chave para criar um ecossistema de software que permite que desenvolvedores, projetos de cĂłdigo aberto e fornecedores de software criem imagens compatĂveis e vĂĄrias ferramentas, como assinatura eletrĂŽnica, varredura, montagem, lançamento, movimentação e gerenciamento de imagens de contĂȘiner.
AlĂ©m disso, existem vĂĄrios motores de contĂȘiner, como
Docker ,
CRI-O ,
Railcar ,
RKT ,
LXC . O mecanismo de contĂȘiner obtĂ©m uma imagem do contĂȘiner e o transforma em um contĂȘiner (isto Ă©, um processo em execução). O processo de conversĂŁo tambĂ©m Ă© definido pelo padrĂŁo OCI, que inclui uma especificação de tempo de execução do contĂȘiner e uma implementação de referĂȘncia de tempo de execução chamada RunC, que Ă© um modelo de cĂłdigo aberto que Ă© regulado pela comunidade de desenvolvimento apropriada. Muitos mecanismos de contĂȘiner usam esse modelo para interagir com o kernel host ao criar contĂȘineres.
As ferramentas que suportam as especificaçÔes do
formato de imagem do contĂȘiner e
o ambiente de execução do contĂȘiner do padrĂŁo OCI fornecem portabilidade no ecossistema de vĂĄrias plataformas de contĂȘineres, mecanismos de contĂȘiner e ferramentas de suporte em vĂĄrias plataformas em nuvem e arquiteturas locais. Compreender a terminologia, os padrĂ”es e a arquitetura dos sistemas de contĂȘineres permitirĂĄ que vocĂȘ se comunique com outros especialistas e projete aplicativos e ambientes em contĂȘineres escalonĂĄveis ââe suportados que garantam o uso eficiente dos contĂȘineres nos prĂłximos anos.
VocabulĂĄrio bĂĄsico
Imagem do contĂȘiner
Em sua definição mais simples, uma imagem de contĂȘiner Ă© um arquivo baixado do servidor de registro e usado localmente como um ponto de montagem quando o contĂȘiner Ă© iniciado. Apesar de o termo "imagem de contĂȘiner" ser usado com bastante frequĂȘncia, ele pode significar coisas diferentes. O fato Ă© que, embora o Docker, o RKT e atĂ© o LXD funcionem de acordo com o princĂpio descrito, ou seja, eles baixam arquivos excluĂdos e os executam como contĂȘineres, cada uma dessas tecnologias interpreta a imagem do contĂȘiner de sua prĂłpria maneira. O LXD opera com imagens monolĂticas (camada Ășnica), enquanto o docker e o RKT usam imagens OCI, que podem conter vĂĄrias camadas.
A rigor, uma imagem de contĂȘiner em um servidor de registro estĂĄ longe de ser um Ășnico arquivo. Quando as pessoas usam o termo "imagem do contĂȘiner", geralmente significam o repositĂłrio e um conjunto de vĂĄrias camadas da imagem do contĂȘiner, alĂ©m de metadados que contĂȘm informaçÔes adicionais sobre essas camadas.
AlĂ©m disso, o conceito de uma imagem de contĂȘiner implica implicitamente a existĂȘncia de um formato para essa imagem.
Formato de imagem do contĂȘiner
Inicialmente, cada mecanismo de contĂȘiner, incluindo LXD, RKT e Docker, tinha seu prĂłprio formato de imagem. Alguns desses formatos permitem apenas uma camada, enquanto outros suportam uma estrutura em ĂĄrvore de vĂĄrias camadas. Hoje, quase todas as principais ferramentas e mecanismos de contĂȘiner mudaram para o formato
OCI , que determina como as camadas e os metadados devem ser organizados na imagem do contĂȘiner. Em essĂȘncia, o formato OCI define uma imagem de contĂȘiner que consiste em arquivos tar separados para cada camada e um arquivo manifest.json comum contendo metadados.
O padrĂŁo
Open Container Initiative (OCI) , originalmente baseado no
formato de imagem Docker V2 , combinou com sucesso um grande ecossistema de mecanismos de contĂȘiner, plataformas e ferramentas em nuvem (scanners de segurança, ferramentas de assinatura, criação e movimentação de contĂȘineres) e permite proteger seu investimento em conhecimento e ferramentas
Motor para contĂȘiner
O mecanismo de contĂȘiner Ă© a parte do software que aceita solicitaçÔes de usuĂĄrio, incluindo parĂąmetros de linha de comando, baixa imagens e, da perspectiva do usuĂĄrio final, lança contĂȘineres. Existem muitos mecanismos de contĂȘiner, incluindo docker, RKT, CRI-O e LXD. AlĂ©m disso, muitas plataformas em nuvem, serviços de PaaS e plataformas de contĂȘineres tĂȘm seus prĂłprios mecanismos que entendem imagens no formato Docker ou OCI. Ter um padrĂŁo do setor para o formato de imagem garante a interoperabilidade de todas essas plataformas.
Ao descer um nĂvel, podemos dizer que a maioria dos mecanismos de contĂȘineres nĂŁo inicia os contĂȘineres, mas atravĂ©s de um tempo de execução compatĂvel com OCI, como runc. Normalmente, um tempo de execução do contĂȘiner faz o seguinte:
- Lida com parĂąmetros, entrada do usuĂĄrio
- Manipula os parĂąmetros passados ââpela API (geralmente o sistema de orquestração de contĂȘiner)
- Baixe imagens de contĂȘiner do servidor de registro
- Descompacta e salva a imagem do contĂȘiner em disco usando o Driver GrĂĄfico (bloco ou arquivo, dependendo do driver)
- Prepara um ponto de montagem para o contĂȘiner, geralmente no armazenamento de copiar na gravação (novamente, em bloco ou arquivo, dependendo do driver)
- Prepara os metadados que serĂŁo passados ââpara o tempo de execução para executar o contĂȘiner corretamente usando:
- ConfiguraçÔes padrĂŁo especĂficas implĂcitas para a imagem do contĂȘiner (por exemplo, ArchX86 )
- Entrada do usuĂĄrio para substituir os valores padrĂŁo contidos na imagem do contĂȘiner (por exemplo, CMD, ENTRYPOINT)
- ParĂąmetros padrĂŁo especificados pela imagem do contĂȘiner (por exemplo, regras SECCOM )
- Invoca o tempo de execução do contĂȘiner
Container
Os contĂȘineres existem nos sistemas operacionais hĂĄ algum tempo, porque na verdade essa Ă© apenas uma instĂąncia em execução de uma imagem de contĂȘiner. Um contĂȘiner Ă© um processo Linux padrĂŁo que geralmente Ă© criado usando a chamada do sistema clone () em vez de fork () ou exec (). AlĂ©m disso, medidas adicionais de isolamento sĂŁo frequentemente aplicadas a contĂȘineres usando
cgroups ,
SELinux ou
AppArmor .
Host do contĂȘiner
Um host de contĂȘiner Ă© um sistema no qual os processos em contĂȘiner sĂŁo executados, geralmente chamados de contĂȘineres por simplicidade. Pode ser, por exemplo, uma mĂĄquina virtual
RHEL Atomic Host localizada em uma nuvem pĂșblica ou executando bare metal em um data center corporativo. Quando a imagem do contĂȘiner (em outras palavras, o repositĂłrio) do servidor de registro Ă© baixada para o host do contĂȘiner local, eles dizem que ela cai no cache local.
VocĂȘ pode determinar quais repositĂłrios sĂŁo sincronizados com o cache local usando o seguinte comando:
[root @ rhel7 ~] # imagens do docker -a
ID DE IMAGEM DE REPOSITĂRIO IDENTIFICADO TAMANHO VIRTUAL
registry.access.redhat.com/rhel7 mais recente 6883d5422f4e 3 semanas atrĂĄs 201,7 MB
Servidor de registro
Um servidor de registro Ă© essencialmente um servidor de arquivos usado para armazenar repositĂłrios de janela de encaixe. Como regra, o servidor de registro Ă© especificado pelo nome DNS e, opcionalmente, pelo nĂșmero da porta. A maioria dos benefĂcios do ecossistema docker Ă© impulsionada pela capacidade de baixar e carregar repositĂłrios nos servidores de registro.
Se o daemon do docker não encontrar uma cópia do repositório no cache local, ele farå o download automaticamente do servidor de registro. Na maioria das distribuiçÔes Linux, o daemon docker usarå o site docker.io para isso, mas em algumas distribuiçÔes ele pode ser configurado da sua maneira. Por exemplo, o Red Hat Enterprise Linux tenta primeiro fazer o download do registry.access.redhat.com e somente depois do docker.io (Docker Hub).
Deve-se enfatizar aqui que o servidor de registro Ă© implicitamente considerado confiĂĄvel. Portanto, vocĂȘ deve decidir quanto confia no conteĂșdo de um registro e, respectivamente, permitir ou negar. AlĂ©m da segurança, hĂĄ outros aspectos que devem ser abordados com antecedĂȘncia, por exemplo, problemas de licenciamento de software ou monitoramento de conformidade. A simplicidade com a qual o docker permite que os usuĂĄrios baixem software torna a questĂŁo da confiança extremamente importante.
O Red Hat Enterprise Linux permite que vocĂȘ configure o registro do docker padrĂŁo. AlĂ©m disso, o RHEL7 e o RHEL7 Atomic permitem adicionar ou bloquear servidores de registro por meio do
arquivo de configuração :
vi / etc / sysconfig / docker
RHEL7 e RHEL 7 Atomic usam o servidor de registro Red Hat por padrĂŁo:
ADD_REGISTRY = '- adicione o registro registry.access.redhat.com'
Em alguns casos, por motivos de segurança, faz sentido bloquear registros pĂșblicos de janelas de encaixe, como o DockerHub:
# BLOCK_REGISTRY = '- registro de bloco'
A Red Hat também oferece seu servidor de registro integrado como parte da
OpenShift Container Platform , bem como o servidor de registro corporativo independente
Quay Enterprise e repositĂłrios em nuvem, pĂșblicos e privados
Quay.io.Orquestração de contĂȘineres
As pessoas geralmente começam instalando um host de contĂȘiner e primeiro baixando as imagens de contĂȘiner de que precisam. Em seguida, eles criam suas prĂłprias imagens e as carregam no servidor de registro para disponibilizar para o restante da equipe. Depois de algum tempo, Ă© necessĂĄrio combinar vĂĄrios contĂȘineres para que eles possam ser implantados como uma unidade. E, finalmente, em algum momento, essas unidades devem fazer parte do transportador de produção (development-QA-production). Ă assim que as pessoas geralmente percebem que precisam de um sistema de orquestração.
O sistema de orquestração de contĂȘiner implementa apenas duas coisas:- Despachar dinamicamente cargas de contĂȘiner entre computadores de cluster (geralmente chamado de "computação distribuĂda")
- Fornece um arquivo de descrição de aplicativo padrão (kube yaml, composição do docker, etc.)
Essas duas coisas realmente oferecem uma sĂ©rie de benefĂcios:
- A capacidade de gerenciar os contĂȘineres que compĂ”em o aplicativo, independentemente um do outro, o que permite resolver efetivamente as seguintes tarefas:
- Eliminação de grandes clusters de hosts de contĂȘiner
- Falha no nĂvel de contĂȘineres individuais (nĂŁo hĂĄ mais processos de resposta, exaustĂŁo de memĂłria)
- Failover no nĂvel do host do contĂȘiner (unidades, rede, reinicialização)
- Failover no nĂvel do mecanismo do contĂȘiner (dano, reinicialização)
- Escalonamento individual de contĂȘineres para cima e para baixo
- FĂĄcil de implantar novas instĂąncias do mesmo aplicativo em novos ambientes, tanto na nuvem quanto na tradicional, por exemplo:
- Em måquinas de desenvolvedor controladas por um sistema de orquestração
- Em um ambiente de desenvolvimento compartilhado em um espaço para nome privado
- Em um ambiente de desenvolvimento comum em um espaço para nome pĂșblico interno para garantir a visibilidade e o desempenho do teste
- No ambiente interno do controle de qualidade
- Em um ambiente de carga de teste fornecido dinamicamente e revogado na nuvem
- Em um ambiente de referĂȘncia para verificar a compatibilidade com o ambiente de produção
- No ambiente de produção
- Em um ambiente de recuperação de desastre
- Em um novo ambiente de produção contendo hosts de contĂȘiner atualizados, mecanismos de contĂȘiner ou ferramentas de orquestração
- No novo ambiente de produção, que não é diferente do principal, mas localizado em uma região diferente
Comunidades de cĂłdigo aberto e fornecedores de software oferecem muitas ferramentas diferentes de orquestração. Inicialmente, as trĂȘs grandes ferramentas incluĂam
Swarm ,
Mesos e
Kubernetes , mas hoje o Kubernetes se tornou o padrão do setor, porque até o
Docker e o
Mesosphere anunciaram seu apoio, sem mencionar quase todos os principais provedores de serviços. No entanto, se vocĂȘ estiver procurando por um sistema de orquestração corporativo, recomendamos que vocĂȘ analise mais de perto o
Red Hat OpenShift .
Dicionårio Avançado
Tempo de execução do contĂȘiner
O tempo de execução do contĂȘiner Ă© um componente de baixo nĂvel que normalmente Ă© usado como parte de um mecanismo de contĂȘiner, mas tambĂ©m pode ser usado manualmente para testar contĂȘineres.
O padrĂŁo OCI define uma implementação de referĂȘncia do tempo de execução conhecido como
runc . Essa é a implementação mais usada, mas existem outros
tempos de execução compatĂveis com OCI, como
crun ,
railcar e
katacontainers . Docker, CRI-O e muitos outros mecanismos de contĂȘiner usam runc.
O tempo de execução do contĂȘiner Ă© responsĂĄvel pelos seguintes itens:
- ObtĂ©m o ponto de montagem do contĂȘiner fornecido pelo mecanismo de contĂȘiner (para teste, poderia ser apenas um diretĂłrio)
- ObtĂ©m os metadados do contĂȘiner fornecidos pelo mecanismo de contĂȘiner (durante o teste, pode ser um arquivo config.json montado manualmente)
- Comunica-se com o kernel do SO para iniciar processos em contĂȘiner (via chamada de sistema clone)
- Configura cgroups
- Configura a polĂtica do SELinux
- Configura regras da armadura de aplicativo
Um pouco de digressĂŁo histĂłrica: quando o mecanismo do Docker apareceu pela primeira vez, ele usou o LXC como um ambiente de tempo de execução. Os desenvolvedores do Docker entĂŁo criaram sua prĂłpria biblioteca para executar contĂȘineres chamados libcontainer. Foi escrito no idioma Golang e tornou-se parte do mecanismo do Docker. ApĂłs o estabelecimento da organização OCI, o Docker introduziu o cĂłdigo-fonte libcontainer nesse projeto e lançou esta biblioteca como um utilitĂĄrio separado chamado runc, que se tornou a implementação de referĂȘncia do tempo de execução do contĂȘiner dentro do padrĂŁo OCI e Ă© usado em outros mecanismos de contĂȘiner, como o CRI-O . Runc Ă© um utilitĂĄrio muito simples que apenas espera que um ponto de montagem (diretĂłrio) e metadados (config.json) sejam passados ââpara ele. Mais informaçÔes sobre runc podem ser encontradas
aqui .
Para um entendimento mais aprofundado, consulte
NoçÔes bĂĄsicas sobre padrĂ”es de contĂȘiner e o
tempo de execução do
contĂȘiner .
Camadas de imagem
Os repositĂłrios sĂŁo frequentemente referidos como imagens ou imagens de contĂȘineres, embora na verdade os repositĂłrios consistam em uma ou mais camadas. As camadas de imagem no repositĂłrio sĂŁo interconectadas pelos relacionamentos pai-filho e cada camada de imagem contĂ©m diferenças da camada pai.
Vejamos as camadas do repositĂłrio no host do contĂȘiner local. Desde o inĂcio da
versĂŁo 1.7, o Docker nĂŁo possui uma ferramenta interna para exibir camadas de imagem no repositĂłrio local (mas existem ferramentas para registros online), usaremos o utilitĂĄrio
Dockviz . Observe que cada camada possui uma tag e um
identificador exclusivo universal (UUID) . Para visualizar UUIDs abreviados que geralmente sĂŁo Ășnicos na mesma mĂĄquina, usamos o seguinte comando (se vocĂȘ precisar de um UUID completo, use o mesmo comando com a opção -no-trunc):
docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock nate / dockviz images -t
ââ2332d8973c93 Tamanho virtual: 187.7 MB
Virtual ââea358092da77 Tamanho virtual: 187,9 MB
â ââa467a7c6794f Tamanho virtual: 187,9 MB
â ââca4d7b1b9a51 Tamanho virtual: 187,9 MB
â ââ4084976dd96d Tamanho virtual: 384,2 MB
Virtual ââ943128b20e28 Tamanho virtual: 386,7 MB
Virtual ââdb20cc018f56 Tamanho virtual: 386,7 MB
Virtual ââ45b3c59b9130 Tamanho virtual: 398.2 MB
Virtual ââ91275de1a5d7 Tamanho virtual: 422,8 MB
Virtual ââe7a97058d51f Tamanho virtual: 422,8 MB
Virtual ââd5c963edfcb2 Tamanho virtual: 422.8 MB
Virtual ââ5cfc0ce98e02 Tamanho virtual: 422,8 MB
Virtual ââ7728f71a4bcd Tamanho virtual: 422,8 MB
Virtual ââ0542f67da01b Tamanho virtual: 422,8 MB Tags: docker.io/registry:latest
Como vocĂȘ pode ver, o repositĂłrio docker.io/registry na verdade consiste em vĂĄrias camadas. No entanto, mais importante, o usuĂĄrio pode, em princĂpio, "iniciar" o contĂȘiner a partir de qualquer etapa dessa escada, por exemplo, digitando o comando abaixo (estĂĄ completamente correto, mas ninguĂ©m pode garantir que foi testado ou que funcionarĂĄ corretamente). Como regra, o coletor de imagens identifica (cria nomes) as camadas que devem ser usadas como ponto de partida:
docker run -it 45b3c59b9130 bash
Os repositĂłrios sĂŁo organizados de maneira semelhante, porque sempre que o coletor cria uma nova imagem, as diferenças sĂŁo salvas como outra camada. Existem duas maneiras principais de criar novas camadas no repositĂłrio. Primeiro, ao criar uma imagem manualmente, cada confirmação de alteração cria uma nova camada. Se o coletor criar uma imagem usando um arquivo Docker, cada diretiva no arquivo criarĂĄ uma nova camada. Portanto, Ă© sempre Ăștil poder ver o que mudou no repositĂłrio entre as camadas.
Tags
Embora o prĂłprio usuĂĄrio possa especificar a camada inicial para montar e iniciar o contĂȘiner no repositĂłrio, ele nĂŁo precisa fazer isso. Quando o coletor de imagens cria um novo repositĂłrio, eles geralmente marcam as camadas mais adequadas para essa função. Esses marcadores sĂŁo chamados de tags e representam uma ferramenta com a qual o coletor de imagens pode informar ao consumidor de imagens quais camadas sĂŁo melhor usadas. Normalmente, as tags sĂŁo usadas para indicar versĂ”es de software em um repositĂłrio. OCI, - , . , .
, â latest, , . , , .
, (
jq ):
curl -s registry.access.redhat.com/v1/repositories/rhel7/tags | jq
{
"7.0-21": "e1f5733f050b2488a17b7630cb038bfbea8b7bdfa9bdfb99e63a33117e28d02f",
"7.0-23": "bef54b8f8a2fdd221734f1da404d4c0a7d07ee9169b1443a338ab54236c8c91a",
"7.0-27": "8e6704f39a3d4a0c82ec7262ad683a9d1d9a281e3c1ebbb64c045b9af39b3940",
"7.1-11": "d0a516b529ab1adda28429cae5985cab9db93bfd8d301b3a94d22299af72914b",
"7.1-12": "275be1d3d0709a06ff1ae38d0d5402bc8f0eeac44812e5ec1df4a9e99214eb9a",
"7.1-16": "82ad5fa11820c2889c60f7f748d67aab04400700c581843db0d1e68735327443",
"7.1-24": "c4f590bbcbe329a77c00fea33a3a960063072041489012061ec3a134baba50d6",
"7.1-4": "10acc31def5d6f249b548e01e8ffbaccfd61af0240c17315a7ad393d022c5ca2",
"7.1-6": "65de4a13fc7cf28b4376e65efa31c5c3805e18da4eb01ad0c8b8801f4a10bc16",
"7.1-9": "e3c92c6cff3543d19d0c9a24c72cd3840f8ba3ee00357f997b786e8939efef2f",
"7.2": "6c3a84d798dc449313787502060b6d5b4694d7527d64a7c99ba199e3b2df834e",
"7.2-2": "58958c7fafb7e1a71650bc7bdbb9f5fd634f3545b00ec7d390b2075db511327d",
"7.2-35": "6883d5422f4ec2810e1312c0e3e5a902142e2a8185cd3a1124b459a7c38dc55b",
"7.2-38": "6c3a84d798dc449313787502060b6d5b4694d7527d64a7c99ba199e3b2df834e",
"latest": "6c3a84d798dc449313787502060b6d5b4694d7527d64a7c99ba199e3b2df834e"
}
docker , . , «rhel7» â .
docker pull rhel7
:
docker pull registry.access.redhat.com/rhel7:latest
, . , , , docker images. , , , «» (manifest.json):
docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry.access.redhat.com/rhel7 latest 6883d5422f4e 4 weeks ago 201.7 MB
registry.access.redhat.com/rhel latest 6883d5422f4e 4 weeks ago 201.7 MB
registry.access.redhat.com/rhel6 latest 05c3d56ba777 4 weeks ago 166.1 MB
registry.access.redhat.com/rhel6/rhel latest 05c3d56ba777 4 weeks ago 166.1 MB
...
, . docker ( , ) , «rhel7» .
, docker URL. , , URL .
, :
REGISTRY/NAMESPACE/REPOSITORY[:TAG]
URL , , , . URL , docker , . , : :
docker pull registry.access.redhat.com/rhel7/rhel:latest
docker pull registry.access.redhat.com/rhel7/rhel
docker pull registry.access.redhat.com/rhel7
docker pull rhel7/rhel:latest
â .
DockerHub , , .
Red Hat ,
Red Hat Federated Registry . registry.access.redhat.com . , . , Red Hat , - :
registry.access.redhat.com/rhel7/rhel
registry.access.redhat.com/openshift3/mongodb-24-rhel7
registry.access.redhat.com/rhscl/mongodb-26-rhel7
registry.access.redhat.com/rhscl_beta/mongodb-26-rhel7
registry-mariadbcorp.rhcloud.com/rhel7/mariadb-enterprise-server:10.0
, URL . . fedora, latest. :
docker pull fedora
docker pull docker.io/fedora
docker pull docker.io/library/fedora:latest
, , . , , , , , . , , , . .
Bash Enter, Bash Linux-
exec() . , , docker, docker ,
clone() . clone () , , , , , ..
, Linux - , clone ().
âŠ