专业的编程技术博客社区

网站首页 > 博客文章 正文

DevOpsDocker - docker-compose管理网络

baijin 2024-09-05 11:34:54 博客文章 6 ℃ 0 评论

Networking with docker-compose

默认情况下,docker-compose只是设置一个单独的网络为所有的程序,每个容器都可以看到其他所有的容器。

默认网络的名字由docker-compose配置文件所在目录决定。因此,如果目录叫作py_docker, 当我们执行docker-compose的时候,网络就叫做py_docker_default。

之前我们提到了端口,当创建WordPress容器的时候。为了更好的解释网络,我们使用docker-compose.yml来玩转WordPress程序:

在上面的配置文件中,我们有两个服务:db和wordpress。

在WordPress服务里,我们把端口80映射成8000。毫无疑问,在来浏览器里面访问WordPress需要访问8000端口。

在db服务的配置中没有关于端口的设置。在官网上,可以查到,mysql的端口3306被暴露出来。这个是MySQL的默认端口。可以通过如下链接查看更多https://hub.docker.com/r/library/mysql。

NOTE

我们没有给DB做端口映射,因为没有必要;我们只是希望WordPress程序可以和DB进行通信就好了。仅仅需要DB在容器环境中被映射,那样,wordpress可以和其进行通信,配置是:WORDPRESS_DB_HOST:db:3306。

NOTE

在docker-compose文件中,下面介绍如何将容器和容器进行通信:

  1. 注意镜像运行时哪个端口你想让它暴露出来。
  2. 参考服务连接的容器;在当前场景下,db服务被WordPress服务连接。
  3. Since we named the service db, we reference this connection as db:3306.
  4. Therefore, the format is <service>:<port exposed by that service>.

Run the WordPress Containers

接下来,我们来看看容器之间是如何连接、同步和沟通的。

在compose文件里,有没有注意到restart选项,这个选项一共有如下几个可选值:

  • no
  • always
  • on-failure
  • unless-stopped

如果不指定,默认是no。在任何情况下都不会重启。但是,咱们这里的db服务指定了restart:always,所以容器总是会在异常的时候重启。

让我们看看Django的网络是如何工作的。下面是它的docker-compose.yml文件:

可能你没有在WordPress站点里看到网络部分出现。下面是一段片段:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}

问题是,我们是怎么知道名字是postgres,HOST是db,端口是5432的呢?

These are the default values set in the postgres image and containers we run.

这个是我们运行的postgres镜像的默认值。

为了更清楚, 您可以在官方的 Postgres Docker 库中查看这一行:

You can obtain a Postgres Docker sample from GitHub at: https://github.com/docker-library/postgres/blob/master/10/docker-entrypoint.sh#L101.

之前说过,Host是DB,因为服务名字是db(由我们运行的postgres镜像决定)。

You can obtain a Postgres Docker example from GitHub at: https://github.com/docker-library/postgres/blob/master/10/Dockerfile#L132:

配置文件间接证明了这单。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表