Docker 和 Docker Compose 是最重要的。
Docker 和 Docker Compose 是最重要的。
Docker 和 Docker Compose 是最重要的。
使用Docker和Docker Compose可以轻松地完成各种功能,并且在设计和应用程序中遇到困难。您可以在闲暇、尝试和错误中执行一些操作,以了解如何进行错误操作和基本使用。
在Docker中,我们经常会遇到一些令人困惑的问题。
出生前
如果您没有安装Docker,请参阅官方文档,然后安装Docker和Docker Compose,然后使用以下链接:
出于对重要因素的考虑,我们将其分为以下几方面:
第 01 部分 - Dockerfile、图像和容器
您可以使用Docker来Dockerfile使用它。 Embora o guia explique bem as instruções definidas no arquivo eu não conseguia entender muito bem o que eram as imagens eo que eram os容器。
ODockerfile定义 uma imagem。 E o que é uma imagem?图像与执行代码或应用程序的递归响应相结合。 Geralmente a imagem que você Define semper tem outra imagem como base。您可以使用模块中的一些软件包进行操作,node_modules或者在应用程序中使用package,vendor而不是定义任何相关的格式,而是将其添加到功能中。执行应用程序功能的递归服务包,可以作为构建应用程序容器的图像。
Todo container roda em cima de uma imagem , éuma dependentência direta, se tem um container sendo executado tem uma imagem por trás dele.例如,我们的执行官或指挥官elixir -v。 Nós precisamos 定义了 uma imagem能够解释语言 Elixir 和 depois colocar um容器以执行 essa imagem。 Vamos criar o Dockerfilee inserir nele o minimo do minimo para nosso 示例:
FROM elixir:1.10
Agora vamos 构建了一个定义 com o comando 的图像build(mais sobre a --tagdepois):
docker build --tag=elixir:example . # o ponto final é importante!
快点! Temos a imagem criada, você pode converir ela listando as imagens no seu sistema, executandodocker image ls
Agora que temos uma imagem definida、vamos criar nosso 容器和执行者或comando que queremos:
docker run --rm elixir:example elixir -v
很快!图像是使用容器来执行命令并完成任务的,就像一个标志elixir -v一样--rm。
“佩加迪尼亚斯”
Nosso Dockerfileé muito muito simples e nesse caso não precisaríamos ter definido um。 O mesmo resultado pode ser obtido a executar o comando:
docker run --rm elixir:1.10 elixir -v
Agora ao invés rodar um container em cima da imagem que criamos com o docker build ..., rodamos o container tento como base a imagem padrão do Elixir 1.10: elixir:1.10. Já que nossa imagem so tem como dependentência a elixir:1.10cortamos caminho e executamos o container direto com ela.
如果安装了 Elixir,请先了解 Git 的详细信息。 Ai sim declaramos um Dockerfileque reuna as duas dependentências:
FROM elixir:1.10
RUN apt-get update && apt-get install git -y
该图像是有关应用程序必需的连续图像。
E pra fechar essa primeira party,e quanto a essa flag que utilizamos --tag?所有“tageamos”图像均已确定版本和版本,请与Git分支系统进行并行操作。您可以使用任何其他图像来安装该图像。例如,elixir:1.10使用 Elixir 的图像与 1.10 版本的图像具有重要意义,与 Elixir 版本的图像相同,可以在 1.10 版本的图像中执行。
Isso se repete para todas as outras linguagens e recursos: php:7.3, python:3.8, ubuntu:18.04e 等等...
Parte 02 - 容器操作
如果容器是执行者的一部分,请执行以下操作来定义图像,并推荐使用该容器或编辑器。您可以安装或修改容器,但不能更改容器的属性,也不能将容器更改为图像基础。同样,我们还提供了所有准确的调试器、修改器或实验性算法在应用程序中的应用。
Vamos cobrir alguas 操作和基本配置可用于调整应用程序的操作和设置。
2.1 克里安多
Ocomando docker runcria um 容器数据确定图像和 ele ficará la até que você o remova。使用最简单的命令,或者Dockerdocker run elixir:1.10容器以默认方式自动执行,执行或定义图像,或者通过命令输出,而不是通过终端。
Podemos melhorar isso passando alguns para ametros para o comando docker run。
Dê um nome ao seu 容器使用标志--name:
docker run --name=application elixir:1.10
无需手动操作,即可轻松执行容器操作或保存、启动和删除操作,然后选择所需的名称。例如:
docker start application
docker stop application
docker exec application {command}
使用标志在分离模式下执行容器-d:
docker run --name=application -d elixir:1.10
集装箱的初始信息将继续在第二个平面、自由度或 seu 码头上进行。 Provavelmente você vai usar muito essa 旗帜。您可以确认容器的实际状态docker ps,并继续执行操作。
Exponha uma porta de rede de seu 集装箱与旗帜相连--expose。
docker run --name=application --expose 4000 -d elixir:1.10
将集装箱装在出口处以4000接收货物。 Provavelmente vai vai export a porta que sua aplicação está ouvindo。您可以通过以下方式来请求容器,localhost例如:请求容器http://localhost:4000。
docker run --name=application -p 4000:4000 -d elixir:1.10
一面旗帜-p 4000:4000显示在集装箱门4000上。4000继续-p host_port:container_port。
重要的是容器的密封性-p和暴露性--expose之间存在差异。集装箱门的出口,如果是在集装箱上,则需要在集装箱上安装,如果需要的话,可以通过以下方式解决:http://localhost:4000fazemos o request assim: http://{container_ip}:4000. Demorei um tempo para entender isso!
2.2 成熟
整个容器是在持续时间或发展过程中执行的操作。作为应用程序日志的预览,修改算法,修改算法,enfim...在发展过程中遇到的问题。
Vamos supor que criamos 或容器后续或前主题示例:
docker run --expose 4000 -d --name application elixir:1.10
容器中的应用程序日志是发送给容器的,一般执行器是这样的:
docker logs application
执行以下操作:记录存在的 seu 集装箱,并存在 seu 码头。只要应用一个标志,就可以从终端“ escutando ”日志中获得新的日志。 -f
docker logs application -f
Melhorando um pouco mais,podemos filtrar o 输出最初的命令com a quantidade de linhas que quiser ver。 Fazemos isso com 一个标志--tail=number。
docker logs application -f --tail=10
将容器日志保存为最后 10 行。
在容器中进行“ssh 登录”操作。后续命令的使用方法:
docker exec -it application bash
请注意“ssh 登录”。您可以修改输入终端的所有命令,然后将程序启动到容器中,然后再进行操作bash。通过 seu 终端将容器输出。都多伊索埃费托佩拉斯旗帜-it。
Você pode rodar comandos para o seu 容器 sem essas 标志。阿尔古玛斯应用程序将日志保存在没有终端的情况下,然后将其保存为docker exec以下形式:
docker exec application tail -f /path/to/log_file
我们讨论了图像和容器之间的差异,以及基本的操作,让我们了解Docker Compose。
第 03 部分 - Docker Compose não é Docker
最重要的是,Docker Compose和Docker是不同的!
总结Docker Compose和容器管理功能。
总体而言,微服务并不是所有的应用程序的后代,而是将不同的应用程序分开,就像不同程序的语言一样。由于分开、详细说明,您可以指定图像和容器的功能。
Mesmo se sua aplicação for um monolito, a opportunity de você utilizar um banco de bados, web server, redis and outras tecnologias for a sua aplicação é grande or que “força” você a dividir cadavez mais em emores que sejam responsáveis somente por uma tarefa.
是的,您可以使用单一的应用程序,但可以连接到dados银行,或者与应用程序和其他银行的理想容器相连接,这是什么? com o que vimos atéagora você poderia criar esses dois 容器rodando o docker runcom especações um pouco differenterentes。
您可以使用 Nginx 上的银行应用程序进行操作。 Ai você teria que criar mais um 容器。您是否知道一个复杂的现代容器“soltos”是如何实现应用程序功能的?由于新月复合体的原因,您可以选择以下几个场景:
3.1 独立容器的所有事项
您可以docker run在终端上找到该终端,但不能使用该终端。破坏和修改容器可以通过其功能来实现。
功能、使用方法、想象一下不同应用程序的不同容器。我的声音docker run ...、、、声音都来自于 com标志和不同的图像……我的声音是这样的,没有docker run ...trabalho desse 方法。docker run ...docker run ...docker run ...
3.2 Agregar todas as tecnologias em uma única imagem
您可以通过以下方式了解我们的情况:依赖于您的需求。 Parce interessante,certo?
想象一下必要的配置,但不能使用应用程序Dockerfile、银行银行、网络服务器等。但Dockerfile要实现巨大的扩展却很难。安装时请注意不要自行设置计算机。 Bem cansativo também。
任何事情或环境中的发展或同源的不良行为,都可以想象为生产服务者。例如,AWS 可以使用 EC2 的银行账户,而不是您的想法。使用Docker进行开发,您可以使用它。
3.3 Criar 和 docker-compose.yml
Essa provavelmente é a melhor abordagem para gerenciar 各种容器依赖项。我们已声明docker-compose.yml我们已就该容器的开发和操作进行了沟通。
这个主题非常广泛,并且详细地阐述了与艺术相关的部分。
第 04 部分 - Docker Compose
Docker Compose是一种与现代容器相关的工具,它依赖于其他容器。不声明容器和参数是 um arquivo chamado docker-compose.yml。
需要注意的是,您可以使用以下三个部分:使用 Phoenix(以及Elixir 的Web 框架)、Nginx 和 Postgres 银行。
Dado esse cenário,vamos criar um docker-compose.ymlcapaz de definir 3 个不同的容器,用于与计算机技术相关的所有环境,并且可以在对话中使用不同的容器。
4.1 Criando 或 docker-compose.yml
预先准备好 3 个容器的预付款:
version: "3.7"
services:
app:
build: .
command: "mix phx.server"
nginx:
image: nginx:1.17
postgres:
image: postgres:9.5
version大多数情况下,bloco 都docker-compose可以使用 blocoservices声明 3 个容器:app、nginx 和 postgres。 Cada serviceé um bloco indenpendente com as próprias declarações。
没有声明任何服务app条款。最初和build: .声明定义了构建容器开发工具的用途,并且开发Dockerfile工具没有直接指示或存放docker-compose.yml。对于应用程序容器的服务代表,我们将声明有关应用程序相关图像的重现Dockerfile。
没有任何服务、nginx 和 postgres,不能用声明来build替代image。我们将介绍如何Dockerfile构建 Nginx 的镜像和构建 Postgres 的镜像,我们将在未来使用该镜像,以便Docker Hub能够为我们提供未来的技术。
您可以声明与DockerfilesCADA 服务不同,但是没有必要,因为图像与技术nginx:1-17相关postgres:9.5。
app这是最后的声明command。mix phx.server凤凰城的指挥官们对最初的行动做出了回应。 Assim,所有集装箱很快就会被执行,并启动应用程序。
请勿使用command其他服务点作为图像中的图像来提供服务的初始部分。
4.2 完善我们的服务
4.2.1 应用程序
儿童定义的主题不是前部主题,也不是预知的主题,而是有关应用程序和容器的方面。有关应用程序的详细信息,请参阅“卷”以获取容器和容器中的存储位置,通过配置,定义工作目录以方便执行应用程序的命令。
下列事项的必要条件、修改顺序app:
app:
build: .
container_name: "app"
volumes:
- ./:/var/www/application/
working_dir: "/var/www/application/"
expose:
- "4000"
command: "mix phx.server"
Como vimos anteriormente exposeexpõe a porta 4000docontainer para que ela receba tráfego.working_dir定义你的路径,以确保你的/var/www/application/任务顺利执行。执行程序的容器mix phx.server或执行程序的最后一个命令,执行程序不会直接执行/var/www/application/。
Oé container_namebasicamente isso,estamos definindo um nome para nosso 容器。
最后volume,声明“ligação”com 或 主机(主机)com 或容器目录。 Então,nós estamos “ligando” 或 diretório em que o docker-compose.ymlestá ./com o diretório /var/www/application/dentro do 容器。完成所有待办事项,但没有结尾。
4.2.2 Nginx 和 Postgres
总结一下与剩余服务互补的定义docker-compose.yml:
nginx:
image: nginx:1.17
container_name: "nginx"
volumes:
- ./nginx:/etc/nginx/conf.d
ports:t
- "80:80"
volume有关与容器相关的 Nginx 配置的附加信息。 E por último adicionamos o portque vai vinulous o nosso localhostao container do nginx。准备好,永远是 um 请求http://localhost,并为您的容器提供服务,nginx以便为您提供容器请求app,并按照意大利面的配置进行操作./nginx。
最后,完成 Postgres 的定义
postgres:
image: postgres:9.5
container_name: "postgres"
volumes:
- ./postgres:/var/lib/postgres
environment:
- POSTGRES_DB=your_db
- POSTGRES_USER=your_user
- POSTGRES_PASSWORD=your_secret
ports:
- "5432:5432"
新描述environment。 com ela você adiciona env 变量a seu 容器。作为 Postgres 配置银行、银行和服务的各种额外服务。
Vinculamos 与portsPostgres com 一样,都是主机,有助于连接银行的容器。 Dessa forma,se você possui algum programa para gerenciar banco de bados,例如,便利连接 esse 容器。
4.3 完成 docker-compose.yml
Se você seguiu esse guia até agora, a versão Final do seu docker-compose.ymlserá assim:
version: "3.7"
services:
app:
build: .
container_name: "app"
volumes:
- ./:/var/www/application/
working_dir: "/var/www/application/"
expose:
- "4000"
command: "mix phx.server"
nginx:
image: nginx:1.17
container_name: "nginx"
volumes:
- ./nginx:/etc/nginx
ports:
- "80:80"
postgres:
image: postgres:9.5
container_name: "postgres"
volumes:
- ./postgres:/var/lib/postgres
environment:
- POSTGRES_DB=your_db
- POSTGRES_USER=your_user
- POSTGRES_PASSWORD=your_secret
ports:
- "5432:5432"
Agora que temos o nosso arquivo do docker-composeconfigurado, vamos ver como utilizá-lo!
第 05 部分 - Usando o Docker Compose
没有主题前定义 um docker-compose.ymlcom três 容器para nossa aplicação ser executada, porém para que tudo funcione nesse momento, vamos fazer pequenas alterações na declaração do nosso service app:
app:
image: elixir:1.10
container_name: "app"
volumes:
- ./:/var/www/application/
working_dir: "/var/www/application/"
expose:
- "4000"
tty: true
与此应用程序相同,Phoenix 即将到来,您mix phx.server也无法使用它的功能,也无法使用容器。
替换为 um 容器 criado 部分 de uma 图像 padrão de Elixirelixir:1.10和 trocamos 声明commandpor tty。tty声明容器将在第二个计划中执行,并且是执行的命令。
volume对维修中的故障和去除剂进行额外修改nginx。与应用程序相同,也不需要配置 Nginx 来旋转或传输容器。
总结,或者新docker-compose.yml要求:
version: "3.7"
services:
app:
image: elixir:1.10
container_name: "app"
volumes:
- ./:/var/www/application/
working_dir: "/var/www/application/"
expose:
- "4000"
tty: true
nginx:
image: nginx:1.17
container_name: "nginx"
ports:
- "80:80"
postgres:
image: postgres:9.5
container_name: "postgres"
volumes:
- ./postgres:/var/lib/postgres
environment:
- POSTGRES_DB=your_db
- POSTGRES_USER=your_user
- POSTGRES_PASSWORD=your_secret
ports:
- "5432:5432"
Feito isso podemos colocar todos esses 容器 para rodar com o comando
docker-compose up -d
Docker可以让您有效地执行任务,并可以将其作为yml容器的镜像来执行。在此之前,我们将向您展示最后的自由旗帜,并得出结论-d。
最初,我们将执行一项计划,以表达我们的意愿。 Docker可以帮助您准备好所有容器的映像,并依赖互联网或计算机来完成这些任务。
Feito isso o Docker começa a criar osContainers na order and inicializá-los.请使用 criados com 容器列表docker ps。 O 输出命令将执行容器中所有待办事项,并为-a容器中存在的所有待办事项添加一个标志。
Docker Compose 的主要操作人员列表:
容器操作系统:
docker-compose stop
删除待办事项操作系统容器:
docker-compose rm -f
待办事项操作系统容器的供应或日志:
docker-compose logs -f
构建操作系统容器的初始方式:
docker-compose build
Vale ressaltar que osContainers criados pelo comando docker-composesão“comuns”, sendo assim os outros de Docker Também são válidos.您可以在特定的容器中执行并重新执行。
第 06 部分 - 容器之间的交互
Teoricamente、todos os 容器 que criamos no 主题前部 fazem 部分 da mesma 应用程序和 por isso precisam se comunicar。使用 criamos 容器,可以docker-compose使用其他容器,而不是其他容器。 Uma das mais importantes é网络。
与2.x所有待办事项的容器和所有待办事项的容器相关的所有事项docker-compose.yml均以 uma mesma networkcom 名称为juntavam 进行default。与此相反3.x,您可以按照docker-compose.yml自己的方式进行操作network。 O docker-composenomeia a networkdo arquivo docker-compose.ymlutilizando o nome do diretório concatenado com a string _default。
networkDocker主题是一个广泛的主题,是您奉献后的主题。您可以通过以下方式来确定装运的具体情况,以及装运集装箱的容器,但我们无法与您进行通信3.x。可能已经连接了,但我们无法找到它。docker-composenetworkdocker-compose.ymlnetwork
Enfim,所有这些容器都可以通过简单的方式进行通信network。 Docker为操作系统容器提供了方便的“DNS”服务。 Vamos 使用 Postgres 容器作为示例。如果您使用 Postgres 的容器,请使用容器名称,而不是主机上的银行应用程序。简单阿西姆!
无法看到重要的重要参数。 Certifique-se de que a porta correta esteja exposta ( expose) nocontainer desejado e que o request está sendoenvado para aquela porta!
结论
想要了解发展的动力! Lidar com 或Docker Pode Ser complicado no começo,mas é uma excelente ferramenta para cuidar de umpedaço muito importante da aplicação geralmente deixamos passar:基础设施!
你可以使用Docker来构建 primorosa 的 trabalho,并且可以轻松地进行各种操作!所以,我要向你伸出援手!
Obrigado pelo seu tempo e ate a próxima 🖖
鏂囩珷鏉ユ簮锛�https://dev.to/ingresse/docker-e-docker-compose-um-guia-para-iniciantes-48k8
后端开发教程 - Java、Spring Boot 实战 - msg200.com