Introdução ao Docker: uso básico

Introdução ao Docker: uso básico


. Introdução ao Docker

1.1 O primeiro livro Docker

Continuei encontrando Docker no trabalho e hoje finalmente comecei a aprender. Eu encontrei muitos problemas ao selecionar livros no sistema para aprender Docker e tecnologia de virtualização, principalmente porque não existem livros particularmente clássicos! Docker "First Edition Docker Book" e "Docker Technology Introduction and Actual Combat" geralmente não são altamente avaliados, enquanto "Docker Development Practice" e "Dockeru Source Code Analysis" foram lançados recentemente em 2015, e não há muitas avaliações. Depois de uma revisão abrangente, finalmente escolhi "Docker Development Practice". Os itens a seguir são usados ​​principalmente como materiais de aprendizagem para este livro.

1.2 O que é Docker?

Há uma história em "Docker Development Practice": no transporte antes da década de 1960, as mercadorias eram todas colocadas juntas e eram facilmente esmagadas e danificadas. Ao mesmo tempo, o transbordo entre diferentes modos de transporte também é muito problemático, como ao descarregar mercadorias de docas e vagões de trem. A combinação de diferentes mercadorias e diferentes veículos é uma enorme matriz bidimensional. A indústria naval finalmente chegou a um acordo e formulou um contêiner de padrão internacional para resolver esse problema espinhoso. Todas as mercadorias são embaladas em contêineres e isoladas umas das outras, e todos os veículos são transportados em contêineres, o que melhora muito a segurança e a eficiência do transporte.

Freqüentemente encontramos o mesmo problema no desenvolvimento de software. Aplicativos que usam uma variedade de estruturas técnicas, de sites estáticos de front-end a bancos de dados de back-end , de PHP a Java e uma variedade de ambientes de implantação, de servidores de teste Para ambientes online, de máquinas virtuais a nuvens públicas e assim por diante. O Docker é esse contêiner e o logotipo do Docker é de fato um contêiner.

1.3 Docker e contêineres e máquinas virtuais

Naturalmente, perguntaremos: qual é a diferença entre Docker e máquina virtual? Esta questão pode ser dividida em duas partes. Como o Docker não é uma tecnologia totalmente original, mas uma tecnologia de contêiner que existe há muito tempo, então a primeira pergunta é a diferença entre um contêiner e uma máquina virtual? Também pertencentes à tecnologia de contêineres, os irmãos e irmãs de Docker incluem Solaris Zones, BSD jails, LXC, etc. Mas o Docker é tão popular agora que naturalmente tem sua própria singularidade, então a segunda pergunta é a diferença entre o Docker e outros contêineres?

A primeira pergunta é relativamente simples: os contêineres são uma tecnologia de virtualização leve. Ele não tem um conjunto completo de CPU, memória e disco como uma máquina virtual e tem autoridade absoluta sobre o sistema operacional . O contêiner e o host host compartilham o kernel e todos os contêineres compartilham o sistema operacional. Centenas de contêineres podem ser executados em uma máquina física. O segundo problema é um pouco mais problemático. Comparado com o LXC, o Docker abstrai a configuração para tornar o ambiente de execução do aplicativo consistente em qualquer plataforma. Ao mesmo tempo, ele fornece recursos modernos e ecossistemas semelhantes ao Git , como controle de versão e hospedagem de espelho .

Em geral, os cenários de aplicação do Docker são:

  • Acelere o desenvolvimento local: crie rapidamente um ambiente de desenvolvimento e um ambiente operacional.
  • Empacote e implante aplicativos automaticamente.
  • Crie um ambiente Paas privado leve.
  • Teste automatizado e integração contínua.
  • Crie uma caixa de proteção de segurança.

2. Instalação do Docker e problemas de 32 bits

2.1 Instale o Docker

O Docker tem dois requisitos para o ambiente Linux , um é um sistema de 64 bits e o outro é um kernel acima de 3.8. E estou usando a versão de 32 bits do Linux Mint 17, então baixei o pacote do código-fonte e me preparei para compilar e instalar. Quando Zheng Chou não conseguiu encontrar as informações de compilação e instalação, foi ótimo descobrir que a biblioteca de software do Ubuntu fornece uma versão compilada do Docker de 32 bits! Veja meu kernel versão 3.13, que também atende aos requisitos, então instalei diretamente com o apt.

cdai@dell ~ $ uname -a
Linux dell 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:30:01 UTC 2014 i686 i686 i686 GNU/Linux

cdai@dell ~ $ apt-cache search docker
docker.io - Linux container runtime
kdocker - lets you dock any application into the system tray
vim-syntax-docker - Docker container engine - Vim highlighting syntax files

cdai@dell ~ $ sudo apt-get install docker.io
cdai@dell ~ $ docker -v
Docker version 1.0.1, build 990021a
 
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Imagem da versão 2.2 de 32 bits

Embora o Docker possa ser usado, as imagens no Docker Hub oficial são todas preparadas para sistemas de 64 bits. Depois de baixar essas imagens, o erro "finalizar a operação de recursos de eliminação do namespace não permitida" será relatado ao criar e iniciar o contêiner. Portanto, podemos usar o Dockerfile oficial para construir uma versão de 32 bits da imagem antes que ela possa ser usada em um sistema de 32 bits. (Consulte a seção 3.4 para uma explicação específica da construção da imagem)

Pegue a versão de 32 bits do Ubuntu como exemplo, basta executar o script Shell fornecido no GitHub oficial . Depois de uma longa espera, você pode ver que a imagem do Ubuntu de 32 bits foi instalada localmente com sucesso e o script oficial é bastante confiável.

cdai ~ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
32bit/ubuntu        14.04               c062cc00654e        About a minute ago   295.3 MB
 
  
  
  • 1

Observação: fiz uma solução alternativa aqui para aprender e pesquisar o Docker em meu livro antigo. Claro, você deve usar o Docker em uma máquina de 64 bits em aplicativos reais.


3. Primeiros passos

3.1 Conceitos básicos

Antes de começar a usar o Docker, você deve primeiro entender os conceitos no Docker e a relação entre eles, caso contrário, você pode ficar confuso quando começar. Os três conceitos mais importantes no Docker são: imagem, contêiner e biblioteca.

  • Imagem: é um arquivo somente leitura que contém o aplicativo e seu ambiente dependente do tempo de execução.
  • Container: É um template para construção de containers, através de uma imagem espelhada podemos construir muitos containers independentes com o mesmo ambiente operacional.
  • Repositório: Docker fornece Hub para armazenar imagens públicas ou privadas e também permite que terceiros criem.


A seguir está um fluxo de trabalho típico do Docker. A partir desta imagem, a relação entre esses três conceitos importantes pode ser claramente compreendida. A seguir nesta seção, apresentaremos as operações comuns, uma a uma, de acordo com este fluxo de trabalho.




3.2 Pesquisar e baixar espelho

Primeiro, use o docker search [keyword]comando para verificar quais imagens estão disponíveis para download no Docker Hub. Depois de pesquisar, você pode usar curingas para representar palavras-chave:

cdai ~ $ docker search ubuntu
NOME DESCRIÇÃO ESTRELAS OFICIAL AUTOMATIZADO
ubuntu Ubuntu é um sistema operacional Linux baseado em Debian ...   2179       [OK]      
ubuntu-upstart Upstart é um substituto baseado em evento para ...   31         [OK]      
torusware / speedus- ubuntu Sempre atualizou a imagem oficial do docker do Ubuntu ...   25                    [OK]
tleyden5iwx / ubuntu-cuda Ubuntu 14.04 com drivers CUDA pré-instalados    17                    [OK]
ubuntu-debootstrap debootstrap --variant = minbase --components ...   12         [OK]      
neurodebian NeuroDebian fornece pesquisa em neurociência ...   11         [OK]      
    ...


Em seguida, use o docker pull [repository/url:tag]comando para baixar o espelho. Como o download do Docker Hub oficial é muito lento, aqui está um download muito rápido do site espelho doméstico http://dockerpool.com/ . (Observação: falarei sobre o uso do comando docker run para criar um contêiner mais tarde. Na verdade, se a imagem não existir, o Docker fará o download automaticamente. Para aprender o comando pull, eu faço o download da imagem manualmente)


    	1.cdai ~ $ docker pull dl.dockerpool.com:5000/ubuntu:14.04
	2.cdai ~ $ docker pull dl.dockerpool.com:5000/centos:latest


Após a conclusão do download, você pode usá-lo para docker imagesverificar quais mirrors estão disponíveis localmente. A coluna REPOSITÓRIO aqui pode ter três tipos:


  • [namespace / ubuntu]: Quando você registra uma conta no Docker Hub, o nome da conta automaticamente se torna seu namespace, que é usado para distinguir as imagens de diferentes usuários.
  • [ubuntu]: Este tipo de nome de warehouse pode ser considerado um namespace de nível superior, esse tipo de warehouse é usado apenas para espelhamento oficial.
  • [dl.dockerpool.com:5000/ubuntu]: O caminho da URL indica que a imagem é colocada em um hub construído por terceiros.

cdai ~ $ docker images
REPOSITORY                      TAG             IMAGE ID         CREATED          VIRTUAL SIZE
dl.dockerpool.com:5000/ubuntu   14.04           5506de2b643b     10 months ago      199.3 MB
dl.dockerpool.com:5000/centos   latest          87e5b6b3ccc1     11 months ago      224 MB


Se você quiser ver as informações detalhadas do espelho, você pode usar o docker inspect [image-id]comando para vê-lo. (Observação: como você verá na seção do contêiner abaixo, este comando também pode ser usado para visualizar informações detalhadas sobre o contêiner)


1 cdai ~ $ docker inspect 5506de2b643b
2. [{ 3. "Arquitetura": "amd64", 4. "Autor": "", 5. "Comentário": "", 6. "Config": { 7. "AttachStderr": falso, 8. "AttachStdin": falso, 9. "AttachStdout": false, 10. "Cmd": [ 11. "/ bin / bash" 12.], 13. ... 14.}, 15. "Container": "201ae89099c20e577dd9c60cb9199c2dac0688d49efa676bf3eeb859666294bd", 16. "ContainerConfig": { 17. "AttachStderr": falso,


















21.},
22. "Criado": "2014-10-23T23: 53: 59.03271073Z",
23. "DockerVersion": "1.3.0",
24. "Id": "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5",
"25. : "linux",
26. "Pai": "22093c35d77bb609b9257ffb2640845ec05018e3d96cb939f68d0e19127f1723",
27. "Tamanho": 0
28.}]


3.3 Criar um contêiner de inicialização

Depois de entender a operação básica de espelhamento, podemos criar um contêiner. Primeiro use para docker createcriar o contêiner ou use para docker run [repository:tag]criar e executar o contêiner. Os recipientes podem ser divididos em dois tipos:

  • Contêiner interativo : é executado em primeiro plano e pode interagir com o contêiner por meio do console. Se o terminal que criou o container for fechado, o container ficará parado. Além disso, o contêiner também pode ser encerrado inserindo exit ou passando docker stopou no console do contêiner docker kill.
  • Contêiner do tipo em segundo plano: ele é executado em segundo plano e não tem nenhuma relação com o terminal depois de criado e iniciado. Ele precisa ser encerrado com docker stopou docker kill.

Nota: Como meu notebook antigo é de 32 bits, mesmo que a imagem seja instalada de um hub de terceiros, ele ainda não pode ser usado em 64 bits, portanto, os exemplos aqui usam a imagem do Ubuntu de 32 bits construída manualmente na primeira seção.


Primeiro, vamos tentar criar e executar um contêiner interativo. Basta gerar "Hello, Docker" no console do contêiner. Que tal isso? Os contêineres Docker são muito leves, então inicie muito rapidamente! docker psVocê pode usar para visualizar o contêiner em execução e para docker ps -avisualizar todos os contêineres, incluindo aqueles que não foram iniciados. (-L e -n = x podem listar o último criado ou x contêineres)


cdai ~ $ docker run -i -t 32 bits / ubuntu: 14.04 / bin / bash
root @ 328 aa6305d82: / # echo "Olá, Docker!"
Olá, Docker!
root @ 328 aa6305d82: / # exit
exit

cdai ~ $ docker ps -a
CONTAINER ID IMAGEM COMANDO CRIADO STATUS PORTS NAMES
328 aa6305d82


3.4 Faça upload de espelho


Existem duas maneiras de fazer uma imagem local: usando o comando commit e escrevendo um Dockerfile. Vamos primeiro apresentar esses dois métodos de produção separadamente e, em seguida, aprender como fazer upload de nossas próprias imagens locais para o Docker Hub.

3.4.1 Fazendo um espelho com commit

Primeiro, inicie o contêiner interativo stupefied_curie que criamos anteriormente. Depois que a inicialização for bem-sucedida, descobriremos que não entramos no console do contêiner. Neste momento, devemos usar um comando usado em um contêiner que não foi introduzido antes, o comando attach, para nos ajudar a entrar novamente no console de um contêiner iniciado. (Observação: depois que a anexação for executada, a interface do console do contêiner aparecerá após pressionar Enter uma vez. E o contêiner de fundo não pode ser anexado)

Depois de anexar, podemos operar no container, aqui instalamos um banco de dados Sqlite e salvamos um arquivo texto, pronto para fazer um container local espelhado. Achei que tudo iria correr bem, mas encontrei o problema de não conseguir acessar a Internet no contêiner, porque a relação padrão entre o contêiner e o host host é interligada e alguns DNS e outras configurações precisam ser configurados. A maneira mais fácil de verificar isso online é alterar o modo de rede para que o contêiner use a mesma pilha de rede que o host host. Um contêiner interativo é recriado aqui e o modo de rede usa o modo de host.



Agora você pode usar docker commit [container-id]comandos para transformar o contêiner previamente preparado em uma imagem espelhada! (Por que alguns comandos usam ID e alguns usam nome?) Após a execução, podemos verificar se nosso espelho foi instalado na biblioteca local. Também foi encontrado um problema aqui, ou seja, o contêiner criado com base na imagem de 32 bits e, em seguida, a imagem parece ser de 64 bits novamente, e o erro "finalizar operação de recursos de eliminação de namespace não permitida" será relatado na inicialização: (



3.4.2 Faça um espelho com Dockerfile

Acima, executamos manualmente algumas operações no console do contêiner, e o Dockerfile é um método de produção mais transparente e repetível , porque não realizamos operações manualmente, mas gravamos todas as operações no Dockerfile usando os comandos e a sintaxe fornecida pelo Docker . Os nomes dos comandos são todos maiúsculos. Os comandos do Dockerfile comumente usados ​​são:

  • DE : Especifique de qual espelho pai estender.
  • RUN : Execute comandos para modificar a imagem. Por exemplo, RUN apt-get update e RUN ["apt-get", "update"]. O primeiro executa comandos em / bin / sh e o último executa diretamente usando a chamada do sistema exec.
  • EXPOR : Especifique a porta aberta para o exterior pelo processo no container. Você também pode usar o parâmetro -p para abrir algumas portas que não estão listadas no Dockerfile quando o contêiner é iniciado.
  • ADD : Adiciona o arquivo host host, pasta ou recurso especificado de URL ao espelho.
  • ENV : Defina a variável de ambiente para operação do contêiner.
  • USUÁRIO : Especifique o usuário para executar o contêiner e os comandos após o Dockerfile.

Outros comandos incluem: informações do autor da instrução MAINTAINER, WORKDIR especifica o diretório de trabalho (o último será o diretório de trabalho após o contêiner ser iniciado), arquivos de montagem VOLUME, CMD e ENTRYPOINT especificam os comandos executados após o contêiner ser iniciado, ONBUILD especifica alguns comandos no espelho atual Não será executado durante a construção, mas acionado quando o subespelho for construído.

Conhecendo esses comandos comumente usados, você pode começar a escrever o Dockerfile abaixo. Nota: O nome do arquivo Dockerfile é denominado "Dockerfile" por padrão, caso contrário, o Docker não o encontrará quando o comando de construção for executado. Depois de escrever, a execução docker build .pode começar a construir, cada comando Dockerfile é equivalente a construir uma imagem temporária, a etapa final irá gerar a imagem de destino final.



3.4.3 Carregar imagem para o Hub

Primeiro, docker logininsira nossas informações de login no Docker Hub com o comando e o Docker as salvará em ~ / .dockercfg.



4. Anexo: tecnologia relacionada ao Docker

  • Isolamento de contêiner : use libcontainer em vez de LXC como contêiner padrão. O isolamento de processos, redes, mensagens, sistemas de arquivos e nomes de host é obtido por meio dos namespaces pid, net, ipc, mnt e uts do kernel.
  • Alocação de recursos : controle a medição e alocação de recursos por meio de cgroups.
  • Portabilidade : Use AUFS para obter atualizações rápidas para contêineres. AUFS tem o conceito de camadas. Cada modificação é uma modificação incremental na camada de somente gravação existente, e o conteúdo modificado forma uma nova camada de arquivo sem afetar a camada original.
  • Segurança : A segurança é garantida por meio de isolamento de namespace e auditoria de cgroups, além de uma série de ferramentas como SELinux.



 
 


Acho que você gosta

Origin blog.csdn.net/superiorpengFight/article/details/55253100
Recomendado
Clasificación