Diretório de artigos
-
- 1. Visão geral do Docker
- 2. Comandos do Docker
- 3. Volumes de dados para contêineres do Docker
- 4. Implantação do aplicativo Docker
- 5. Dockerfile
- 6. Orquestração de serviço do Docker
- 7. Repositório Privado Docker
- 8. Docker vs. máquinas virtuais tradicionais
1. Visão geral do Docker
1. Introdução ao Docker
Docker é um mecanismo de contêiner de aplicativo de código aberto
Em 2008, Solomon Hykes co-fundou uma empresa chamada DotCloud com seus amigos Kamel Founadi e Sebastien Pahl, com o objetivo de usar uma tecnologia chamada containers para criar o que eles chamaram de "ferramentas de inovação massiva": qualquer ferramenta de programação que qualquer um pode usar .
Após anos de desenvolvimento, o Docker finalmente nasceu no início de 2013, baseado na linguagem Go. O fundador do Docker, Solomon Hykes, apresentou o Docker publicamente pela primeira vez em sua apresentação no PyCon.
O Docker permite que os desenvolvedores empacotam seus aplicativos e dependências em um contêiner leve e portátil que pode ser distribuído para qualquer máquina Linux popular.
Os contêineres são completamente sandboxed e isolados uns dos outros. A sobrecarga de desempenho do contêiner é extremamente baixa.
O Docker foi dividido em CE (Community Edition: Community Edition) e EE (Enterprise Edition: Enterprise Edition) desde a versão 17.03
2. Instale o Docker
1. Ambiente Windows
Instalar o Docker no Windows é relativamente simples. A primeira coisa a fazer é ativar os recursos do Windows .
Abra o Hyper-V
e abra
o Windows Subsystem para Linux Baixe o espelho do site oficial
Clique na imagem baixada e continue
2. Instalação do Ubuntu
Instalar o Docker no Ubuntu é mais fácil, basta usar o script de instalação oficial para instalá-lo.
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
3. Instalação do CentOS
A instalação do CentOS também pode usar scripts
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
3. Arquitetura do Docker
1. Espelho
Uma imagem do Docker (Imagem) é equivalente a um sistema de arquivos raiz. Por exemplo, a imagem oficial ubuntu:20.04 contém um conjunto completo de sistemas de arquivos raiz do sistema mínimo Ubuntu20.04.
Para dar um exemplo mais próximo da vida, deve ser que quando nosso sistema está quebrado, precisamos reinstalar o sistema. Os arquivos na figura são semelhantes a imagens espelhadas.
2. Contêiner
A relação entre uma imagem e um container é como uma classe e um objeto na programação orientada a objetos.Uma imagem é uma definição estática e um container é uma entidade quando a imagem é executada. Os contêineres podem ser criados, iniciados, parados, excluídos, suspensos etc.
Continuando o exemplo acima, o container é equivalente ao sistema Windows instalado. Ao instalar a imagem, podemos utilizar nosso sistema para realizar diversas operações
3. Armazém
O repositório pode ser visto como um centro de controle de código para armazenamento de imagens.
O warehouse é como o MSDN, o site que costumamos acessar para baixar espelhos do Windows, e há um grande número de espelhos nele.
2. Comandos do Docker
1. Comandos relacionados ao processo
1. Inicie o serviço docker
systemctl start docker
2. Pare o serviço docker
systemctl stop docker
3. Reinicie o serviço docker
systemctl restart docker
4. Visualize o status do serviço docker
systemctl status docker
5. Inicie o serviço docker na inicialização
systemctl enable docker
2. Comandos relacionados ao espelho
1. Veja o espelho
1. Visualize todos os espelhos locais
docker images
2. Visualize o id da imagem usada
docker images -q
2. Procure espelhos
docker search 镜像名称
3. Puxe a imagem
docker pull 镜像名称
Baixe a imagem do repositório do Docker para o local, o formato do nome da imagem é name:version number, se o número da versão não for especificado, é a versão mais recente
4. Exclua o espelho
1. Exclua o espelho local especificado
docker rmi 镜像id
2. Exclua todos os espelhos locais
docker rmi docker images -q
3. Comandos relacionados ao contêiner
1. Visualize o contêiner
1. Veja os contêineres em execução
docker ps
2. Veja todos os contêineres
docker ps -a
2. Crie e inicie o contêiner
docker run 参数
Descrição do parâmetro:
parâmetro | ilustrar |
---|---|
-eu | Mantenha o recipiente funcionando. Geralmente usado com -t. Depois de adicionar os dois parâmetros dele, o contêiner entra automaticamente no contêiner após ser criado e o contêiner é fechado automaticamente após sair do contêiner. |
-t | Realoque um terminal de pseudo-entrada para o contêiner, geralmente usado com -i. |
-d | Execute o contêiner no modo daemon (segundo plano). Para criar um contêiner para ser executado em segundo plano, você precisa usar o docker exec para entrar no contêiner. Após sair, o container não fecha. |
3. Insira o contêiner
docker exec 参数 # 退出容器,容器不会关闭
4. Inicie o recipiente
docker start 容器名称
5. Pare o recipiente
docker stop 容器名称
6. Exclua o contêiner
docker rm 容器名称
Se o contêiner estiver em execução, a exclusão falhar, você precisa parar o contêiner para excluir
7. Visualize as informações do contêiner
docker inspect 容器名称
3. Volumes de dados para contêineres do Docker
1. O conceito e o papel dos volumes de dados
1. Conceito
- Um volume de dados é um diretório ou arquivo no host
- Quando o diretório do contêiner e o diretório do volume de dados estiverem vinculados, a modificação da outra parte será sincronizada imediatamente
- Um volume de dados pode ser montado por vários contêineres ao mesmo tempo
- Um contêiner também pode ser montado com vários volumes de dados
2. Função
- Persistência de dados do contêiner
- Comunicação indireta entre máquina externa e container
2. Configure o volume de dados
1. Método de configuração
Ao criar um contêiner de inicialização, use o parâmetro –v para definir o volume de dados
docker run ... –v 宿主机目录(文件):容器内目录(文件)
2. Precauções
- O diretório deve ser um caminho absoluto
- Se o diretório não existir, ele será criado automaticamente
- Vários volumes de dados podem ser montados
3. Configure o contêiner de volume de dados
1. Vários contêineres para troca de dados
- Vários contêineres montam o mesmo volume de dados
- recipiente de volume de dados
2. Método de configuração
- Crie um contêiner de volume de dados c3 inicial, use o parâmetro –v para definir o volume de dados
docker run –it --name=c3 –v /volume centos:7 /bin/bash
- Crie e inicie o contêiner c1 c2, use o parâmetro --volumes-from para definir o volume de dados
docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bashdocker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash
4. Implantação do aplicativo Docker
- Serviços de rede dentro do contêiner e máquinas externas não podem se comunicar diretamente
- Máquina externa e host podem se comunicar diretamente
- Host e contêiner podem se comunicar diretamente
- Quando o serviço de rede no contêiner precisa ser acessado por uma máquina externa, a porta que fornece o serviço no contêiner pode ser mapeada para a porta da máquina host. Máquinas externas acessam esta porta do host, acessando assim indiretamente os serviços do container.
- Esta operação é chamada: mapeamento de porta contêiner de máquina externa
5. Dockerfile
1. Princípio da imagem do Docker
- As imagens do Docker são sobrepostas por um sistema de arquivos especial
- A parte inferior é bootfs e usa bootfs do host
- A segunda camada é o sistema de arquivos raiz rootfs , chamado de imagem base
- Então você pode empilhar outros arquivos de imagem no topo
- A tecnologia **Union File System** pode integrar diferentes camadas em um sistema de arquivos, fornecendo uma perspectiva unificada para essas camadas, ocultando assim a existência de várias camadas.Do ponto de vista do usuário, existe apenas um sistema de arquivos.
- Uma imagem pode ser colocada em cima de outra imagem. A imagem abaixo é chamada de imagem pai e a imagem inferior se torna a imagem base.
- Ao iniciar um contêiner a partir de uma imagem, o Docker monta um sistema de arquivos de leitura e gravação no nível superior como o contêiner
1. Sistema de arquivos Linux
Diferentes distribuições linux, o bootfs é basicamente o mesmo, mas o rootfs é diferente, como ubuntu, centos, etc.
1. botas
Contém bootloader (boot loader) e kernel (kernel)
2. raízes
O sistema de arquivos raiz contém diretórios e arquivos padrão como /dev, /proc, /bin, /etc em um sistema Linux típico
2. Criação de imagem do Docker
1. Converta o contêiner em uma imagem
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load –i 压缩文件名称
3. Palavras-chave do Dockerfile
palavras-chave | efeito | Observação |
---|---|---|
A PARTIR DE | especificar imagem pai | Especifica que o dockerfile é baseado em qual imagem construir |
MANTENEDOR | Informação sobre o autor | Usado para indicar quem escreveu este dockerfile |
RÓTULO | Rótulo | O rótulo usado para indicar que o dockerfile pode usar Label em vez do Mantenedor, que pode ser visualizado nas informações básicas da imagem do docker |
CORRER | Executando um pedido | Execute um comando por padrão no formato /bin/sh: comando RUN ou RUN [“command” , “param1”, “param2”] |
CMD | comando de inicialização do contêiner | Fornece o comando padrão a ser usado com ENTRYPOINT ao iniciar o contêiner. Formatar comando CMD param1 param2 ou CMD ["command", "param1", "param2"] |
PONTO DE ENTRADA | Entrada | Geralmente usado na confecção de alguns contêineres que são fechados após a execução |
CÓPIA DE | copiar arquivo | Copie o arquivo para a imagem ao construir |
ADICIONAR | adicionar arquivos | Adicionar arquivos à imagem durante a compilação não se limita ao contexto de compilação atual e pode vir de serviços remotos |
ENV | variável de ambiente | A variável de ambiente ao especificar a compilação pode ser substituída no formato ENV name=value por meio de -e quando o contêiner é iniciado |
ARG | parâmetros de construção | Os parâmetros de compilação são usados apenas no momento da compilação. Se houver ENV, o valor de mesmo nome de ENV sempre substituirá o parâmetro de arg |
VOLUME | Definir volumes de dados montáveis externamente | Especifique os diretórios da imagem de construção que podem ser montados no sistema de arquivos ao iniciar. Ao iniciar o contêiner, use o formato de ligação -v VOLUME ["diretório"] |
EXPOR | porta exposta | Defina a porta escutando quando o contêiner estiver em execução Inicie o contêiner usando -p para vincular o formato da porta exposta: EXPOSE 8080 ou EXPOSE 8080/udp |
WORKDIR | Lista de trabalho | Se o diretório de trabalho dentro do container especificado não for criado, ele será criado automaticamente. Se o / especificado usar um endereço absoluto, se não começar com /, então é o caminho relativo do caminho do workdir anterior |
DO UTILIZADOR | Especifique o usuário de execução | Especifique o usuário quando o usuário executa o RUN CMD ENTRYPONT ao construir ou iniciar |
EXAME DE SAÚDE | Exame de saúde | O comando para especificar o monitoramento de integridade do contêiner atual é basicamente inútil porque muitas vezes o próprio aplicativo possui um mecanismo de monitoramento de integridade |
CONSTRUIR | acionar | Quando a imagem com a palavra-chave ONBUILD for usada como imagem base, o comando ONBUILD será executado após a execução de FROM, mas não afeta o uso da imagem atual e não é muito útil |
SINAL DE PARADA | Enviar um semáforo para o host | A diretiva STOPSIGNAL configura o sinal de chamada do sistema que será enviado ao container para sair. |
CONCHA | Especifique o shell para executar o script | Especifique o shell usado quando RUN CMD ENTRYPOINT executa o comando |
6. Orquestração de serviço do Docker
O sistema de aplicativos da arquitetura de microsserviços geralmente contém vários microsserviços e cada microsserviço geralmente implanta várias instâncias. Se cada microsserviço precisar ser iniciado e interrompido manualmente, a carga de trabalho de manutenção será muito grande.
- Para criar uma imagem do Dockerfile ou extrair a imagem do dockerhub
- Para criar vários contêineres
- Para gerenciar esses contêineres (iniciar parar excluir)
Neste momento, seria bom se houvesse uma ferramenta que nos permitisse concluir essas operações convenientemente.
E o Docker compose pode fazer isso por nós.
1. Visão geral do Docker Compose
O Docker Compose é uma ferramenta para orquestrar implantações distribuídas de vários contêineres, fornecendo um conjunto de comandos para gerenciar o ciclo completo de desenvolvimento de aplicativos em contêineres, incluindo criação, inicialização e interrupção de serviços.
2. Etapas para usar o Docker Compose
- Use o Dockerfile para definir a imagem do ambiente em execução
- Use docker-compose.yml para definir os serviços que compõem o aplicativo
- Execute docker-compose up para iniciar o aplicativo
3. Instalação e uso do Docker Compose:
1. Instale o Docker Compose
# 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
7. Repositório Privado Docker
1. Configuração de armazém privado
# 1、拉取私有仓库镜像
docker pull registry
# 2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功
# 4、修改daemon.json
vim /etc/docker/daemon.json
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{
"insecure-registries":["私有仓库服务器ip:5000"]}
# 5、重启docker 服务
systemctl restart docker
docker start registry
2. Faça upload da imagem para o repositório privado
# 1、标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
# 2、上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7
3. Extraia imagens de repositórios privados
#拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7
8. Docker vs. máquinas virtuais tradicionais
característica | recipiente | máquina virtual |
---|---|---|
velocidade de inicialização | segundos | nível minuto |
uso do disco rígido | ~MB | ~GB |
custo de memória | muito pequeno | mais |
atuação | perto do nativo | pior que nativo |
suporte do sistema | Uma única máquina suporta milhares de contêineres | Geralmente dezenas |
isolamento | Isolamento seguro | completamente isolado |
mobilidade | excelente | pobre |