O melhor guia para começar a usar o Docker, este é o melhor tutorial que já vi!

Clique na fonte azul acima e selecione "Conta oficial da estrela"

Artigos de alta qualidade, entregues imediatamente

Siga a conta oficial nos bastidores para responder a pagar ou shopping para obter informações reais do projeto + vídeo

Autor: jartto

Fonte: jartto.wang/2020/07/04/learn-docker/

Na Web era rica  , os aplicativos se tornaram mais poderosos e, ao mesmo tempo, cada vez mais complexos. A implantação de cluster, ambiente isolado, liberação em tons de cinza e expansão dinâmica são indispensáveis, e a conteinerização se tornou uma ponte necessária entre os dois.

Nesta seção, exploraremos  Docker o mundo misterioso, dominaremos Docker os princípios básicos e as operações práticas de zero a um  . Pare de proteger os três quartos de um acre na extremidade dianteira, é hora de expandir o território.

Vamos nos concentrar nos seguintes pontos:

  1. Conte uma historia

  2. Máquina virtual e contêiner

  3. compreensão Docker

  4. Conceito chave

  5. instalação Docker

  6. Começo rápido

  7. Operação de rotina

  8. Melhores Práticas

1. Conte uma história

Para entender melhor  Docker o que é, primeiro vamos contar uma história:

Preciso construir uma casa, então movo pedras, corto lenha, desenho plantas e construo uma casa. Após uma operação, a casa foi finalmente construída.

Como resultado, depois de morar um pouco, quis me mudar para a praia por capricho. Nesse momento, de acordo com o método anterior, só posso ir à praia, mover pedras, cortar lenha, fazer desenhos e reconstruir as casas.

Quando eu estava preocupado, um mágico veio me ensinar um tipo de magia. Esse tipo de mágica pode fazer uma cópia da casa que construí, torná-la um "espelho" e colocá-la na minha mochila.

img

Magia negra

Quando chego à praia, uso este "espelho" para copiar uma casa e ir morar com as minhas malas.

Não é incrível? Correspondendo ao nosso projeto, a casa é o próprio projeto, o espelho é a cópia do projeto e a mochila é o armazém de espelhos. Se você deseja expandir a capacidade dinamicamente, retire a imagem do projeto do warehouse e copie-a à vontade. Construa uma vez, execute em qualquer lugar!

Não precisa mais se preocupar com questões como versão, compatibilidade, implantação, etc., e resolver completamente o constrangimento de "travar quando estiver online, construção sem fim".

Dois, máquinas virtuais e contêineres

Antes de começar, vamos fazer algumas reservas de conhecimento básico:

1. Máquina virtual : hardware virtualizado

Uma máquina virtual  Virtual Machine se refere a um sistema de computador completo com funções de sistema de hardware completas que é simulado por software e executado em um ambiente completamente isolado . O trabalho que pode ser feito no computador físico pode ser realizado na máquina virtual.

Ao criar uma máquina virtual em um computador, parte da capacidade do disco rígido e da memória da máquina física precisa ser usada como o disco rígido e a capacidade da memória da máquina virtual. Cada máquina virtual tem seu próprio  CMOSdisco rígido e sistema operacional e pode operar na máquina virtual como uma máquina física . Antes da tecnologia de contêiner, os influenciadores da indústria eram máquinas virtuais.

Em nome da tecnologia de máquina virtual, são  VMWare e  OpenStack.

2. Contêiner : virtualiza a camada do sistema operacional e é uma unidade de software padrão

  • Executar em qualquer lugar: o contêiner pode empacotar o código com arquivos de configuração e bibliotecas dependentes relacionadas para garantir uma operação consistente em qualquer ambiente.

  • Alta utilização de recursos: o contêiner fornece isolamento em nível de processo, para que você possa definir com mais precisão o  CPU uso de memória e fazer melhor uso dos recursos de computação do servidor.

  • Expansão rápida: cada contêiner pode ser executado como um processo separado e pode compartilhar os recursos do sistema do sistema operacional subjacente, o que pode acelerar a eficiência de inicialização e parada do contêiner.

3. Diferenças e conexões

  • Embora as máquinas virtuais possam isolar muitos "computadores filhos", elas ocupam mais espaço e iniciam mais lentamente. O software da máquina virtual também pode custar dinheiro, por exemplo VMWare;

  • A tecnologia de contêiner não precisa virtualizar todo o sistema operacional, apenas um ambiente de pequena escala, semelhante a uma "caixa de areia";

  • Espaço operacional, as máquinas virtuais geralmente requerem alguns  GB a dezenas  GB de espaço, enquanto os contêineres precisam apenas ser  MB nivelados ou mesmo  KB nivelados;

Vamos dar uma olhada nos dados comparativos:

Em comparação com as máquinas virtuais, os contêineres são mais leves e rápidos porque usam o  Linux sistema operacional subjacente para serem executados em um ambiente isolado. A máquina virtual  Hypervisor cria um limite muito forte para evitar que o aplicativo o ultrapasse, enquanto o limite do contêiner não é tão forte.

A implantação da máquina física não pode fazer uso total dos recursos, resultando em desperdício de recursos. Com a implantação da máquina virtual, a própria máquina virtual consumirá muitos recursos, resultando em desperdício de recursos, e o desempenho da máquina virtual também é muito ruim. A implantação em contêiner é mais flexível, leve e tem melhor desempenho.

As máquinas virtuais são tecnologias de virtualização e tecnologias de contêiner, como Docker, são virtualização leve.

Três, conheça o Docker

img

Docker

1. Conceito

Docker É um mecanismo de contêiner de aplicativo de código aberto que permite aos desenvolvedores empacotar seus aplicativos e pacotes dependentes em um contêiner portátil e publicá-lo em qualquer Linux máquina popular  , que também pode ser virtualizada. Os contêineres usam o mecanismo de sandbox completamente e não haverá interfaces entre eles.

Docker Os três conceitos básicos de tecnologia são: espelhamento  Image, contêiner  Containere warehouse Repository.

2. Docker O motivo de ser leve?

Acredito que você também terá essas dúvidas: Por que o  Docker startup é rápido? Como compartilhar o kernel com o host?

Quando solicitamos a  Docker execução do contêiner, Docker um ambiente isolado de recursos será configurado no computador. Em seguida, copie o aplicativo empacotado e os arquivos associados para o  Namespace sistema de arquivos interno.Neste momento, a configuração do ambiente está concluída. Depois  Docker disso, o comando pré-especificado será executado para rodar o aplicativo.

A imagem não contém nenhum dado dinâmico e seu conteúdo não será alterado após sua construção.

Quarto, o conceito central

1. Build, Ship and Run(Instalação, transporte, operação);

2. Build once, Run anywhere(Construa uma vez, execute em qualquer lugar);

3. Docker Não é um contêiner em si, é uma ferramenta para criar um contêiner e um mecanismo de contêiner de aplicativo;

4. Os Docker três conceitos principais são: espelhamento  Image, contêiner  Container, armazém  Repository;

5. A Docker tecnologia usa o  Linux kernel e as funções do kernel (como  Cgroups e  namespaces) para separar processos para que cada processo seja executado independentemente um do outro.

6. Como as   funções Namespace e  Cgroupsestão Linux disponíveis apenas  na Internet, o contêiner não pode ser executado em outros sistemas operacionais. Então,  Docker como é que  ele correr em  macOS ou  Windows? Docker Na verdade, usei um truque Linux para instalar uma Linux máquina virtual em um sistema não  operacional  e, em seguida, executar o contêiner dentro da máquina virtual.

7. A imagem é um pacote executável que contém o código, tempo de execução, bibliotecas, variáveis ​​de ambiente e arquivos de configuração necessários para executar o aplicativo.O contêiner é a instância de tempo de execução da imagem .

Cinco, instale o Docker

1. Instalação de linha de comando

Homebrew O  Cask já compatível  Docker for Mac, para que você possa usar facilmente  Homebrew Cask para instalar, execute o seguinte comando:

brew cask install docker

Para mais métodos de instalação, verifique o documento oficial:

https://www.docker.com/get-started

2. Ver versão

docker -v  

3. Configure a aceleração do espelho

Defina a configuração de gravação do Docker Engine:

{
  "registry-mirrors": [
    "http://hub-mirror.c.163.com/",
    "https://registry.docker-cn.com"
  ],
  "insecure-registries":[],
  "experimental": false,
  "debug": true
}

4. Instale o desktop

img

Desktop Docker

A operação do desktop é muito simples, primeiro acesse o site oficial para fazer o download. Por meio do  Docker terminal de desktop, podemos operar convenientemente:

  1. clone: ​​clone um projeto

  2. build: imagem do pacote

  3. run: executa a instância

  4. compartilhar: compartilhar espelho

Ok, os preparativos estão prontos, agora você pode mostrar suas habilidades!

Seis, comece rápido

Após a instalação  Docker , primeiro fazemos uma imagem espelhada do projeto real e a usamos enquanto aprendemos.

1. Primeiro, precisamos obter uma compreensão geral   dos comandos que usaremos11

2. Novo projeto

Para sermos rápidos, usamos Vue andaimes diretamente para construir o projeto:

vue create docker-demo  

Tente iniciá-lo:

yarn serve  

http://localhost:8080/Endereço de acesso :. O projeto está pronto, então o empacotamos:

yarn build  

Neste momento, Dist os recursos estáticos que queremos implantar estão no diretório do projeto  e continuamos para a próxima etapa.

Observação : os projetos de front-end geralmente são divididos em duas categorias, uma é Nginx implantada diretamente  estaticamente e a outra requer que os Node serviços sejam iniciados  . Nesta seção, consideramos apenas o primeiro.

3. Novo Dockerfile

cd docker-demo && touch Dockerfile  

O diretório do projeto neste momento é o seguinte:

.  
├── Dockerfile  
├── README.md  
├── babel.config.js  
├── dist  
├── node_modules  
├── package.json  
├── public  
├── src  
└── yarn.lock  

Você pode ver que criamos com docker-demo sucesso um Dockerfile arquivo no  diretório  .

4. Prepare o  Nginx espelho

Execute seu  Docker desktop, ele irá iniciar a instância por padrão, puxamos a Nginx imagem no console  :

docker pull nginx  

As seguintes informações aparecerão no console:

Using default tag: latest
latest: Pulling from library/nginx
8559a31e96f4: Pull complete
8d69e59170f7: Pull complete
3f9f1ec1d262: Pull complete
d1f5ff4f210d: Pull complete
1e22bfa8652e: Pull complete
Digest: sha256:21f32f6c08406306d822a0e6e8b7dc81f53f336570e852e25fbe1e3e3d0d0133
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

Se você tiver essa exceção, confirme  Docker se a instância está funcionando normalmente.

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?  

Para se preparar para o espelhamento  OK, criamos um Nginx arquivo de configuração no diretório raiz  :

touch default.conf  

Escrever:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

5. Configure o espelhamento

Abra  Dockerfile e escreva o seguinte:

FROM nginx  
COPY dist/ /usr/share/nginx/html/  
COPY default.conf /etc/nginx/conf.d/default.conf  

Vamos explicar o código linha por linha:

  • FROM nginx Especifique que a imagem é nginx:latest construída com base na  imagem;

  • COPY dist/ /usr/share/nginx/html/ O comando significa dist copiar todos os arquivos da pasta no diretório raiz do projeto para o diretório  no espelho  /usr/share/nginx/html/ ;

  • COPY default.conf /etc/nginx/conf.d/default.conf Será  default.conf copiado para  etc/nginx/conf.d/default.conf, default.conf substitua  Nginx a configuração padrão no espelho pela configuração local  .

6. Construa a imagem  para construir a imagem Docker por meio do  buildcomando:

docker build -t jartto-docker-demo .  

Por convenção, explicamos o código acima:

  • -t Nome do parâmetro para espelhar jartto-docker-demo

  • . É baseado no diretório atual  Dockerfile para construir um espelho

Após a execução bem-sucedida, a saída será:

Sending build context to Docker daemon  115.4MB
Step 1/3 : FROM nginx
 ---> 2622e6cca7eb
Step 2/3 : COPY dist/ /usr/share/nginx/html/
 ---> Using cache
 ---> 82b31f98dce6
Step 3/3 : COPY default.conf /etc/nginx/conf.d/default.conf
 ---> 7df6efaf9592
Successfully built 7df6efaf9592
Successfully tagged jartto-docker-demo:latest

O espelho foi feito com sucesso! Vamos dar uma olhada no contêiner:

docker image ls | grep jartto-docker-demo  

Como você pode ver, digitamos um  133MB espelho do projeto:

jartto-docker-demo latest 7df6efaf9592 About a minute ago 133MB  

O espelhamento também é bom ou ruim. Apresentaremos como otimizá-lo mais tarde, o que pode ser ignorado por enquanto.

7. Execute o contêiner

docker run -d -p 3000:80 --name docker-vue jartto-docker-demo  

Explique os parâmetros aqui:

  • -d Defina o contêiner para ser executado em segundo plano

  • -p Representa o mapeamento de porta, a 3000 porta para a qual container a  80 porta da máquina é  mapeada  (de modo que a rede externa possa ser acessada através da 3000 porta da máquina 

  • --name Definir o nome do contêiner docker-vue

  • jartto-docker-demo É o nome da imagem que construímos acima

Adicione isto: No console, podemos  docker ps ver apenas  Container um  ID:

docker ps -a  

O console produzirá:

CONTAINER ID IMAGE              COMMAND                  CREATED       STATUS PORTS  NAMES
ab1375befb0b jartto-docker-demo "/docker-entrypoint.…"   8 minutes ago Up 7 minutes  0.0.0.0:3000->80/tcp  docker-vue

Se você usa a área de trabalho, Docker Dashboard pode ver a lista de contêineres ao abri-  la, conforme mostrado na figura abaixo:

8. Visite o projeto

Como mapeamos a 3000 porta local  , execute:

curl -v -i localhost:3000  

Ou abra o navegador e visite:localhost:3000

9. Publique a imagem

Se você quiser contribuir com a comunidade, precisará publicar a imagem para a conveniência de outros desenvolvedores.

As seguintes etapas são necessárias para publicar um espelho:

  • Faça login  [dockerhub](https://hub.docker.com)e registre uma conta;

  • Execute a linha de comando  docker logine digite a senha da nossa conta para fazer o login;

  • Antes de enviar a imagem, você precisa digitar um  Tage executar docker tag <image> <username>/<repository>:<tag>

Depois que todo o processo terminar, vamos usá-lo no futuro. Não precisamos mais "mover pedras, cortar lenha, desenhar desenhos e construir casas" e entrar com sacos. Este também é o  docker charme único.

Sete, operações convencionais

Aqui, parabéns Docker pelo projeto introdutório que você concluiu  ! Se você ainda quiser se aprofundar, é melhor olhar para baixo.

1. Uso de parâmetros

FROM:
#指定基础镜像,所有构建的镜像都必须有一个基础镜像,且 FROM 命令必须是 Dockerfile 的第一个命令
FROM <image> [AS <name>] 指定从一个镜像构建起一个新的镜像名字
FROM <image>[:<tag>] [AS <name>] 指定镜像的版本 Tag
示例:FROM mysql:5.0 AS database

MAINTAINER:
#镜像维护人的信息
MAINTAINER <name>
示例:MAINTAINER Jartto [email protected]

RUN:
#构建镜像时要执行的命令
RUN <command>
示例:RUN [executable, param1, param2]

ADD:
#将本地的文件添加复制到容器中去,压缩包会解压,可以访问网络上的文件,会自动下载
ADD <src> <dest>
示例:ADD *.js /app 添加 js 文件到容器中的 app 目录下

COPY:
#功能和 ADD 一样,只是复制,不会解压或者下载文件

CMD:
#启动容器后执行的命令,和 RUN 不一样,RUN 是在构建镜像是要运行的命令
当使用 docker run 运行容器的时候,这个可以在命令行被覆盖
示例:CMD [executable, param1, param2]

ENTRYPOINT:
#也是执行命令,和 CMD 一样,只是这个命令不会被命令行覆盖
ENTRYPOINT [executable, param1, param2]
示例:ENTRYPOINT [donnet, myapp.dll]

LABEL:
#为镜像添加元数据,key-value 形式
LABEL <key>=<value> <key>=<value> ...
示例:LABEL version=1.0 description=这是一个web应用

ENV:
#设置环境变量,有些容器运行时会需要某些环境变量
ENV <key> <value> 一次设置一个环境变量
ENV <key>=<value> <key>=<value> <key>=<value> 设置多个环境变量
示例:ENV JAVA_HOME /usr/java1.8/

EXPOSE:
#暴露对外的端口(容器内部程序的端口,虽然会和宿主机的一样,但是其实是两个端口)
EXPOSE <port>
示例:EXPOSE 80
容器运行时,需要用 -p 映射外部端口才能访问到容器内的端口

VOLUME:
#指定数据持久化的目录,官方语言叫做挂载
VOLUME /var/log 
#指定容器中需要被挂载的目录,会把这个目录映射到宿主机的一个随机目录上,实现数据的持久化和同步
VOLUME [/var/log,/var/test.....] 
#指定容器中多个需要被挂载的目录,会把这些目录映射到宿主机的多个随机目录上,实现数据的持久化和同步

VOLUME /var/data var/log 
#指定容器中的 var/log 目录挂载到宿主机上的 /var/data 目录,这种形式可以手动指定宿主机上的目录

WORKDIR:
#设置工作目录,设置之后 ,RUN、CMD、COPY、ADD 的工作目录都会同步变更
WORKDIR <path>
示例:WORKDIR /app/test

USER:
#指定运行命令时所使用的用户,为了安全和权限起见,根据要执行的命令选择不同用户
USER <user>:[<group>]
示例:USER test

ARG:
#设置构建镜像是要传递的参数
ARG <name>[=<value>]
ARG name=sss

Para mais operações, vá para a documentação oficial:

https://docs.docker.com/

8. Melhores práticas

Depois de dominar as  Docker operações normais, podemos criar facilmente o espelho do projeto que desejamos. No entanto, as imagens produzidas por diferentes operações também são muito diferentes.

O que causa a diferença da imagem espelhada, podemos continuar a explorar.

A seguir estão Docker as melhores práticas no processo de inscrição  , siga as seguintes diretrizes tanto quanto possível:

  1. Require Seja claro: qual espelhamento é necessário

  2. Etapas simplificadas: Step prioridade com menos alterações 

  3. Versão clara: nomenclatura clara da imagem

  4. Documentação: todas as etapas de embalagem da imagem podem ser reproduzidas

Nove, resumo

A tecnologia de conteinerização deve ser uma das habilidades indispensáveis ​​na era da nuvem, mas  Docker apenas uma gota no oceano. Seguiu-se uma gestão de contentores aglomerado  K8s, Service Mesh , Istio e outras tecnologias. Abra  Docker a porta, continue a descascar o casulo e vá mais fundo um a um , você sentirá o encanto infinito da conteinerização.

Apresse-se e abra o limite de habilidades e capacite sua tecnologia de front-end!




有热门推荐????
再见,xShell,自己用Java撸一个Web版的,网友直呼:6662020 国内互联网公司的薪酬排名,加班时长排名 !IDEA这样 配置注释模板,让你高出一个逼格!!
Java后端线上问题排查常用命令收藏SpringBoot+Prometheus+Grafana实现应用监控和报警10个解放双手实用在线工具,有些代码真的不用手写!微信小程序练手实战:前端+后端(Java)
又一神操作,SpringBoot2.x 集成百度 uidgenerator搞定全局ID为什么要在2021年放弃Jenkins?我已经对他失去耐心了...

点击阅读原文,前往学习SpringCloud实战项目

Acho que você gosta

Origin blog.csdn.net/qq_17231297/article/details/115019223
Recomendado
Clasificación