Introdução ao conceito Docker

Índice

  1. O que é Docker?

  2. Quais são os cenários de aplicação do Docker?

  3. Quais são as vantagens do Docker?

  4. Qual é a diferença entre Docker e uma máquina virtual?

  5. Quais são os três núcleos do Docker?

  6. Como instalar rapidamente o Docker?

  7. Como modificar o local de armazenamento do Docker?

  8. Quais são os métodos comuns de gerenciamento para imagens Docker?

  9. Como criar um contêiner Docker?

  10. Qual é o processo padrão de execução do Docker em segundo plano?

  11. Quais são os modos de rede Docker?

  12. O que são volumes de dados Docker

  13. Como construir um armazém privado Docker

  14. Como o Docker migra backups?

  15. Como implantar MySQL com Docker?

Prefácio

Este artigo resume os problemas e armadilhas comuns do Docker e os compartilha com todos na forma de perguntas e respostas.

1. O que é Docker?

  • Docker é um mecanismo de contêiner de aplicativos de código aberto, desenvolvido com base na linguagem Go e seguiu o protocolo Apache2.0 e é de código aberto

  • Docker é uma ferramenta de código aberto para executar aplicativos em contêineres Linux. É uma "máquina virtual" leve

  • A tecnologia de contêiner do Docker facilita a criação de um contêiner leve, portátil e autossuficiente para qualquer aplicativo em um único host

Você também pode usar esta metáfora vívida:

O logotipo do Docker é desenhado como uma baleia azul, arrastando muitos contêineres. A baleia pode ser vista como uma máquina hospedeira e os contêineres podem ser entendidos como contêineres mutuamente isolados. Cada contêiner contém seu próprio aplicativo.

2.Quais são os cenários de aplicação do Docker?

  • Empacotamento e publicação automatizados de aplicativos da web.

  • Testes automatizados e integração e lançamento contínuos.

  • Implante e ajuste bancos de dados ou outros aplicativos back-end em ambientes baseados em serviços.

  • Crie seu próprio ambiente PaaS compilando do zero ou estendendo uma plataforma OpenShift ou Cloud Foundry existente.

Aqui vou focar no cenário do Docker como ambiente de desenvolvimento interno.

Antes do surgimento da tecnologia de contêineres, as empresas geralmente forneciam a cada desenvolvedor uma ou mais máquinas virtuais para servirem como ambientes de desenvolvimento e teste. O ambiente de desenvolvimento e teste geralmente tem carga baixa e uma grande quantidade de recursos do sistema é desperdiçada no processo da própria máquina virtual.

Os contêineres Docker não têm nenhuma sobrecarga adicional de CPU e memória e são muito adequados para fornecer o ambiente interno de desenvolvimento e teste de uma empresa. E como as imagens do Docker podem ser facilmente compartilhadas dentro da empresa, isso também ajuda muito na padronização do ambiente de desenvolvimento.

Se você quiser usar o contêiner como uma máquina de desenvolvimento, precisará resolver os problemas de login remoto no contêiner e gerenciamento de processos dentro do contêiner. Embora o docker tenha sido originalmente projetado para uma arquitetura de "microsserviços", com base em nossa experiência real, é viável executar vários programas no docker, até mesmo sshd ou upstart.

3.Quais são as vantagens do Docker?

A conteinerização está se tornando cada vez mais popular, e os contêineres do Docker são resumidos da seguinte forma:

  • Flexível: até mesmo os aplicativos mais complexos podem ser armazenados em contêineres.

  • Leve: os contêineres utilizam e compartilham o kernel do host.

  • Intercambiáveis: atualizações e upgrades podem ser implantados instantaneamente.

  • Portátil: pode ser construído localmente, implantado na nuvem e executado em qualquer lugar.

  • Escalável: cópias de contêineres podem ser adicionadas e distribuídas automaticamente.

  • Empilhável: os serviços podem ser empilhados verticalmente e instantaneamente.

foto

Docker é uma plataforma aberta para desenvolver, entregar e executar aplicações. O Docker permite separar aplicativos da infraestrutura para que você possa entregar software rapidamente. Com o Docker, você pode gerenciar sua infraestrutura da mesma forma que gerencia seus aplicativos. Ao aproveitar a abordagem do Docker para entregar, testar e implantar código rapidamente, você pode reduzir significativamente o atraso entre escrever o código e executá-lo na produção.

4.Qual é a diferença entre Docker e uma máquina virtual?

Ao adicionar uma camada de hipervisor (camada intermediária de virtualização) à máquina virtual, o hardware virtual, como placas de rede, memória e CPU, é virtualizado e, em seguida, as máquinas virtuais são construídas sobre eles. Cada máquina virtual possui seu próprio kernel de sistema. O contêiner Docker usa isolamento (namesapce) para isolar sistemas de arquivos, processos, dispositivos, redes e outros recursos e, em seguida, controla permissões, recursos de CPU, etc. (cgroup), para que os contêineres não afetem uns aos outros. Não pode afetar o host máquina.

Comparados às máquinas virtuais, os contêineres consomem menos recursos. No mesmo host, o número de contêineres que podem ser criados é maior que o de máquinas virtuais.

No entanto, a segurança das máquinas virtuais é um pouco melhor do que a dos contêineres, e os contêineres docker compartilham recursos como o kernel e o sistema de arquivos com o host e têm maior probabilidade de causar impacto em outros contêineres e hosts.

foto

5.Quais são os três núcleos do Docker?

espelho

A imagem do Docker é a base para a criação de contêineres, é semelhante a um instantâneo de uma máquina virtual e pode ser entendida como um modelo somente leitura para o mecanismo de contêiner do Docker.

Inicie um contêiner por meio de uma imagem. Uma imagem é um pacote executável que inclui tudo o que é necessário para executar um aplicativo, incluindo código, tempo de execução, bibliotecas, variáveis ​​de ambiente e arquivos de configuração.

A imagem Docker também é um pacote compactado, mas esse pacote compactado não é apenas um arquivo executável e um script de implantação de ambiente, ele também contém um sistema operacional completo. Como a maioria das imagens são construídas com base em um determinado sistema operacional, é fácil construir os mesmos ambientes locais e remotos. Essa também é a essência das imagens Docker.

recipiente

Os contêineres Docker estão executando instâncias criadas a partir de imagens que podem ser iniciadas, interrompidas e excluídas. Cada contêiner criado é isolado um do outro e invisível entre si para garantir a segurança da plataforma. Um contêiner pode ser pensado como uma versão simplificada do ambiente Linux (incluindo permissões de usuário root, espaço de espelho, espaço de usuário, espaço de rede, etc.) e os aplicativos em execução nele.

armazém

Muitas vezes há vários armazéns armazenados no servidor de registro do armazém, cada armazém contém várias imagens e cada imagem tem uma tag diferente.

Os armazéns dividem-se em duas modalidades: armazém público (Público) e armazém privado (Privado).

O maior repositório público é o Docker Hub: https://hub.docker.com, que armazena um grande número de imagens para download pelos usuários.

Os armazéns públicos domésticos incluem Alibaba Cloud, NetEase Cloud, etc.

6. Como instalar rapidamente o Docker?

Execute o seguinte comando de instalação para instalar pacotes dependentes

yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager–add-repohttps://download.docker.com/linux/centos/docker-ce.repo[root@centos7 ~] yum -y install docker-ce docker-ce-cli containerd.io[root@centos7 ~]# docker ps --查看docker

foto

​​​​​​​
[root@centos7 ~]# systemctl enable docker[root@centos7 ~]# systemctl start docker[root@centos7 ~]# systemctl status docker[root@centos7 ~]# docker ps --查看容器[root@centos7 ~]# docker version --查看版本[root@centos7 ~]# docker info --查看版本

7. Como modificar o local de armazenamento do Docker?

Por padrão, o local de armazenamento do Docker é: /var/lib/docker

Você pode visualizar o local específico através do comando: docker info | grep "Docker Root Dir"

Modificar para outros diretórios

Primeiro pare o serviço Docker:

systemctl stop docker

Em seguida, mova todo o diretório /var/lib/docker para o caminho de destino​​​​​​

mkdir -p /root/data/dockermv /var/lib/docker /root/data/dockerln -s /root/data/docker /var/lib/docker --快捷方式

8.Quais são os métodos comuns de gerenciamento de imagens Docker?

Recupere imagens rapidamente

Formato: palavra-chave de pesquisa do docker

Obter imagem

Formato: docker pull warehouse name [:label] Se você não especificar um rótulo ao baixar a imagem, a versão mais recente da imagem no warehouse será baixada por padrão, ou seja, o rótulo será selecionado como o rótulo mais recente.

Ver informações da imagem

Após o download da imagem, ela é armazenada em /var/lib/docker por padrão.

  • REPOSITÓRIO: O repositório ao qual a imagem pertence

  • TAG: Informações da tag da imagem, marcando diferentes imagens no mesmo warehouse

  • ID DA IMAGEM: O número de identificação exclusivo da imagem, identifica exclusivamente uma imagem

  • CRIADO: hora de criação da imagem

  • TAMANHO: Tamanho da imagem

foto

Obtenha detalhes da imagem

Formato: docker inspeciona número de ID da imagem

Não é necessário inserir o número de identificação completo da imagem.

foto

Adicione uma nova tag à imagem local

Formato: tag docker Nome: [tag]

Excluir imagem

Formato 1: nome do armazém docker rmi: rótulo

Quando uma imagem possui diversas tags, apenas a tag especificada é excluída.

Formato 2: ID da imagem docker rmi [-f]

Se a imagem já estiver sendo usada por um contêiner, a abordagem correta é primeiro excluir todos os contêineres que dependem da imagem e, em seguida, excluir a imagem.

Salve a imagem como um arquivo local

Formato: docker save -o armazenamento nome do arquivo imagem armazenada​​​​​​​

[root@localhost ~]# docker save -o /opt/nginx.tar nginx:latest#将本地镜像传给另一台主机[root@localhost ~]# scp /opt/nginx.tar 192.168.1.54:/opt

9. Como criar um contêiner Docker? ​​​​​​​

#docker images   --镜像docker run -d --name centos7.8 -h centos7.8 \-p 220:22 -p 3387:3389 \--privileged=true \centos:7.8.2003 /usr/sbin/init
#我想拥有一个 linux 8.2 的环境docker run -d --name centos8.2 -h centos8.2 \-p 230:22 -p 3386:3389 \--privileged=true \daocloud.io/library/centos:8.2.2004 init
# 进入容器docker exec -it centos7.8bashdocker exec -it centos8.2 bashcat /etc/redhat-release    --查看系统版本

10.Qual é o processo padrão de execução do Docker em segundo plano?

Ao usar docker run para criar um contêiner, o processo padrão de execução do Docker em segundo plano é:

  • Verifique se a imagem especificada existe localmente. Quando a imagem não existir, ela será baixada do repositório público;

  • Crie e inicie um container usando a imagem;

  • Aloque um sistema de arquivos para o contêiner e monte uma camada de leitura e gravação fora da camada de imagem somente leitura;

  • Conecte uma interface de máquina virtual ao contêiner a partir da interface de ponte configurada no host host;

  • Atribua um endereço IP em um pool de endereços ao contêiner;

  • Execute o aplicativo especificado pelo usuário. Após a conclusão da execução, o contêiner será encerrado.

11.Quais são os modos de rede Docker?

modo host

modo host: especificado usando --net=host

Equivalente ao modo bridge no VMware, está na mesma rede do host, mas não possui endereço IP independente

Docker usa a tecnologia Namespace do Linux para isolamento de recursos, como processo de isolamento de Namespace PID, sistema de arquivos de isolamento Mount Namespace, rede de isolamento de Namespace de rede, etc.

Um Namespace de Rede fornece um ambiente de rede independente, incluindo placas de rede, roteamento, regras iptable, etc., que são isolados de outros Namespaces de Rede.

Um contêiner Docker geralmente recebe um namespace de rede independente

Mas se você usar o modo host ao iniciar o contêiner, o contêiner não obterá um Namespace de Rede independente, mas compartilhará um Namespace de Rede com o host. O contêiner não irá virtualizar sua própria placa de rede, configurar seu próprio IP, etc., mas utilizar o IP e a porta do host. Neste momento, o contêiner não possui mais uma pilha de rede isolada e independente. Não possuir todos os recursos portuários

foto

modo contêiner

Modo contêiner: use –net=contatiner:NAME_or_ID para especificar

Este modo especifica que o contêiner recém-criado compartilha um Namespace de Rede com um contêiner existente, em vez de compartilhá-lo com o host. O contêiner recém-criado não criará sua própria placa de rede e configurará seu próprio IP, mas compartilhará o IP, intervalo de portas, etc. com um contêiner especificado.  Os recursos de rede podem ser economizados até certo ponto, e o contêiner ainda não possui todas as portas internas.

Da mesma forma, além da rede, os dois contêineres também estão isolados em outros aspectos, como sistemas de arquivos, listas de processos, etc.

Os processos dos dois contêineres podem se comunicar através do dispositivo de placa de rede lo

foto

nenhum modo

modo none: Use --net=none para especificar

Usando o modo nenhum, o contêiner do Docker tem seu próprio namespace de rede, mas nenhuma configuração de rede é executada para o contêiner do Docker. Ou seja, este container Docker não possui placa de rede, IP, roteamento e outras informações.

Neste modo de rede, o contêiner possui apenas a rede de loopback lo e nenhuma outra placa de rede.

Este tipo não pode ser conectado à Internet, mas uma rede fechada pode garantir a segurança do container.

O contêiner será completamente independente da rede e os usuários poderão adicionar placas de rede ao contêiner conforme necessário. Este modo possui todas as portas. (Nenhum modo de rede configura a rede) Isso é usado apenas em circunstâncias especiais e geralmente não é usado.

Modo Ponte

Equivalente ao modo nat no VMware, o contêiner usa um Namespace de rede independente e está conectado à placa de rede virtual docker0. Comunique-se com o host por meio da ponte docker0 e da configuração da tabela nat iptables. Este modo atribui Namespace de rede, define IP, etc. para cada contêiner e conecta um contêiner Docker no host a uma ponte virtual.

Quando o processo Docker for iniciado, uma ponte virtual chamada docker0 será criada no host e o contêiner Docker iniciado neste host se conectará a essa ponte virtual. Uma ponte virtual funciona de forma semelhante a um switch físico, de modo que todos os contêineres no host sejam conectados a uma rede de Camada 2 por meio do switch.

Atribua um IP da sub-rede docker0 ao contêiner e defina o endereço IP do docker0 como o gateway padrão do contêiner. Crie um par de placas de rede virtuais com dispositivos emparelhados no host. Os dispositivos Veth sempre aparecem em pares. Eles formam um canal de dados. Os dados que entram de um dispositivo sairão do outro dispositivo. Portanto, vários dispositivos são frequentemente usados ​​para conectar dois dispositivos de rede.

O Docker coloca uma extremidade do dispositivo do par veth no contêiner recém-criado e o nomeia como eth0 (a placa de rede do contêiner), e a outra extremidade no host, nomeia-o com um nome semelhante como veth* e adiciona esse dispositivo de rede ao rede docker0 Na ponte. Você pode visualizá-lo através do comando brctl show.

Os contêineres são acessados ​​​​por meio de pares veth

Ao usar docker run -p, o docker realmente cria regras DNAT em iptables para implementar a função de encaminhamento de porta.

Você pode usar iptables -t nat -vnL para visualizar.

foto

12.O que é um volume de dados Docker?

Um volume de dados é um diretório especial usado por contêineres e está localizado dentro do contêiner. O diretório do host pode ser montado no volume de dados. As modificações no volume de dados são imediatamente visíveis e os dados atualizados não afetarão o espelho, permitindo assim a migração de dados entre o host e o contêiner. O uso de volumes de dados é semelhante à operação de montagem de diretórios no Linux.

Se você precisar compartilhar alguns dados entre contêineres, a maneira mais fácil é usar um contêiner de volume de dados. O contêiner de volume de dados é um contêiner comum que fornece especificamente volumes de dados para outros contêineres montarem e usarem.

A interconexão de contêineres consiste em estabelecer um túnel de comunicação de rede dedicado entre contêineres por meio do nome do contêiner. Simplificando, um túnel será estabelecido entre o contêiner de origem e o contêiner de recebimento. O contêiner de recebimento poderá ver as informações especificadas pelo contêiner de origem.

13. Como construir um armazém privado Docker

1. Extraia a imagem do armazém privado​​​​​​​

[root@jeames ~]# docker pull registryUsing default tag: latest

2. Inicie o contêiner do armazém privado​​​​​​​

docker run -di --name registry -p 5000:5000 registrydocker update --restart=always registry   --开机自启动docker ps -a  --format "table {
   
   {.ID}}\t{
   
   {.Names}}\t{
   
   {.Status}}"

Visite URL: http://192.168.1.54:5000/v2/_catalog

3. Estabeleça confiança

[root@jeames ~]# vi /etc/docker/daemon.json{
   
   "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],"insecure-registries":["192.168.1.54:5000"]}
[root@jeames ~]# systemctl restart docker   --重启docker

4. Carregue a imagem local​​​​​​​

[root@jeames ~]# docker images[root@jeames ~]# docker tag postgres:11 192.168.1.54:5000/postgres
[root@jeames ~]# docker push 192.168.1.54:5000/postgres

5. Puxe a imagem novamente​​​​​​​

[root@jeames ~]# docker rmi 192.168.1.54:5000/postgres[root@jeames ~]# docker images[root@jeames ~]# docker pull 192.168.1.54:5000/postgres

14.Como o Docker migra backups?

1. Salve o contêiner como uma imagem​​​​​​​

[root@jeames ~]# docker images[root@jeames ~]# docker ps -adocker ps -a --format "table {
   
   {.ID}}\t{
   
   {.Names}}\t{
   
   {.Status}}"[root@jeames ~]# docker commit redis myredis##使用新的镜像创建容器docker run -di --name myredis myredis

2. Backup de espelho

[root@jeames ~]# docker save -o myredis.tar myredis

Por padrão, ele é colocado no diretório atual​​​​​​​

[root@jeames ~]# ll[root@jeames ~]# pwd

3. Processo de recuperação

##删除容器docker ps --format "table {
   
   {.ID}}\t{
   
   {.Names}}\t{
   
   {.Status}}"docker stop myredisdocker rm myredis##删除镜像docker imagesdocker rmi myredis[root@jeames ~]# docker load -i myredis.tar

15. Como o Docker implanta o MySQL?

1. Baixe a imagem
https://hub.docker.com/ 中搜索mysql[root@jeames ~]# docker pull mysql:5.7.30[root@jeames ~]# docker pull mysql:8.0.20
2. Instalação e implantação

2.1 Criar contêiner

mkdir -p /usr/local/mysql5730/mkdir -p /usr/local/mysql8020/
docker run -d --name mysql5730 -h mysql5730 \-p 3309:3306 \-v /usr/local/mysql5730/conf:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai \mysql:5.7.30
docker run -d --name mysql8020 -h mysql8020 \-p 3310:3306 \-v /usr/local/mysql8020/conf:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai \mysql:8.0.20

2.2 Acessar Mysql

##登陆容器docker exec -it mysql5730 bashmysql -uroot -prootmysql> select user,host from mysql.user
##远程访问mysql -uroot -proot -h192.168.59.220 -P3309

Acho que você gosta

Origin blog.csdn.net/lanwilliam/article/details/132880764
Recomendado
Clasificación