Docker 与 K8S学习笔记—— 自定义容器网络

Posted 阿拉懒神灯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 与 K8S学习笔记—— 自定义容器网络相关的知识,希望对你有一定的参考价值。

我们在上一篇中介绍了Docker中三种网络,none、host和bridge,除了这三种网络,Docker还允许我们创建自定义网络,当我们要创建自定义网络时,Docker提供了三种网络驱动供我们选择:bridge、macvlan和overlay,其中macvlan和ovelay都是用于创建跨主机网络,我们后面在研究,本篇我们主要使用bridge驱动。

一、创建自定义网络

我们通过docker network create命令创建test_net1网络:

$ sudo docker network create --driver bridge test_net1
c7c20444a940135c92958f4434ca2b7428ba17f70a2a8a954a6cf160a011b513
$ sudo docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
6f0087fd32cd   bridge      bridge    local
464b3d11003c   host        host      local
faa8eb8310b4   none        null      local
c7c20444a940   test_net1   bridge    local
$ brctl show
bridge name  bridge id    STP enabled  interfaces
br-c7c20444a940    8000.024200e01cd2  no
docker0    8000.0242cef1fc32  no

我们可以看到,此时系统中新增了一个网桥br-c7c20444a940,其中c7c20444a940就是我们刚刚创建的桥接网络的ID。我们可以看下test_net1的详细配置信息:

$ sudo docker network inspect test_net1
[
    {
        "Name": "test_net1",
        "Id": "c7c20444a940135c92958f4434ca2b7428ba17f70a2a8a954a6cf160a011b513",
        "Created": "2021-10-23T07:07:47.870947684Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

如果我们在创建网络时,不指定--subnet和--gateway参数时,Docker会自动为其分配网段和网关,我们接着再创建一个网络并指定其网段和网关:

$ sudo docker network create --driver bridge --subnet 173.20.0.0/16 --gateway 173.20.0.1  test_net2
47542e86dc4474779a3b105f1d22f005fc39a529b1f19aa7af2c68297c1c0a41
$ sudo docker network inspect test_net2
[
    {
        "Name": "test_net2",
        "Id": "47542e86dc4474779a3b105f1d22f005fc39a529b1f19aa7af2c68297c1c0a41",
        "Created": "2021-10-23T07:21:47.684305897Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "173.20.0.0/16",
                    "Gateway": "173.20.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
$ brctl show
bridge name  bridge id    STP enabled  interfaces
br-47542e86dc44    8000.024273a34080  no
br-c7c20444a940    8000.024200e01cd2  no
docker0    8000.0242cef1fc32  no
$ ifconfig br-47542e86dc44
br-47542e86dc44: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 173.20.0.1  netmask 255.255.0.0  broadcast 173.20.255.255
        ether 02:42:73:a3:40:80  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

二、自定义网络的使用

容易要使用自定义的网络,同样需在启动时通过--network参数指定即可:

$ sudo docker run -it --network=test_net2 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
50: eth0@if51: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ad:14:00:02 brd ff:ff:ff:ff:ff:ff
    inet 173.20.0.2/16 brd 173.20.255.255 scope global eth0
       valid_lft forever preferred_lft forever

我们可以看到Docker会根据容易所使用的网络的网段自动为容器分配IP,当然,容器IP也是可以指定的,即通过--ip参数,但是要注意两点:

  • 只有使用--subnet参数指定网段创建的网络才能指定IP

  • 所指定的IP一定要在所使用的网络的网段中

下图所示的错误就是容器使用的网络并没有通过--subnet指定网段:

$ sudo docker run -it --network=test_net1 --ip 172.19.0.5  busybox
docker: Error response from daemon: user specified IP address is supported only when connecting to networks with user configured subnets.

下图所示的错误是容器所指定IP不在其网络的指定网段内:

$ sudo docker run -it --network=test_net2 --ip 172.20.0.2  busybox
ERRO[0000] error waiting for container: context canceled
docker: Error response from daemon: Invalid address 172.20.0.2: It does not belong to any of this network\'s subnets.

以下是正确的指定容器IP的例子:

$ sudo docker run -it --network=test_net2 --ip 173.20.0.4  busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
54: eth0@if55: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ad:14:00:04 brd ff:ff:ff:ff:ff:ff
    inet 173.20.0.4/16 brd 173.20.255.255 scope global eth0
       valid_lft forever preferred_lft forever

三、Docker网络隔离及原理

到目前位置我们创建使用test_net2网络创建了两个容器,那么这两个容器网络应该是互通的,我们来验证一下:

$ sudo docker run -it --network=test_net2 --ip 173.20.0.4  busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
54: eth0@if55: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ad:14:00:04 brd ff:ff:ff:ff:ff:ff
    inet 173.20.0.4/16 brd 173.20.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # ping 173.20.0.2
PING 173.20.0.2 (173.20.0.2): 56 data bytes
64 bytes from 173.20.0.2: seq=0 ttl=64 time=1.319 ms
64 bytes from 173.20.0.2: seq=1 ttl=64 time=0.106 ms
64 bytes from 173.20.0.2: seq=2 ttl=64 time=0.107 ms
^C
--- 173.20.0.2 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.106/0.510/1.319 ms

所以,我们得出结论,使用同一网络创建的容器是能够互通的。相反,如果是不同网络创建的容器应该是无法通信,我们使用test_net1创建一个容器验证一下:

$ sudo docker run -it --network=test_net1 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
58: eth0@if59: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:13:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.19.0.2/16 brd 172.19.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # ping 173.20.0.2
PING 173.20.0.2 (173.20.0.2): 56 data bytes
^C
--- 173.20.0.2 ping statistics ---
146 packets transmitted, 0 packets received, 100% packet loss

从结果来看确实无法通信,但是如果我们开启系统的ip forwarding,把当前主机当作路由,那么不同网络应该是能通信的,我们首先来看下系统的配置:

$ ip r
default via 172.16.194.2 dev ens33 proto dhcp src 172.16.194.135 metric 100
172.16.194.0/24 dev ens33 proto kernel scope link src 172.16.194.135
172.16.194.2 dev ens33 proto dhcp scope link src 172.16.194.135 metric 100
172.19.0.0/16 dev br-c7c20444a940 proto kernel scope link src 172.19.0.1
173.20.0.0/16 dev br-47542e86dc44 proto kernel scope link src 173.20.0.1
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

看来我们的主机已经开启了ip forwarding并且172.19.0.0/16和173.20.0.0/16的路由也定义好了,那为什么网络还是不通呢?我们看看iptables:

$ sudo iptables-save
# Generated by iptables-save v1.6.1 on Sat Oct 23 08:19:03 2021
*filter
...
# 如果数据包是从br-47542e86dc44流入但不从br-47542e86dc44流出则跳转到DOCKER-ISOLATION-STAGE-2处理
-A DOCKER-ISOLATION-STAGE-1 -i br-47542e86dc44 ! -o br-47542e86dc44 -j DOCKER-ISOLATION-STAGE-2
# 如果数据包是从br-c7c20444a940流入但不从br-c7c20444a940流出则跳转到DOCKER-ISOLATION-STAGE-2处理
-A DOCKER-ISOLATION-STAGE-1 -i br-c7c20444a940 ! -o br-c7c20444a940 -j DOCKER-ISOLATION-STAGE-2
# 如果数据包是从docker0流入但不从docker0流出则跳转到DOCKER-ISOLATION-STAGE-2处理
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
# 如果非以上三种情况则返回上一层处理
-A DOCKER-ISOLATION-STAGE-1 -j RETURN

# 如果数据包流出到br-47542e86dc44则drop
-A DOCKER-ISOLATION-STAGE-2 -o br-47542e86dc44 -j DROP
# 如果数据包流出到br-c7c20444a940则drop
-A DOCKER-ISOLATION-STAGE-2 -o br-c7c20444a940 -j DROP
# 如果数据包流出到docker0则drop
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
# 如果非以上三种情况则返回上一层处理
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
...

看来原因就在这里了,我们发现Docker创建了一系列网络隔离策略,当数据包流入的网络与流出的网络相同则不作处理,不同则弃数据包,我们通过一个流程图来说明DOCKER-ISOLATION-STAGE-1和DOCKER-ISOLATION-STAGE-2规则的逻辑:

 

如果我一定要两个使用不同网络的容器通信,该怎么处理呢?也很简单,我们只需要给容器添加对应的网络的的网卡即可,我们通过docker network connect命令可以实现:

# 0da5e260a4b6容器使用的是test_net1,另外两个使用的是test_net2,
# 如果大家在这一步不确定的话可以使用docker inspect 容器id进行确定 
$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED       STATUS       PORTS     NAMES
0da5e260a4b6   busybox   "sh"      2 hours ago   Up 2 hours             objective_blackburn
c6871db3efbb   busybox   "sh"      2 hours ago   Up 2 hours             goofy_swartz
c683eacc4eae   busybox   "sh"      2 hours ago   Up 2 hours             modest_swartz
yangye@ayato:~$ sudo docker network connect test_net2 0da5e260a4b6

我们在容器0da5e260a4b6中先ping下173.20.0.2发现网络是通的,我们再看看其网络配置,发现容器中添加了my_net2网络的网卡eth1:

/ # ping 173.20.0.2
PING 173.20.0.2 (173.20.0.2): 56 data bytes
64 bytes from 173.20.0.2: seq=0 ttl=64 time=0.291 ms
64 bytes from 173.20.0.2: seq=1 ttl=64 time=0.100 ms
64 bytes from 173.20.0.2: seq=2 ttl=64 time=0.097 ms
64 bytes from 173.20.0.2: seq=3 ttl=64 time=0.100 ms
64 bytes from 173.20.0.2: seq=4 ttl=64 time=0.147 ms
^C
--- 173.20.0.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.097/0.147/0.291 ms
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:13:00:02
          inet addr:172.19.0.2  Bcast:172.19.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25 errors:0 dropped:0 overruns:0 frame:0
          TX packets:150 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1830 (1.7 KiB)  TX bytes:14476 (14.1 KiB)

eth1      Link encap:Ethernet  HWaddr 02:42:AD:14:00:03
          inet addr:173.20.0.3  Bcast:173.20.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:18 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1440 (1.4 KiB)  TX bytes:574 (574.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

好的,以上就是本篇的内容,下一篇我们再看看容器间通信方式。

 

Docker 学习笔记总结

文章目录

1. docker network简介


常见的几个网卡配置:ens33、log、virbr0。

启动docker服务后,会发现一个docker0的虚拟网桥:


# 查看docker网络命令
docker network ls 

docker默认创建三大网络模式:

docker network的命令如下:

docker network create 名称:创建一个docker网络。

docker network rm 网络名: 删除一个docker网络。

docker network inspect 网络名:查看网络的详细信息。


docker net网络的作用:

2. docker network 网络模式


4种网络模式:

每个模式对应的命令参数:

3. docker底层容器ip 和 容器映射变化


分别启动两个ubuntu系统并且通过docker inspect来查看ip地址,如果停止后再启动这些IP会被重新分配,也就是会变化!!

总结:docker容器内部的ip是有可能发生变化的!因此,才需要网络服务,通过服务来进行调用。

4. docker network

4.1 bridge模式



Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间可以通过网桥相互通信。

整体架构图如下:

  • 记住veth,veth pair等等关键字。

通过命令:docker run -d -p 8083:8080 --name tomcat83 billygoo/tomcat8-jdk8 可以多测试几个不用指定 --network 默认就是bridge模式。

bridge模式总结:

在宿主机、容器中执行ip addr命令,可以查看宿主机的veth和容器的eth0之间的匹配。

就是通过这种veth和eth0两两匹配的架构,实现宿主机与容器之间的网络通信。大多数都是使用bridge模式的通信。

4.2 host模式


host模式:直接使用宿主机IP地址与外界进行通信,不再需要额外进行net转换。

命令:docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8

如果执行命令添加了-p指定端口号,会出现一个警告:


docker inspect 容器名 | tail -n 20

host模式启动的容器,端口号会以主机端口号为主,也就是访问的时候直接访问宿主机的就可以了。

4.3 none模式


none模式:

docker run -d --network none --name tomcat83 billygoo/tomcat8-jdk8

很少用。

4.4 container模式


container模式:新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口范围等。

命令效果如下:

注意:

Alpine操作系统介绍 以及 演示:

docker run -it --name alpine1 alpine /bin/sh
docker run -it --network container:alpine1 --name alpine2 alpine /bin/sh

# 演示通过 ip addr来查看

如果alpine1停用了,那么alpine2也就没有了网络了。

4.5 自定义网络 模式



但是,这两个ip是动态的,如果停了又开,ip就有可能是另外一个了。


而自定义网络就方便多了,直接通过服务名去读取。

第一步:创建自定义网络。

# 创建一个网络模式
docker network create itholmes_network


第二步:创建容器的时候添加参数 --network 自定义网络名称 。

docker run -d -p 8081:8080 --network itholmes_network --name tomcat801 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network itholmes_network --name tomcat802 billygoo/tomcat8-jdk8

第三步:进入容器里面,直接ping 容器名。 如果ping成功就可以了。

自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能ping通。)

5. docker-compose 容器编排 简介


Docker-Compose是Docker官方的开源项目。负责实现对Docker容器集群的快速编排。

Docker-Compose中通过docker-compose.yml文件,统一来管理一些容器实例。

docker-compose.yml的作用就是写好多个容器之间的调用关系。

6. compose的下载安装


官方文档:https://docs.docker.com/compose/compose-file/compose-file-v3/

官方安装:https://docs.docker.com/compose/install/

compose要严格按照官方指定的版本来,compose版本基本上都是用3版本以上的。

compose的curl方式 安装步骤 :

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose
docker-compose --version

curl方式安装后,卸载:

sudo rm /usr/local/bin/docker-compose

7. compose的 几个核心概念


**一个文件:docker-compose.yml **

两要素:服务(service) 和 工程(project)。

  • 服务:一个个应用容器实例。
  • 工程:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。

一个工程 对于 多个服务。

Compose使用的三个步骤:

Compose常用命令:

8. compose编排服务 步骤


第一步:编写docker-compose.yml文件。

version: '3.1'
 
volumes:
  grafana_data: 
 
services:
 influxdb:
  image: tutum/influxdb:0.9
  restart: always
  environment:
    - PRE_CREATE_DB=cadvisor
  ports:
    - "8083:8083"
    - "8086:8086"
  volumes:
    - ./data/influxdb:/data
 
 cadvisor:
  image: google/cadvisor
  links:
    - influxdb:influxsrv
  command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086
  restart: always
  ports:
    - "8080:8080"
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
 
 grafana:
  user: "104"
  image: grafana/grafana
  user: "104"
  restart: always
  links:
    - influxdb:influxsrv
  ports:
    - "3000:3000"
  volumes:
    - grafana_data:/var/lib/grafana
  environment:
    - HTTP_USER=admin
    - HTTP_PASS=admin
    - INFLUXDB_HOST=influxsrv
    - INFLUXDB_PORT=8086
    - INFLUXDB_NAME=cadvisor
    - INFLUXDB_USER=root
    - INFLUXDB_PASS=root

第二步:将项目中的ip换成对应的服务名!重新打包上传服务器。

第三步:编写Dockerfile文件。

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER zzyy
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar
# 运行jar包
RUN bash -c 'touch /zzyy_docker.jar'
ENTRYPOINT ["java","-jar","/zzyy_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 6001

第四步:在对应的目录下,执行命令docker build -t itholmes_docker:1.6 开始构建容器。

第五步: 使用编排命令进行一键部署。

# 检查docker-compose.yml配置编排是否正确,没有显示就是正确的。
docker-compose config -q
# 编排启动
docker-compose up -d

这样整体的容器编排就完成了。

9. Portainer可视化工具 安装 和 使用


容器越来越多后,可以通过类似于网站可视化工具来管理,也是有监控的效果。

就可以通过Docker轻量级可视化工具Portainer来实现。

Portainer是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。

Portainer官方:https://www.portainer.io/


Portainer也是一个docker容器,直接通过docker命令安装就可以了。

docker run -d -p 8000:8000 -p 9000:9000 --name portainer     --restart=always     -v /var/run/docker.sock:/var/run/docker.sock     -v portainer_data:/data     portainer/portainer
# --restart=always是如果整个docker服务重启了,该容器也会重启,随时在线的一个效果。

第一次登录需要创建admin,访问地址:IP:9000。

之后要选择监视本地还是远程的,这个根据情况自己选择。注意:本地指的是portainer的本地。

portainer中可以操作各种各样的命令,查看inspect配置、连接控制台、日志等等。也可以对镜像、容器进行操作,也可能直接创建相关内容。

10. CIG容器重量级监控系统

10.1 docker stats 命令


# stats命令是查看整个docker的使用情况
docker stats 

10.2 CIG的 介绍


CIG就是以下三个的首字母。

第一步:CAdvisor进行监控收集。

第二步:InfluxDB负责存储数据。

第三步:Granfana来进行展示图表。



Cadvisor介绍:

InfluxDB介绍:

Granfana介绍:

10.3 CIG的 安装与启用


第一步:创建一个指定的目录,方便管理CIG这三个容器。


第二步:在指定目录下,构建docker-compose.yml文件。

version: '3.1'
 
volumes:
  grafana_data: 
 
services:
 influxdb:
  image: tutum/influxdb:0.9
  restart: always
  environment:
    - PRE_CREATE_DB=cadvisor
  ports:
    - "8083:8083"
    - "8086:8086"
  volumes:
    - ./data/influxdb:/data
 
 cadvisor:
  image: google/cadvisor
  links:
    - influxdb:influxsrv
  command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086
  restart: always
  ports:
    - "8080:8080"
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
 
 grafana:
  user: "104"
  image: grafana/grafana
  user: "104"
  restart: always
  links:
    - influxdb:influxsrv
  ports:
    - "3000:3000"
  volumes:
    - grafana_data:/var/lib/grafana
  environment:
    - HTTP_USER=admin
    - HTTP_PASS=admin
    - INFLUXDB_HOST=influxsrv
    - INFLUXDB_PORT=8086
    - INFLUXDB_NAME=cadvisor
    - INFLUXDB_USER=root
    - INFLUXDB_PASS=root

不要忘记,docker-compose cnofig -q 检查一下配置是否正确。

第三步:docker-compose up 或者 docker-compose up -d 启动容器编排。

这样CIG服务就搭建起来了。

第四步:登录测试。


10.4 CIG添加panel


配置Grafana:

第一步:登录,默认账户密码是admin/admin。

第二步:添加对应的数据库,看技术选型。




第三步:添加panel

之后选择添加panel。

第四步:编辑panel,指定监听容器和监听什么。

# 通过该命令查看一些情况
docker stats


第五步:完成了CIG的部署。

以上是关于Docker 与 K8S学习笔记—— 自定义容器网络的主要内容,如果未能解决你的问题,请参考以下文章

Docker 与 K8S学习笔记—— 容器间通信

Docker 与 K8S学习笔记—— 容器的操作(上篇)

Docker 与 K8S学习笔记(二十一)—— Pod生命周期重启策略与健康检查

关于Docker中 容器镜像管理,数据卷网络,本地仓库,容器监控的一些笔记

docker+k8s简介

Docker 与 K8S学习笔记(十七)—— 在K8S集群中部署应用