Visão geral básica do Docker

 

Índice

editar

1. Introdução ao Docker

2. A diferença entre Docker e máquina virtual

1.1 seis isolamentos de namespace

2. O conceito central do Docker

2.1 Espelhamento

2.2 Recipiente

2.3 Armazém

3. Instale o Docker

3.1 Visualizar informações da versão do docker

4. Operação de imagem Docker

4.1 Espelho de pesquisa

4.2 Obtenha a imagem

4.3 Download acelerado por espelho

4.4 Ver informações da imagem

4.5 De ​​acordo com o número de identificação único da imagem, obtenha as informações detalhadas da imagem

4.6 Adicione um novo rótulo à imagem local

4.7 Excluir imagem

4.8 Salvar a imagem ====: salve a imagem como um arquivo local

4.9 Carregar imagem ====: Importe o arquivo de imagem para a biblioteca de imagens

4.10 Carregar imagem

5. Operação do contêiner Docker

5.1 Visualize o status de execução do contêiner

5.2 Inicie o contêiner

5.3 Crie e inicie o contêiner

5.4 Encerrar operação de contêiner

5.5 Acesso a contêineres

5.6 Copiar para contêiner

5.7 Copiar arquivos do contêiner para o host

5.8 Exportação e importação de contêineres

5.9 Excluir contêiner

5.10 Processamento em lote


1. Introdução ao Docker

      Docker é um mecanismo de contêiner de aplicativos de código aberto, desenvolvido com base na linguagem go e seguindo o protocolo apache2.0 para 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.

      O logotipo do Docker é desenhado como uma baleia azul, arrastando muitos contêineres. A baleia pode ser considerada uma máquina hospedeira, e o contêiner pode ser entendido como um contêiner isolado um do outro, e cada contêiner contém sua própria aplicação.

      O princípio de design do Docker: construir, enviar e executar qualquer aplicativo, em qualquer lugar, ou seja, por meio do gerenciamento do ciclo de vida dos componentes do aplicativo, como empacotamento, publicação, implantação e operação, para atingir o propósito de "um pacote, execute em todos os lugares" no nível do componente do aplicativo. Um componente aqui pode ser um aplicativo, um conjunto de serviços ou até mesmo um sistema operacional completo.

A conteinerização está ganhando popularidade porque os contêineres são:

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

● Leve: O contêiner utiliza e compartilha o kernel do host.

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

● Portátil: pode ser desenvolvido localmente, implantado na nuvem e executado em qualquer lugar.

●Extensível: As réplicas de contêineres podem ser aumentadas e distribuídas automaticamente.

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

O container roda nativamente no Linux e compartilha o kernel do host com outros containers. Ele executa um processo independente e não ocupa a memória de nenhum outro arquivo executável. É muito leve. Uma máquina virtual executa um sistema operacional completo e o acesso virtual aos recursos do host é realizado por meio de um hipervisor, o que requer mais recursos em comparação.

2. A diferença entre Docker e máquina virtual

característica Contêiner Docker máquina virtual
velocidade de inicialização segundo nível nível de minuto
Perda de potência computacional quase nenhum Perda 50%
desempenho perto do nativo mais fraco do que
Suporte do sistema Milhares dezenas de
isolamento Isolamento/limitação de recursos completamente isolado

Os contêineres suportam 2 tecnologias importantes no kernel:

A essência do docker é um processo da máquina host. O Docker implementa isolamento de recursos por meio de namespace, limitação de recursos por meio de cgroup e operação eficiente de arquivos por meio de tecnologia de cópia na gravação (semelhante aos discos de máquinas virtuais, como a alocação de 500g. Na verdade, não ocupam 500g do disco físico).

1.1 seis isolamentos de namespace

espaço para nome Parâmetros de comissionamento do sistema conteúdo de quarentena
UTS CLONE_NEWUTS Nome de host e nome de domínio
PIC CLONE_NEWWIPC Semáforos, filas de mensagens e memória compartilhada
PID CLONE_NEWPID número do processo
REDE CLONE_NEWNET Dispositivos de rede, pilhas de rede, portas, etc.
MONTAGEM CLONE_NEWNS ponto de montagem (sistema de arquivos)
DO UTILIZADOR CLONE_NEWUSER Usuários e grupos de usuários (suportados apenas por kernels após 3.8)

2. O conceito central do Docker

2.1 Espelhamento

As imagens Docker são a base para a criação de contêineres, semelhantes aos instantâneos de máquinas virtuais, e podem ser entendidas como um modelo somente leitura para o mecanismo de contêiner Docker. Inicie um contêiner com 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 é construída com base em um determinado sistema operacional, é fácil construir o mesmo ambiente local e remoto, que é a essência das imagens Docker.

2.2 Recipiente

Um contêiner Docker é uma instância em execução criada a partir de uma imagem, que pode ser iniciada, interrompida e excluída. Cada container criado é isolado e invisível entre si para garantir a segurança da plataforma. O contêiner pode ser considerado uma versão simples do ambiente Linux (incluindo autoridade de usuário root, espaço de espelho, espaço de usuário e espaço de rede, etc.) e os aplicativos em execução nele.

2.3 Armazém

O armazém Docker é usado para armazenar imagens centralmente. Depois de criar sua própria imagem, você pode usar o comando push para carregá-la em um armazém público (Público) ou em um armazém privado (Privado). Na próxima vez que você quiser usar esta imagem em outra máquina, basta obtê-la no repositório.

Imagens, contêineres, logs do Docker, etc. são todos armazenados em /var/lib/docker por padrão

3. Instale o Docker

Atualmente o Docker oferece suporte apenas a sistemas de 64 bits.

systemctl stop firewalld.service
setenforce 0

#安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2 

yum-utils: Fornece a ferramenta yum-config-manager. mapeador de dispositivos: É um mecanismo de mapeamento de dispositivos de uso geral que suporta gerenciamento de volume lógico no kernel Linux. Ele fornece uma arquitetura de kernel altamente modular para implementar drivers de dispositivos de bloco para gerenciamento de recursos de armazenamento.

O driver de armazenamento do mapeador de dispositivos requer dados persistentes do mapeador de dispositivos e lvm2

#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io
docker-ce-20.10.18

systemctl start docker.service

systemctl enable docker.service 

O sistema Docker instalado possui dois programas, o servidor Docker e o cliente Docker. O servidor Docker é um processo de serviço responsável por gerenciar todos os contêineres. O cliente Docker atua como um controlador remoto do servidor Docker, que pode ser usado para controlar o processo do servidor Docker. Na maioria dos casos, o servidor e o cliente Docker são executados na mesma máquina.

3.1 Visualizar informações da versão do docker

docker version

4. Operação de imagem Docker

4.1 Espelho de pesquisa

Formato: palavra-chave de pesquisa do docker

docker pesquisa nginx

4.2 Obtenha a imagem

Formato: nome do repositório docker pull[: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 selecionado é o rótulo mais recente.

docker pull nginx

4.3 Download acelerado por espelho

Acesso ao navegador Login do Alibaba Cloud - Bem-vindo ao Alibaba Cloud, uma plataforma de serviços de computação em nuvem segura e estável

Obtenha a configuração do acelerador de espelho

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["//hqqza5e6.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

4.4 Ver informações da imagem

Após o download da imagem, ela é armazenada em /var/lib/docker. Os recursos locais relacionados ao Docker são armazenados no diretório /var/lib/docker/, onde o diretório containers armazena informações do contêiner, o diretório image armazena informações da imagem e o diretório overlay2 armazena arquivos subjacentes de imagens específicas.

#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json

#查看下载到本地的所有镜像
docker images

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    89da1fb6dcb9   2 weeks ago     187MB
centos       7         eeb6ee3f44bd   23 months ago   204MB
nginx        1.14      295c7be07902   4 years ago     109MB

REPOSITÓRIO: o repositório ao qual a imagem pertence;

TAG: A informação da etiqueta da imagem, marcando diferentes imagens no mesmo armazém;

IMAGE ID: o número de identificação exclusivo da imagem, que identifica exclusivamente uma imagem;

CREATED: hora de criação do espelho;

TAMANHO VIRTUAL: tamanho da imagem;

4.5 De ​​acordo com o número de identificação único da imagem, obtenha as informações detalhadas da imagem

Formato: docker inspeciona número de ID da imagem

docker inspect 89da1fb6dcb9

4.6 Adicione um novo rótulo à imagem local

Formato: nome da tag docker: [tag] novo nome: [nova tag]

docker tag nginx:latest nginx:web

docker images | grep nginx

4.7 Excluir imagem

Formatar:

docker rmi warehouse name: label #Quando um espelho tem vários rótulos, basta excluir o rótulo especificado

ou

docker rmi image ID # excluirá completamente a imagem

Obs: Caso a imagem tenha sido utilizada pelo container, a forma correta é deletar todos os containers que dependem da imagem antes de deletar a imagem.

4.8 Salvar a imagem ====: salve a imagem como um arquivo local

Formato: docker save -o armazena a imagem armazenada no nome do arquivo

docker save -o nginx nginx:latest			#存出镜像命名为nginx存在当前目录下
ls -lh

4.9 Carregar imagem ====: Importe o arquivo de imagem para a biblioteca de imagens

Formatar:

docker load <Arquivo depositado

      ou

O arquivo depositado por docker load -i

docker load < nginx

4.10 Carregar imagem

Por padrão, ele é carregado no armazém público oficial do docker hub e uma conta para usar o armazém público precisa ser registrada. https://hub.docker.com pode usar o comando docker login para inserir o nome de usuário, senha e e-mail para concluir o registro e login. Antes de fazer upload da imagem, você precisa adicionar um novo rótulo à imagem local e, em seguida, usar o comando docker push para fazer upload.

docker tag nginx:latest soscscs/nginx:web		#添加新的标签时必须在前面加上自己的dockerhub的username
docker login								#登录公共仓库
Username:soscscs
password:abc123456
docker push soscscs/nginx:web					#上传镜像

5. Operação do contêiner Docker

Criação de contêiner: É o processo de carregamento da imagem no contêiner.

O contêiner recém-criado está no estado parado por padrão e não executa nenhum programa. Um processo precisa ser iniciado nele para iniciar o contêiner.

Formato: docker create [opções] imagem

Opções comuns:

-i: Diga ao contêiner para abrir a entrada padrão

-t: Deixe o Docker alocar um pseudo-terminal tty

-it: Combinado para realizar a interação com o contêiner, execute um shell de sessão interativo

docker create -it nginx:latest /bin/bash

5.1 Visualize o status de execução do contêiner

docker ps -a #-a 选项可以显示所有的容器

 CONTENTOR ID IMAGEM COMANDO CRIADO STATUS NOMES DE PORTAS

     Número de ID do contêiner Imagem carregada Programa em execução Tempo de criação Status atual Nome do mapeamento da porta

5.2 Inicie o contêiner

Formato: docker start ID/nome do contêiner

docker start 8b0a7be0ff58
docker ps -a

5.3 Crie e inicie o contêiner

Você pode executar diretamente o comando docker run, que equivale a executar primeiro o comando docker create e depois o comando docker start. Nota: O contêiner é um terminal que coexiste com o comando shell em execução nele. O comando executa o contêiner para ser executado e o comando encerra o contêiner para sair.

Por padrão, o contêiner docker usará o primeiro processo dentro do contêiner, ou seja, o programa com pid = 1, como base para saber se o contêiner do docker está em execução.Se o processo com pid = 1 no contêiner do docker for desligado, o contêiner docker sairá diretamente, ou seja, disse que deve haver um processo em primeiro plano no contêiner Docker, caso contrário, o contêiner será considerado desligado

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

(1) Verifique se a imagem especificada existe localmente. Quando o espelho não existir, ele será baixado do repositório público;

(2) Criar e iniciar um container usando a imagem;

(3) Atribuir um sistema de arquivos ao contêiner e montar uma camada de leitura e gravação fora da camada de imagem somente leitura;

(4) Conectar uma interface de máquina virtual da interface de ponte configurada no host host para o contêiner;

(5) Atribuir um endereço IP no pool de endereços ao contêiner;

(6) Execute o programa aplicativo especificado pelo usuário e o contêiner será encerrado após a conclusão da execução.

docker run centos:7 /usr/bin/bash -c ls /
docker ps -a					#会发现创建了一个新容器并启动执行一条 shell 命令,之后就停止了
#在后台持续运行 docker run 创建的容器

Você precisa adicionar a opção -d após o comando docker run para fazer o contêiner do Docker ser executado em segundo plano como um daemon. E o programa em execução no contêiner não pode terminar.

docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"

docker ps -a					#可以看出容器始终处于 UP,运行状态
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS         PORTS     NAMES
2592d3fad0fb   centos:7   "/usr/bin/bash -c 'w…"   2 seconds ago    Up 2 seconds             peaceful_chatelet

docker run -itd --name test1 centos:7 /bin/bash   #创建容器并持续运行容器

5.4 Encerrar operação de contêiner

Formato: docker stop ID/nome do contêiner

docker stop 2592d3fad0fb

docker ps -a

5.5 Acesso a contêineres

Quando precisar entrar no contêiner para operações de comando, você pode usar o comando docker exec para entrar no contêiner em execução.

Formato: docker exec -it ID/nome/bin/bash do contêiner

A opção -i significa manter a entrada do contêiner aberta;

A opção -t diz ao Docker para alocar um pseudoterminal.

docker start 2592d3fad0fb					#进入容器前,确保容器正在运行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit				#退出容器后,容器仍在运行
docker ps -a

docker run -it centos:7 bash      #不加 -d 选项会创建容器后直接进入容器,但是退出容器,容器也会停止

5.6 Copiar para contêiner

echo abc123 > ~/test.txt
docker cp ~/test.txt 2592d3fad0fb:/opt/

5.7 Copiar arquivos do contêiner para o host

docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt

5.8 Exportação e importação de contêineres

Os usuários podem migrar qualquer contêiner Docker de uma máquina para outra. Durante o processo de migração, você pode usar o comando docker export para exportar o contêiner criado como um arquivo, independentemente de o contêiner estar em execução ou parado. O arquivo de exportação pode ser transferido para outras máquinas, e a migração do contêiner pode ser realizada através do comando de importação correspondente.

#导出格式:docker export 容器ID/名称 > 文件名
docker export 2592d3fad0fb > centos7.tar

#导入格式:cat 文件名 | docker import – 镜像名称:标签
cat centos7.tar | docker import - centos7:test			#导入后会生成镜像,但不会创建容器

5.9 Excluir contêiner

Formato: docker rm [-f] ID/nome do contêiner

docker stop 2592d3fad0fb
docker rm 2592d3fad0fb				#删除已经终止状态的容器

docker rm -f 2592d3fad0fb			#强制删除正在运行的容器

5.10 Processamento em lote

docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash			#批量停止容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker stop

docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash				#批量删除所有容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker rm

docker images | awk 'NR>=2{print "docker rmi "$3}' | bash			#批量删除镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi		#删除none镜像

docker rm $(docker ps -a -q)		#批量清理后台停止的容器

おすすめ

転載: blog.csdn.net/m0_71888825/article/details/132274642