Docker 和 Docker Compose 是最重要的。 Docker 和 Docker Compose 是最重要的。

2025-06-09

Docker 和 Docker Compose 是最重要的。

Docker 和 Docker Compose 是最重要的。

Docker 和 Docker Compose 是最重要的。

使用DockerDocker Compose可以轻松地完成各种功能,并且在设计和应用程序中遇到困难。您可以在闲暇、尝试和错误中执行一些操作,以了解如何进行错误操作和基本使用

在Docker中,我们经常会遇到一些令人困惑的问题

出生前

如果您没有安装Docker,请参阅官方文档,然后安装DockerDocker Compose,然后使用以下链接:

出于对重要因素的考虑,我们将其分为以下几方面:


第 01 部分 - Dockerfile、图像和容器

您可以使用DockerDockerfile使用它。 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或者在应用程序中使用packagevendor而不是定义任何相关的格式,而是将其添加到功能中。执行应用程序功能的递归服务包,可以作为构建应用程序容器的图像。

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
Enter fullscreen mode Exit fullscreen mode

Agora vamos 构建了一个定义 com o comando 的图像build(mais sobre a --tagdepois):

docker build --tag=elixir:example . # o ponto final é importante!
Enter fullscreen mode Exit fullscreen mode

快点! 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
Enter fullscreen mode Exit fullscreen mode

很快!图像是使用容器来执行命令并完成任务的,就像一个标志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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

该图像是有关应用程序必需的连续图像。

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
Enter fullscreen mode Exit fullscreen mode

无需手动操作,即可轻松执行容器操作或保存、启动和删除操作,然后选择所需的名称。例如:

docker start application

docker stop application

docker exec application {command}
Enter fullscreen mode Exit fullscreen mode

使用标志在分离模式下执行容器-d

docker run --name=application -d elixir:1.10
Enter fullscreen mode Exit fullscreen mode

集装箱的初始信息将继续在第二个平面、自由度或 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
Enter fullscreen mode Exit fullscreen mode

将集装箱装在出口处以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
Enter fullscreen mode Exit fullscreen mode

一面旗帜-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
Enter fullscreen mode Exit fullscreen mode

容器中的应用程序日志是发送给容器的,一般执行器是这样的:

docker logs application
Enter fullscreen mode Exit fullscreen mode

执行以下操作:记录存在的 seu 集装箱,并存在 seu 码头。只要应用一个标志,就可以从终端“ escutando ”日志中获得新的日志。 -f

docker logs application -f
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

将容器日志保存为最后 10 行。

在容器中进行“ssh 登录”操作。后续命令的使用方法:

docker exec -it application bash
Enter fullscreen mode Exit fullscreen mode

请注意“ssh 登录”。您可以修改输入终端的所有命令,然后将程序启动到容器中,然后再进行操作bash。通过 seu 终端将容器输出。都多伊索埃费托佩拉斯旗帜-it

Você pode rodar comandos para o seu 容器 sem essas 标志。阿尔古玛斯应用程序将日志保存在没有终端的情况下,然后将其保存为docker exec以下形式:

docker exec application tail -f /path/to/log_file
Enter fullscreen mode Exit fullscreen mode

我们讨论了图像容器之间的差异,以及基本的操作,让我们了解Docker Compose


第 03 部分 - Docker Compose não é Docker

最重要的是,Docker ComposeDocker是不同的!

总结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
Enter fullscreen mode Exit fullscreen mode

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这是最后的声明commandmix 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"
Enter fullscreen mode Exit fullscreen mode

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/

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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

新描述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"

Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

与此应用程序相同,Phoenix 即将到来,您mix phx.server也无法使用它的功能,也无法使用容器。

替换为 um 容器 criado 部分 de uma 图像 padrão de Elixirelixir:1.10和 trocamos 声明commandpor ttytty声明容器将在第二个计划中执行,并且是执行的命令

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"

Enter fullscreen mode Exit fullscreen mode

Feito isso podemos colocar todos esses 容器 para rodar com o comando

docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

删除待办事项操作系统容器:

docker-compose rm -f
Enter fullscreen mode Exit fullscreen mode

待办事项操作系统容器的供应或日志:

docker-compose logs -f
Enter fullscreen mode Exit fullscreen mode

构建操作系统容器的初始方式:

docker-compose build
Enter fullscreen mode Exit fullscreen mode

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
PREV
我的秘密设计资源颜色字体图标插图灵感博客
NEXT
2025 年网页设计和技术预测