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:
Conte uma historia
Máquina virtual e contêiner
compreensão
Docker
Conceito chave
instalação
Docker
Começo rápido
Operação de rotina
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.
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 CMOS
disco 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 dezenasGB
de espaço, enquanto os contêineres precisam apenas serMB
nivelados ou mesmoKB
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
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 Container
e 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 Cgroups
estã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
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:
clone: clone um projeto
build: imagem do pacote
run: executa a instância
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 significadist
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 paraetc/nginx/conf.d/default.conf
,default.conf
substituaNginx
a configuração padrão no espelho pela configuração local .
6. Construa a imagem para construir a imagem Docker
por meio do build
comando:
docker build -t jartto-docker-demo .
Por convenção, explicamos o código acima:
-t
Nome do parâmetro para espelharjartto-docker-demo
.
É baseado no diretório atualDockerfile
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, a3000
porta para a qualcontainer
a80
porta da máquina é mapeada (de modo que a rede externa possa ser acessada através da3000
porta da máquina--name
Definir o nome do contêinerdocker-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 login
e digite a senha da nossa conta para fazer o login;Antes de enviar a imagem, você precisa digitar um
Tag
e executardocker 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:
Require
Seja claro: qual espelhamento é necessárioEtapas simplificadas:
Step
prioridade com menos alteraçõesVersão clara: nomenclatura clara da imagem
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实战项目