Introdução ao princípio de DockerFile DockerCompose espelhamento do Docker série 5

DockerFile

Princípio do espelho

O que é espelho

Mirror é um pacote de software leve, executável e independente usado para empacotar o ambiente operacional do software e o software desenvolvido com base no ambiente operacional. Ele contém todo o conteúdo necessário para executar um determinado software, incluindo código, tempo de execução, biblioteca e ambiente. Variáveis ​​e arquivos de configuração

Pensamento

Qual é a essência do espelhamento do Docker?

Por que uma imagem centos no Docker tem apenas 200 MB e um arquivo iso do sistema operacional centos requer vários G?

Por que uma imagem do tomcat no Docker tem 500 MB, enquanto um pacote de instalação do tomcat tem apenas mais de 70 MB?
**
**

Componentes do sistema operacional

Subsistema de programação de processos Subsistema de
comunicação de processos Subsistema de
gerenciamento de memória Subsistema de gerenciamento de
equipamentos Subsistema de
gerenciamento de arquivos Subsistema de
comunicação de rede Subsistema de
controle de trabalho

Subsistema de gerenciamento de arquivos

O sistema de arquivos Linux consiste em duas partes: bootfs e rootfs

bootfs: contém bootloader (boot loader) e kernel (kernel)

rootfs: sistema de arquivos raiz, que contém diretórios e arquivos padrão como / dev, / proc, / bin, / etc em um sistema Linux típico

Distribuições Linux diferentes, bootfs são basicamente os mesmos, mas rootfs são diferentes, como ubuntu, centos, etc.

Insira a descrição da imagem aqui

1) UnionFS (Union File System)

**
UnionFS (Union File System): O sistema de arquivos Union é um sistema de arquivos hierárquico, leve e de alto desempenho. Ele suporta a modificação do sistema de arquivos como um envio para sobrepor camada por camada e, ao mesmo tempo, diferentes diretórios pode ser sobreposto. Montado no mesmo sistema de arquivos virtual, o sistema de arquivos Union é a base da imagem do Dokcer. Os espelhos podem ser herdados por meio de camadas. Com base no espelho básico (sem o espelho pai), vários espelhos específicos podem ser feitos.
Recursos: carregue vários sistemas de arquivos ao mesmo tempo, mas de fora, apenas um sistema de arquivos pode ser visto. O carregamento conjunto carregará cada camada dos sistemas de arquivos, de modo que o sistema de arquivos final contenha todos os arquivos e diretórios subjacentes
**
**

2) Princípio de carregamento de imagem do Docker

**

A imagem docker é, na verdade, composta por um sistema de arquivos em camadas, este sistema de arquivos em camadas UnionFS.
Inclui principalmente bootloader e kernel. Bootloader é principalmente o kernel do bootloader. Quando o Linux é iniciado, ele carrega o sistema de arquivos bootfs. A camada inferior da imagem Docker é bootfs. Esta camada é a mesma do nosso sistema linux / unix típico e contém o kernel do carregador de boot. Quando o boot é carregado, todo o kernel está na memória. Neste momento, o direito de usar a memória foi dado ao kernel pelo bootfs, e o sistema também irá descarregar bootfs

Normalmente, os CentOS que instalamos na máquina virtual são vários G, por que o docker tem apenas 200M aqui
**
Insira a descrição da imagem aqui

Para um sistema operacional simplificado, rootfs pode ser muito pequeno e só precisa incluir os comandos, ferramentas e bibliotecas mais básicos, porque a camada inferior usa host e kernel diretamente, e você só precisa fornecer rootfs. Pode-se ver que para diferentes distribuições de Linux, bootfs é basicamente o mesmo e rootfs será diferente, portanto, distribuições diferentes podem compartilhar bootfs.
**

3) Espelhamento em camadas

**
Pegue o pull como exemplo. Durante o processo de download, podemos ver que a imagem do docker parece ser baixada camada por camada.

Insira a descrição da imagem aqui

**

4) Por que a imagem do Docker adota essa estrutura em camadas

** A
maior vantagem são os recursos compartilhados. Por
exemplo: se várias imagens forem criadas a partir da mesma imagem de base, o host só precisa salvar uma imagem de base no disco e, ao mesmo tempo, precisa carregar uma base imagem na memória., Você pode servir a todos os servidores. E cada camada do espelho pode ser compartilhada.
**

2. Recursos

** As
imagens do Docker são somente leitura.
Quando o contêiner é iniciado, uma nova camada gravável é carregada na parte superior da imagem.
Esta camada é normalmente chamada de "camada de contêiner", e a "camada de contêiner" é chamada de "camada de espelho"

5) Compreensão profunda

Todas as imagens do Docker começam com uma camada de imagem básica. Ao modificar ou adicionar novo conteúdo, uma nova camada de imagem será criada no topo da camada de imagem atual. Para dar um exemplo simples, se você criar uma nova imagem baseada no Ubuntu Linux 16.04, esta é a primeira camada da nova imagem; se você adicionar um pacote Python à imagem, uma segunda camada de imagem será criada em cima da base camada de imagem; Se você continuar a adicionar um patch de segurança, uma terceira camada de espelho será criada. O espelho atualmente contém 3 camadas de espelho, conforme mostrado na figura abaixo (este é apenas um exemplo muito simples para demonstração).

Insira a descrição da imagem aqui

Ao adicionar camadas de espelho adicionais, o espelho sempre permanece uma combinação de todos os espelhos atuais.É muito importante entender isso. A figura a seguir mostra um exemplo simples, cada camada de espelho contém 3 arquivos e o espelho contém 6 arquivos de duas camadas de espelho.

Insira a descrição da imagem aqui

A camada de espelho na imagem acima é um pouco diferente da imagem anterior, o objetivo principal é facilitar a exibição dos arquivos. A figura a seguir mostra uma imagem de três camadas um pouco mais complicada. De fora, a imagem inteira tem apenas 6 arquivos. Isso ocorre porque o arquivo 7 na camada superior é uma versão atualizada do arquivo 5.

Insira a descrição da imagem aqui

Nesse caso, os arquivos na camada espelhada superior sobrescrevem os arquivos na camada espelhada inferior. Isso permite que a versão atualizada do arquivo seja adicionada ao espelho como uma nova camada de espelho.

O Docker usa o mecanismo de armazenamento (a nova versão adota o mecanismo de instantâneo) para implementar a pilha de camadas espelhadas e garante que as várias camadas espelhadas sejam exibidas externamente como um sistema de arquivos unificado.

Os mecanismos de armazenamento disponíveis no Linux são AUFS, Overlay2, Device Mapper, Btrfs e ZFS. Como o nome indica, cada mecanismo de armazenamento é baseado no sistema de arquivos correspondente ou tecnologia de dispositivo de bloco no Linux, e cada mecanismo de armazenamento tem suas próprias características de desempenho exclusivas.

O Docker só oferece suporte a windowsfilter como mecanismo de armazenamento no Windows, que implementa camadas e CoW [1] com base no sistema de arquivos NTFS.

A figura a seguir mostra o mesmo espelhamento de três camadas da tela do sistema. Todas as camadas de espelho são empilhadas e mescladas para fornecer uma visão unificada do lado de fora.

Insira a descrição da imagem aqui

resumo

1. A imagem do Docker é sobreposta por um sistema de arquivos especial
2. A parte inferior é bootfs, e o bootfs do host é usado

3. A segunda camada é o rootfs do sistema de arquivos raiz, chamado de imagem de base

4. Em seguida, suba e você pode sobrepor outros arquivos espelhados

5. A tecnologia Union File System pode integrar diferentes camadas em um sistema de arquivos, proporcionando uma perspectiva unificada para essas camadas, de forma que a existência de múltiplas camadas fica oculta Do ponto de vista do usuário, existe apenas um sistema de arquivos.

6. Um espelho pode ser colocado em cima de outro espelho. O espelho inferior é chamado de espelho pai e o espelho inferior se torna o espelho da base.

7. Ao iniciar um contêiner a partir de uma imagem, o Docker carregará um sistema de arquivos de leitura e gravação no nível superior como o contêiner

Resolva o problema no problema de pensamento

1. Qual é a essência do espelhamento do Docker?

É um sistema de arquivos hierárquico

2. Por que uma imagem centos no Docker tem apenas 200 MB, mas um arquivo iso de sistema operacional centos requer vários G?

O arquivo de imagem iso do Centos contém bootfs e rootfs, enquanto a imagem centos do docker reutiliza o bootfs do sistema operacional, apenas rootfs e outras camadas espelhadas

3. Por que uma imagem do tomcat no Docker tem 500 MB, enquanto um pacote de instalação do tomcat tem apenas mais de 70 MB?

Como a imagem no docker é hierárquica, embora o tomcat tenha apenas mais de 70 MB, ele precisa depender da imagem pai e da imagem base. O tamanho de todas as imagens expostas do tomcat é superior a 500 MB.

Insira a descrição da imagem aqui

Produção de espelhos

1. Converta o contêiner em um espelho

Função: por exemplo, criamos um novo aplicativo no tomcat, mas queremos enviar o aplicativo aos testadores para teste. Neste momento, podemos colocar o aplicativo no contêiner e convertê-lo em uma imagem espelhada e, em seguida, enviá-lo para o testador para teste

docker commit 容器id 镜像名称:版本号
#镜像是不可以直接传输的
#所以可以将其压缩为压缩文件进行传输
docker save -o 压缩文件名称 镜像名称:版本号

docker load -i 压缩文件名称

Insira a descrição da imagem aqui

2.DockerFile

O que é DockerFile

1.Dockerfile é um arquivo de texto

2. Contém uma instrução

3. Cada instrução constrói uma camada, com base na imagem básica, finalmente constrói uma nova imagem

4. Para desenvolvedores: pode fornecer um ambiente de desenvolvimento totalmente consistente para a equipe de desenvolvimento

5. Para testadores: você pode obter diretamente a imagem construída durante o desenvolvimento ou construir uma nova imagem por meio do arquivo Dockerfile e começar a trabalhar

6. Para o pessoal de operação e manutenção: durante a implantação, a migração perfeita de aplicativos pode ser alcançada

Site da Dochub: https://hub.docker.com

Insira a descrição da imagem aqui

3. Palavra-chave do DockerFile

Palavra-chave efeito Observações
A PARTIR DE Especifique o espelho pai Especifique que o dockerfile é construído com base nessa imagem
MANUTENÇÃO Informação sobre o autor Usado para indicar quem escreveu este dockerfile
RÓTULO rótulo O rótulo usado para indicar o dockerfile pode usar Rótulo em vez de Maintainer, que pode ser visualizado nas informações básicas da imagem do docker.
CORRE Executando um pedido O formato padrão de execução de um comando é / bin / sh: RUN command ou RUN ["command", "param1", "param2"]
CMD Comando de inicialização do contêiner Forneça o comando padrão ao iniciar o contêiner e use-o com ENTRYPOINT. Formate o comando CMD param1 param2 ou CMD ["command", "param1", "param2"]
PONTO DE ENTRADA Entrada Geralmente usado na produção de alguns contêineres que são fechados após a execução
CÓPIA DE Copiar arquivos Copie os arquivos para a imagem durante a construção
ADICIONAR adicionar arquivos Adicionar arquivos à imagem durante a construção não se limita ao contexto de construção atual e pode ser derivado de serviços remotos
ENV Variável de ambiente Especifique as variáveis ​​de ambiente no momento da construção. Você pode passar -e para substituir o formato ENV nome = valor ao iniciar o contêiner.
ARG Parâmetros de construção O parâmetro de construção é usado apenas durante a construção. Se houver ENV, o valor de mesmo nome de ENV sempre substitui o parâmetro de arg
VOLUME Defina volumes de dados externos que podem ser montados Especifique os diretórios de imagem de construção a serem montados no sistema de arquivos quando eles puderem ser iniciados. Ao iniciar o contêiner, use o formato de ligação -v VOLUME ["diretório"]
EXPOR Porta exposta Defina a porta a ser monitorada quando o contêiner estiver em execução. Inicie o contêiner usando -p para vincular o formato de porta exposto: EXPOSE 8080 ou EXPOSE 8080 / udp
WORKDIR Lista de trabalho Especifique o diretório de trabalho dentro do contêiner, se não for criado, ele será criado automaticamente. Se você especificar / usar um endereço absoluto, se não começar com /, então é um caminho relativo para o caminho do diretório de trabalho anterior
DO UTILIZADOR Especifique o usuário de execução Especifique o usuário quando o usuário está executando RUN CMD ENTRYPONT ao construir ou iniciar
EXAME DE SAÚDE Exame de saúde O comando para especificar o monitoramento de saúde do contêiner atual é basicamente inútil porque muitas vezes o próprio aplicativo possui um mecanismo de monitoramento de saúde
ONBUILD acionar Quando a imagem com a palavra-chave ONBUILD é usada como imagem básica, o comando ONBUILD será executado após a execução de FROM ser concluída, mas não afeta a imagem atual e não é muito útil.
STOPSIGNAL Envie um semáforo para o host A instrução STOPSIGNAL define o sinal de chamada do sistema que será enviado ao contêiner para sair.
CONCHA Especifique o shell para executar o script Especifique o shell usado quando RUN CMD ENTRYPOINT executa o comando

4 ... Faça um espelho baseado em Centos7

exigem

Espelho centos7 personalizado.
Afirmação:

  1. O caminho de login padrão é / usr

  2. Você pode usar o vim

Etapas de implementação

1. Defina a imagem principal: FROM centos: 7

2. Defina as informações do autor: MAINTAINER itheima [email protected]

3. Execute o comando de instalação do vim: EXECUTE yum install -y vim

4. Defina o diretório de trabalho padrão: WORKDIR / usr

5. Defina o comando a ser executado pelo contêiner: CMD / bin / bash

6. Crie a imagem por meio do dockerfile: docker bulid -f caminho do arquivo dockerfile -t nome da imagem: versão.

Exemplo

Observe que há um ponto no final, caso contrário, um erro será relatado

docker bulid –f centos_dockerfile –t pjhcentos:1  .

Demo

Crie um diretório docker-files no diretório raiz

Insira a descrição da imagem aqui

Crie um conteúdo de arquivo chamado centos_dockerfile

Insira a descrição da imagem aqui

Digite o comando para criar um espelho

Insira a descrição da imagem aqui

Criado com sucesso
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Implante o projeto SpringBoot no contêiner

exigem

Defina o dockerfile e publique o projeto springboot

Etapas de implementação

1. Defina a imagem pai: FROM java: 8

2. Defina as informações do autor: MAINTAINER itheima [email protected]

3. Adicione o pacote jar ao contêiner: ADD springboot.jar app.jar

4. Defina o comando para iniciar a execução do contêiner: CMD java – jar app.jar

5. Crie a imagem por meio do dockerfile: docker bulid -f caminho do arquivo dockerfile -t nome da imagem: versão

Demo

Crie um projeto springboot
Insira a descrição da imagem aqui

Embale como um pacote de jar
Insira a descrição da imagem aqui

Upload para o servidor
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Transfira para o diretório dockerfile correspondente
Insira a descrição da imagem aqui

Adicione o pacote jar correspondente ao espelho correspondente e, em seguida,
grave o arquivo de configuração DockerFile correspondente
Insira a descrição da imagem aqui

Construir imagem
Insira a descrição da imagem aqui

Crie o contêiner correspondente
Insira a descrição da imagem aqui

Insira a descrição da imagem aqui

Visita de teste
Insira a descrição da imagem aqui

Orquestração de serviço

O sistema de aplicativo da arquitetura de microsserviço geralmente contém vários microsserviços, e cada microsserviço geralmente implanta várias instâncias. Se cada microsserviço tiver que ser iniciado e interrompido manualmente, a carga de trabalho de manutenção será muito grande.

1. Para construir uma imagem do Dockerfile ou puxar a imagem do dockerhub
2. Para criar vários contêineres
3. Para gerenciar esses contêineres (iniciar, parar, excluir)

conceito:

Gerenciar contêineres em lotes de acordo com certas regras de negócios

DockerCompose

Introdução do conceito

O Docker Compose é uma ferramenta para orquestrar a implantação distribuída de vários contêineres. Ele fornece um conjunto de comandos para gerenciar o ciclo completo de desenvolvimento de aplicativos em contêineres, incluindo construção, início e parada de serviço. Use as etapas: Use Dockerfile para definir a imagem do ambiente operacional Use docker-compose.yml para definir os serviços que compõem o aplicativo Execute docker-compose para iniciar o aplicativo

Insira a descrição da imagem aqui

Instalação e uso de DockerCompose

1. Método de instalação

# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。 
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限 
chmod +x /usr/local/bin/docker-compose
# 查看版本信息 
docker-compose -version

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

2. Método de desinstalação

# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

3. Use docker compose para organizar o projeto nginx + springboot

1. Crie um diretório docker-compose

mkdir ~/docker-compose
cd ~/docker-compose

Insira a descrição da imagem aqui

2. Grave o arquivo docker-compose.yml

Observe que o nome deve ser

docker-compose.yml
#版本号
version: '3'
services:
  nginx:
  #对应的nginx镜像名称
   image: nginx
   #容器与虚拟机的端口映射
   ports:
    - 80:80
    #当前的项目可以访问到对应的app项目于下面定义的app相联系
   links:
    - app
    #挂载数据卷,前面为宿主机目录后面为容器的目录
   volumes:
    - ./nginx/conf.d:/etc/nginx/conf.d
  app:
  #对应应用的镜像名称
    image: app
    expose:
      - "8080"

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

3. Crie o diretório ./nginx/conf.d

mkdir -p ./nginx/conf.d

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

4. Grave o arquivo itheima.conf no diretório ./nginx/conf.d

server {
    listen 80;
    access_log off;
    location / {
        proxy_pass http://app:8080;
    }
   
}

Insira a descrição da imagem aqui

5. Use docker-compose para iniciar o contêiner no diretório ~ / docker-compose

docker-compose up

Insira a descrição da imagem aqui

6. Visita de teste

http://192.168.149.135/hello

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/pjh88/article/details/114732026
Recomendado
Clasificación