首页 > 其他分享 >[转]docker-compose的网络networks的使用技巧

[转]docker-compose的网络networks的使用技巧

时间:2024-04-03 17:56:27浏览次数:24  
标签:compose default 网络 mysql docker networks

原文地址:docker-compose的网络networks的使用技巧 - 知乎

1. 介绍

1.1 介绍

前面福哥通过一篇《docker-compose学习笔记》带着大家把docker-compose的基础知识简单的学习了一番,之所以我们使用docker-compose而不是自己用docker去搞是因为docker-compose给我们提供了很多便利的功能,这些功能可以让我们更好的理解使用Docker部署服务器环境时候的一些对象的概念和特点。

docker-compose的service概念非常好,可以让我们把一个一个的容器抽象成一个一个的服务,每个服务之间存在了一定的关系,我们可以通过service的名称组织服务之间的关系而不用去关心服务背后的容器。

有些时候我们希望一些服务只能被一组特定的服务访问,这个时候使用只依靠默认的网络就行不通了,那么我们就需要根据自己的情况搭建我们的服务组的网络架构,就会用到docker-compose的networks功能了。

2. 类型

2.1 default

默认情况下docker-compose会建立一个默认的网络,名称为docker-compose.yml所在目录名称小写形式加上“_default”,我们的TFLinux环境就是“tflinux_default”。

这个默认网络会对所有services下面的服务生效,所以services下面的各个服务之间才能够通过service名称互相访问。

如果要自定义默认网络可以针对“default”网络进行设置,这样就会影响导默认网络了。

networks:

  default:
    driver: bridge

2.2 自定义

除了默认网络之外,我们也可以建立自定义的网络,这个网络名称就比较随意了。

networks:

  persist:
    driver: bridge

2.3 已存在网络

有时候我们想使用我们通过docker network create创建好的网络,而不是让docker-compose创建一个新的,这个时候就需要用到“external”关键字了。

networks:

  persist:
    external:
      name: bridge2

3. 案例

3.1 所有服务互通

要实现这个就非常容易了,因为有默认网络的存在,所以我们什么都不配置,在services下面的服务的容器里面都可以通过service名称访问其端口,前提是service需要通过ports发布它的端口出来。

services:

  # mysql
  mysql:
    build:
      dockerfile: Dockerfile
      context: ./image/mysql5.7
    container_name: mysql
    image: tflinux-mysql5.7
    networks:
      - default
      - persist
    volumes:
      - /tongfu.net/env/mysql-5.7.28/data/:/var/lib/mysql/
    restart: always

3.2 宿主机访问服务端口

通过docker-compose的默认网络就可以在宿主机上面访问服务的端口,但是docker-compose的默认网段是每次都会变化的。要想解决这个问题就只能通过在宿主机上面建立一个固定网段的网络,然后指定服务的网络为这个已经存在的网络,这样宿主机就可以通过这个网络的网关访问服务的端口了。

创建固定网段的网络bridge2。

docker network create --subnet=10.16.1.0/16 --gateway=10.16.1.1 --opt "com.docker.network.bridge.name"="bridge2" bridge2

把bridge2网络配置导docker-compose里面。

networks:

  default:
    driver: bridge

  persist:
    external:
      name: bridge2

给需要放开的服务增加default、persist两个网络。

注意:因为我们指定了persist特殊网络,所以default默认网络就自动失效了,如果需要使用default网络需要显性地指定下。

services:

  # mysql
  mysql:
    build:
      dockerfile: Dockerfile
      context: ./image/mysql5.7
    container_name: mysql
    image: tflinux-mysql5.7
    networks:
      - default
      - persist
    volumes:
      - /tongfu.net/env/mysql-5.7.28/data/:/var/lib/mysql/
    restart: always

3.3 服务访问宿主机端口

首先福哥不提倡这样使用,因为宿主机被访问是一种很危险的行为!

如果一定要访问宿主机的端口,可以通过服务网络的网关IP地址实现,前提是宿主机的端口绑定的是全部IP地址。

4. 总结

今天童鞋们跟着福哥对docker-compose的networks有了一个了解,使用networks搭建复杂的应用服务组,即安全,又方便。

docker-compose的网络networks的使用技巧【20210602】 - 鬼谷子叔叔 - 个人主页 - 同福网 TONGFU.net​m.tongfu.net/home/35/blog/513355.html

 

标签:compose,default,网络,mysql,docker,networks
From: https://www.cnblogs.com/dirgo/p/18113241

相关文章

  • CentOS7下Docker容器默认安装位置迁移
    Docker一般默认安装在/var/lib/docker目录下,对于云主机或云服务器默认系统盘不大的情况很不友好,动不动就是overlay占用很大空间。将Docker默认安装位置迁移分为一下几步:一、找到Docker默认安装位置1[root@XXXXXXX~]#dockerinfo2Client:3Context:default4D......
  • Docker部署zabbix6.0
    Dokcer部署zabbix6.0zabbix官网下载地址:https://www.zabbix.com/cn/downloadzabbix官方文档:https://www.zabbix.com/documentation/6.0/zh/manual服务器参数CPU:2U内存:8GBDocker版本:Dockerversion26.0.0,build2ae903e操作系统版本:openEuler-22.03-LTS-SP3创建zabbix......
  • [转]Docker 两个不同网络间实现连通
    原文地址:Docker两个不同网络间实现连通-西瓜君~-博客园一、启动不同网络的容器1、启动两个bridge(自带默认)桥接的容器[root@yang~]#dockerrun-it--nametomcat1tomcat[root@yang~]#dockerrun-it--nametomcat2tomcat#查看容器[root@yang~]#dockerps......
  • Docker安装hertzbeat
    快速安装开源监控软件hertzbeat官方链接hertzbeat官网地址:https://hertzbeat.com/hertzbeat官方文档:https://hertzbeat.com/docs/docker安装#拉取镜像dockerpulltancloud/hertzbeat#启动容器dockerrun-d-p1157:1157-p1158:1158\-eLANG=zh_CN.UTF-8\......
  • docker里面安装mariadb,设置用户名密码,登录mariadb
    5.启动Docker服务并设置开机自启动:  ```  sudosystemctlstartdocker  sudosystemctlenabledocker  ```###步骤2:在Docker中安装Nginx1.拉取Nginx镜像:  ```  sudodockerpullnginx  ```2.运行Nginx容器:  ```  sudo......
  • docker构建镜像——Dockerfile
    COPY格式COPY[--chown=<用户>:<组>]<源>...<目的>COPY[--chown=<用户>:<组>]["<源>"..."<目的>"]案例[root@hmm~]#mkdiryum3-centos[root@hmm~]#lsanaconda-ks.cfgdocker-hellohello.csize......
  • 为Python应用选择最好的Docker镜像 转载
    在使用Python的早些年,为了解决Python包的隔离与管理virtualenvwrapper就成为我的工具箱中重要的一员。后来,随着Python3的普及,virtualenvwrapper逐渐被venv所替换。毕竟venv是Python3的标配,优点是显而易见的。而这几年,应用场景的的复杂性越来与高,无论是开发还是部......
  • docker------docker入门
    ......
  • 【Docker】专题六:Docker Registry 详解
    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!目录一、基本介绍二、Registry创建方法三、Registry常用API请求四、Registry镜像清理一、基本介绍笔者在【Docker】专题一:Docker基本架构 中介绍......
  • [转]docker compose 配置文件 .yml 全面指南
    原文地址:dockercompose配置文件.yml全面指南-知乎Compose是一个用于定义和运行多容器Docker的工具。借助Compose,您可以使用YAML文件来配置应用程序的服务。使用Compose基本上分为三步:使用Dockerfile定义您的应用程序的环境使用docker-compose.yml定义组成......