bingoogolapple / bingoogolapple.github.io

个人主页。同时也通过 Issues 记录学习笔记
http://www.bingoogolapple.cn
86 stars 19 forks source link

Docker学习笔记-基础一 #102

Open bingoogolapple opened 8 years ago

bingoogolapple commented 8 years ago

docker 中文文档 Mac通过Docker部署Gitlab实践

阿里云镜像加速器

删除默认的虚拟主机

docker-machine ls
docker-machine rm default

创建一台安装有 Docker 环境的 Linux 虚拟机,指定机器名称为 default,同时配置 Docker 加速器地址。

docker-machine create --engine-registry-mirror=替换url地址 -d virtualbox default

查看机器的环境配置,并配置到本地。然后通过 Docker 客户端访问 Docker 服务。

docker-machine env default
eval "$(docker-machine env default)"
docker info

Oracle VirtualBox

DaoCloud 镜像加速器

DaoCloud 接入自有主机

下载镜像

搜索镜像,组织名或用户名/镜像名称,如果是官方镜像则只有镜像名称 docker search centos

下载镜像 docker pull centos

查看已下载镜像 docker images

bingoogolapple commented 8 years ago

容器

运行容器 docker run centos /bin/echo 'Hello World'

查看正在运行的容器 docker ps

查看所有的容器 docker ps --all docker ps -a

删除容器 docker rm 7bb410a19a8d docker rm determined_hamilton

运行容器,并指定容器名称 docker run --name bga centos /bin/echo 'hello bga'

查看最近创建的一个容器 docker ps --all --latest docker ps -a -l docker ps -al

查看容器日志 docker logs bga docker logs e200d7dbb94f

容器的停止与运行 docker stop bga docker restart bga docker start bga

带互动的容器 docker run --interactive --tty centos /bin/bash docker run -i -t centos /bin/bash docker run -it centos /bin/bash

创建一个后台运行的容器 ➜ ~ docker run --detach centos ping github.com 67adab0abebb1c4c6b96faf257e5c8052769f510017d7e6c0be4653cb086df07 ➜ ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 67adab0abebb centos "ping github.com" 5 seconds ago Up 4 seconds evil_hugle ➜ ~ ➜ ~ docker run -d centos ping github.com 268cff96ab1e20158cc094551dee2d1b738ee13bf7ab4a6acfe9ebf635909b75 ➜ ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 268cff96ab1e centos "ping github.com" About a minute ago Up About a minute mad_mcclintock ➜ ~ ➜ ~ docker logs --follow 268cff96ab1e
PING github.com (192.30.252.131) 56(84) bytes of data. 64 bytes from github.com (192.30.252.131): icmp_seq=2 ttl=61 time=397 ms 64 bytes from github.com (192.30.252.131): icmp_seq=3 ttl=61 time=419 ms

ssh into machine

docker-machine ssh default

get bash or ssh into a running container in background mode

sudo docker exec -it jenkins bash
bingoogolapple commented 8 years ago

手动构建镜像

创建镜像

➜  ~ docker run -it centos bash
添加nodejs安装源
[root@e887e14cb1e3 /]# curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
...
[root@e887e14cb1e3 /]# yum install nodejs -y
...
[root@e887e14cb1e3 /]# node -v
v6.2.1
[root@e887e14cb1e3 /]# node -e "console.log('hello')"
hello
[root@e887e14cb1e3 /]# exit
exit
➜  ~ docker commit -m '安装 nodejs' -a 'bingoogolapple' e887e14cb1e3 bingoogolapple/nodejs-demo:latest
sha256:fa33f8c5caa6d8a727f362fed3efc725cf748dc79b53bf7ce9aa680841611189
➜  ~ docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
bingoogolapple/nodejs-demo   latest              fa33f8c5caa6        23 seconds ago      311.1 MB
centos                       latest              904d6c400333        4 days ago          196.8 MB
➜  ~ docker run bingoogolapple/nodejs-demo node -e "console.log('hello')"
hello
➜  ~ docker ps -al
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                      PORTS               NAMES
18f185de4c79        bingoogolapple/nodejs-demo   "node -e console.log("   59 seconds ago      Exited (0) 58 seconds ago                       agitated_minsky
➜  ~ docker rm 18f185de4c79
18f185de4c79

删除镜像

➜  ~ docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
bingoogolapple/nodejs-demo   latest              fa33f8c5caa6        23 seconds ago      311.1 MB
centos                       latest              904d6c400333        4 days ago          196.8 MB
➜  ~ docker rmi bingoogolapple/nodejs-demo
Untagged: bingoogolapple/nodejs-demo:latest
Deleted: sha256:fa33f8c5caa6d8a727f362fed3efc725cf748dc79b53bf7ce9aa680841611189
Deleted: sha256:868ee937489bfd44c354db758b2a1821ec24af01def063f8cb9c7eab4a9debd2
➜  ~ docker images                                                       
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              904d6c400333        4 days ago          196.8 MB
bingoogolapple commented 8 years ago

用 Dockerfile 创建镜像

创建Dockerfile文件

FROM centos
MAINTAINER bingoogolapple <bingoogolapple@gmail.com>
RUN curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
RUN yum install nodejs -y

根据Dockerfile创建镜像「后面那个.表示Dockerfile所在目录的位置」

➜  nodejs-demo docker build --tag bingoogolapple/nodejs-demo:latest .

推送镜像到Docker Hub

➜  nodejs-demo docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
bingoogolapple/nodejs-demo   latest              b90e7876ac8f        2 minutes ago       328.2 MB
centos                       latest              904d6c400333        4 days ago          196.8 MB
➜  nodejs-demo docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: bingoogolapple
Password: 
Login Succeeded
➜  nodejs-demo docker push bingoogolapple/nodejs-demo

推送镜像到阿里云

➜  nodejs-demo docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
bingoogolapple/nodejs-demo   latest              b90e7876ac8f        27 minutes ago      328.2 MB
centos                       latest              904d6c400333        4 days ago          196.8 MB
➜  nodejs-demo docker login --username=bingoogolapple@gmail.com registry.aliyuncs.com
Password: 
Login Succeeded
➜  nodejs-demo docker tag b90e7876ac8f registry.aliyuncs.com/bingoogolapple/nodejs-demo
➜  nodejs-demo docker push registry.aliyuncs.com/bingoogolapple/nodejs-demo 

从阿里云 bingoogolapple/nodejs-demo 拉取镜像

$ docker login --username=bingoogolapple@gmail.com registry.aliyuncs.com
$ docker pull registry.aliyuncs.com/bingoogolapple/nodejs-demo
bingoogolapple commented 8 years ago

Docker 存储

删除容器后,数据卷里的数据会永久保存

➜  ~ docker run -v /mnt -it --name=db centos bash
[root@22f015a2bb0f /]# cd mnt/
[root@22f015a2bb0f mnt]# touch data1
[root@22f015a2bb0f mnt]# ls
data1
[root@22f015a2bb0f mnt]# exit
exit
➜  ~ docker inspect db
"Mounts": [
            {
                "Name": "3ab44b6b8d618813e00613599a8b5e1ac91dfb6f7beb4d789f03ccf90778322f",
                "Source": "/mnt/sda1/var/lib/docker/volumes/3ab44b6b8d618813e00613599a8b5e1ac91dfb6f7beb4d789f03ccf90778322f/_data",    // 数据盘在主机上的位置
                "Destination": "/mnt",     // 数据盘在容器中的位置
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ]
➜  ~ docker rm db
db
➜  ~ docker-machine ssh default
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.11.2, build HEAD : a6645c3 - Wed Jun  1 22:59:51 UTC 2016
Docker version 1.11.2, build b9f10c9
docker@default:~$ sudo ls /mnt/sda1/var/lib/docker/volumes/3ab44b6b8d618813e0061
3599a8b5e1ac91dfb6f7beb4d789f03ccf90778322f/_data
data1

用主机上的目录作为容器上的数据盘

➜  DockerNote mkdir data
➜  DockerNote pwd
/Users/bingoogol/Desktop/DockerNote
➜  DockerNote docker run -v /Users/bingoogol/Desktop/DockerNote/data:/mnt -it --name=db centos bash
[root@feb8423ab5c1 /]# cd /mnt/
[root@feb8423ab5c1 mnt]# touch data1
[root@feb8423ab5c1 mnt]# exit
exit
➜  DockerNote docker rm db
db
➜  DockerNote ls data 
data1

数据容器

➜  DockerNote docker create -v /mnt --name dbcenter centos
694d21a6172e14439d886d9623807a47f1009584bfdffe490cbb5c60536aeb47
➜  DockerNote docker run --volumes-from dbcenter --name db1 -it centos bash
[root@b7cd1e6859f0 /]# cd /mnt/
[root@b7cd1e6859f0 mnt]# touch data1
[root@b7cd1e6859f0 mnt]# ls
data1
[root@b7cd1e6859f0 mnt]# exit
exit
➜  DockerNote docker run --volumes-from dbcenter --name db2 -it centos bash
[root@bacc48d8d766 /]# cd /mnt/
[root@bacc48d8d766 mnt]# ls
data1
[root@bacc48d8d766 mnt]# touch data2
[root@bacc48d8d766 mnt]# ls
data1  data2

管理数据盘

➜  DockerNote docker volume ls         // 查看所有的数据盘。在删除容器时,默认docker不会把他的数据盘删除掉
DRIVER              VOLUME NAME
local               3ab44b6b8d618813e00613599a8b5e1ac91dfb6f7beb4d789f03ccf90778322f
local               5954097c5924bf4844d20ca94f213a2f8b24adb45208373c72ba854321985842
➜  DockerNote docker volume ls -f dangling=true     // 查看已经没有容器使用的数据盘
DRIVER              VOLUME NAME
local               3ab44b6b8d618813e00613599a8b5e1ac91dfb6f7beb4d789f03ccf90778322f
➜  DockerNote docker volume rm 3ab44b6b8d618813e00613599a8b5e1ac91dfb6f7beb4d789f03ccf90778322f
3ab44b6b8d618813e00613599a8b5e1ac91dfb6f7beb4d789f03ccf90778322f
➜  DockerNote docker volume ls                                                                 
DRIVER              VOLUME NAME
local               5954097c5924bf4844d20ca94f213a2f8b24adb45208373c72ba854321985842
➜  DockerNote docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
bacc48d8d766        centos              "bash"              6 minutes ago       Exited (0) 6 minutes ago                       db2
b7cd1e6859f0        centos              "bash"              7 minutes ago       Exited (0) 6 minutes ago                       db1
694d21a6172e        centos              "/bin/bash"         7 minutes ago       Created                                        dbcenter
➜  DockerNote docker rm db1 db2
db1
db2
➜  DockerNote docker volume ls
DRIVER              VOLUME NAME
local               5954097c5924bf4844d20ca94f213a2f8b24adb45208373c72ba854321985842
➜  DockerNote docker volume inspect 5954097c5924bf4844d20ca94f213a2f8b24adb45208373c72ba854321985842
[
    {
        "Name": "5954097c5924bf4844d20ca94f213a2f8b24adb45208373c72ba854321985842",
        "Driver": "local",
        "Mountpoint": "/mnt/sda1/var/lib/docker/volumes/5954097c5924bf4844d20ca94f213a2f8b24adb45208373c72ba854321985842/_data",
        "Labels": null
    }
]
➜  DockerNote docker rm -v dbcenter    // 加上-v参数,在删除容器时,把他的数据盘也一块删除掉
dbcenter
➜  DockerNote docker volume ls                                                                      
DRIVER              VOLUME NAME
bingoogolapple commented 8 years ago

Docker 网络 - 网络

查看网络配置

➜  DockerNote docker network ls
NETWORK ID          NAME                DRIVER
51f5af98eba6        bridge              bridge      桥接网络,如果创建的时候不手动指定网络,不然默认就是bridge,容器相互之间可以通信,不过外界想要访问这种网络下的容器的话需要桥接网络,就像容器和主机之间的一座桥,对容器有一个隔离的作用,可以通过绑定端口号的方法让外界和主机之间使用某一个指定的端口进行通信
5b3a9e3a6c9e        host                host        主机网络,跟主机使用的是同样的网络,对外界完全开放的,能够访问到主机就能够到使用host这种网络的容器
8060a77be0f9        none                null         无网络,完全隔离   

bridge 网络

➜  DockerNote docker run -d --name web1 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
51f5c6a04d83: Pull complete 
a3ed95caeb02: Pull complete 
51d229e136d0: Pull complete 
bcd41daec8cc: Pull complete 
Digest: sha256:0fe6413f3e30fcc5920bc8fa769280975b10b1c26721de956e1428b9e2f29d04
Status: Downloaded newer image for nginx:latest
52d79ad6432e831deff32be53d5d61433e245e552b2f3567a5a7e72da6cec77f
➜  DockerNote docker run -d --name web2 nginx
8b2b180c16e692421462a101625a7e3e8962b3dc2d61247fa18e013fefebad71
➜  DockerNote docker network inspect bridge  
[
    {
        "Name": "bridge",
        "Id": "51f5af98eba61a9dced37947fb7df6e96a53b9f37fa2141b03fbc23f65796018",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Internal": false,
        "Containers": {   // 使用这种网络的容器
            "52d79ad6432e831deff32be53d5d61433e245e552b2f3567a5a7e72da6cec77f": {
                "Name": "web1",
                "EndpointID": "0db5b88023713270f341e23ad94e35ffe037e8e286d248d39ae9c20b581d1f0a",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",    // 容器在这个网络上的ip地址
                "IPv6Address": ""
            },
            "8b2b180c16e692421462a101625a7e3e8962b3dc2d61247fa18e013fefebad71": {
                "Name": "web2",
                "EndpointID": "37a3cbc6348591a276d75cdc15a04d77a1f088da32b70888eacc00ff4967e9d7",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]
// 登陆web1,ping web2
➜  DockerNote docker exec -it web1 bash 
root@52d79ad6432e:/# ping 172.17.0.3                                                                                                       
PING 172.17.0.3 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: icmp_seq=0 ttl=64 time=0.640 ms
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.072 ms
^C--- 172.17.0.3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.072/0.262/0.640/0.267 ms
root@52d79ad6432e:/# exit
exit

bridge 网络

➜  DockerNote docker run -d --name web_none --net none nginx
9f70486baf32946831d12bca838aa00be1d4efb2e1825a4473a6328f098a2d70
➜  DockerNote docker network inspect none  
[
    {
        "Name": "none",
        "Id": "8060a77be0f98c07274dc7327b172f3bcaa0f50e8e4e80a1802885a80f025399",
        "Scope": "local",
        "Driver": "null",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Internal": false,
        "Containers": {
            "9f70486baf32946831d12bca838aa00be1d4efb2e1825a4473a6328f098a2d70": {
                "Name": "web_none",
                "EndpointID": "87f5a0bd9c8c784e20cc6f537f852f555e0a4d39a1c2cd85297ee3b3f6efe83f",
                "MacAddress": "",
                "IPv4Address": "",   // 没有ip地址
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
➜  DockerNote docker exec -it web_none bash
root@9f70486baf32:/# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
// 这个容器上只有一个lo网络,本机环网络,改容器上的服务只能跟本机上的服务进行沟通

host 网络

➜  DockerNote docker run -d --name web_host --net host nginx
3e2179f5cd61894ab1fe17563c44f27d0e4a02e5cef2457e3cc8d4a9df99548b
➜  DockerNote docker network inspect host
[
    {
        "Name": "host",
        "Id": "5b3a9e3a6c9e3519b969a37082455bf22d7f18beacc35b5687a4c46eb4736bdb",
        "Scope": "local",
        "Driver": "host",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Internal": false,
        "Containers": {
            "3e2179f5cd61894ab1fe17563c44f27d0e4a02e5cef2457e3cc8d4a9df99548b": {
                "Name": "web_host",
                "EndpointID": "4a59d1ef33f0c9fe73eb596e8b372cbf60198f931ab7ee6cbf63829ad58bc7c9",
                "MacAddress": "",
                "IPv4Address": "",  // 也没有ip地址,因为使用host网络的ip地址和主机的ip地址是一样的
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
➜  DockerNote docker exec -it web_host bash
root@default:/# ip address                                                                                                                 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 7a:dc:bc:a1:e7:57 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:7c:30:6a brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe7c:306a/64 scope link 
       valid_lft forever preferred_lft forever
4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:94:23:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.99.100/24 brd 192.168.99.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe94:2309/64 scope link 
       valid_lft forever preferred_lft forever
6: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:69:72:06:f7 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:69ff:fe72:6f7/64 scope link 
       valid_lft forever preferred_lft forever
8: vethad504a4@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether d6:c3:1c:7a:38:42 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::d4c3:1cff:fe7a:3842/64 scope link 
       valid_lft forever preferred_lft forever
10: vethac925c2@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 0a:e2:67:a4:e7:60 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::8e2:67ff:fea4:e760/64 scope link 
       valid_lft forever preferred_lft forever
root@default:/# exit
exit
➜  DockerNote docker-machine ssh default
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.11.2, build HEAD : a6645c3 - Wed Jun  1 22:59:51 UTC 2016
Docker version 1.11.2, build b9f10c9
docker@default:~$ ifconfig
docker0   Link encap:Ethernet  HWaddr 02:42:69:72:06:F7  
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:69ff:fe72:6f7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1100 (1.0 KiB)  TX bytes:648 (648.0 B)

eth0      Link encap:Ethernet  HWaddr 08:00:27:7C:30:6A  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe7c:306a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:57755 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17874 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:75946670 (72.4 MiB)  TX bytes:1181865 (1.1 MiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:94:23:09  
          inet addr:192.168.99.100  Bcast:192.168.99.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe94:2309/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1100 errors:0 dropped:0 overruns:0 frame:0
          TX packets:879 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:122036 (119.1 KiB)  TX bytes:202035 (197.2 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:32 errors:0 dropped:0 overruns:0 frame:0
          TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:2752 (2.6 KiB)  TX bytes:2752 (2.6 KiB)

vethac925c2 Link encap:Ethernet  HWaddr 0A:E2:67:A4:E7:60  
          inet6 addr: fe80::8e2:67ff:fea4:e760/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1026 (1.0 KiB)  TX bytes:1026 (1.0 KiB)

vethad504a4 Link encap:Ethernet  HWaddr D6:C3:1C:7A:38:42  
          inet6 addr: fe80::d4c3:1cff:fe7a:3842/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1026 (1.0 KiB)  TX bytes:2322 (2.2 KiB)

打开浏览器访问  http://192.168.99.100
bingoogolapple commented 8 years ago

Docker 网络 - 端口

bridge网络端口绑定

➜  DockerNote docker inspect nginx   // 查看镜像使用的端口
[
    {
        "Id": "sha256:0d409d33b27e47423b049f7f863faa08655a8c901749c2b25b93ca67d01a470d",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "",
        "Created": "2016-06-01T18:00:59.551320897Z",
        "Container": "9ee32203e2b8db6a8f46ae6c205297583dbe901c86095774056c9500e4b82236",
        "ContainerConfig": {
            "Hostname": "b0cf605c7757",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "443/tcp": {},    // https用的端口
                "80/tcp": {}       // http用的端口
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.11.1-1~jessie"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) CMD [\"nginx\" \"-g\" \"daemon off;\"]"
            ],
            "Image": "27c47c1d75af4d2aee93efc33cbb3f5f29fbda50c6f88c28fa7e8a8550bb07cf",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": [],
            "Labels": {}
        },
        "DockerVersion": "1.9.1",
        "Author": "NGINX Docker Maintainers \"docker-maint@nginx.com\"",
        "Config": {
            "Hostname": "b0cf605c7757",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "443/tcp": {},
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.11.1-1~jessie"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "27c47c1d75af4d2aee93efc33cbb3f5f29fbda50c6f88c28fa7e8a8550bb07cf",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": [],
            "Labels": {}
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 182786784,
        "VirtualSize": 182786784,
        "GraphDriver": {
            "Name": "aufs",
            "Data": null
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:4dcab49015d47e8f300ec33400a02cebc7b54cadd09c37e49eccbc655279da90",
                "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
                "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
                "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
                "sha256:64d0c8aee4b0327b01ee09a220cef706bc9f68477368895f45838d3a5b59bbf2",
                "sha256:bbf4634aee1a53e8249fb098bf91840f2f939f601349b995d67bef6d46d21e71",
                "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
                "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
            ]
        }
    }
]
➜  DockerNote docker run -d --name web3 -p 主机端口号:容器端口号 nginx
➜  DockerNote docker run -d --name web3 -p 80:80 nginx
a4a1cd7d8c33ae135c4998e79760e303c2cd2e6db4156910f23677aa4f8b6d19
➜  DockerNote docker-machine inspect default    // 查看default这台主机的ip地址
{
    "ConfigVersion": 3,
    "Driver": {
        "IPAddress": "192.168.99.100",    // 主机的ip地址
        "MachineName": "default",
        "SSHUser": "docker",
        "SSHPort": 60789,
        "SSHKeyPath": "/Users/bingoogol/.docker/machine/machines/default/id_rsa",
        "StorePath": "/Users/bingoogol/.docker/machine",
        "SwarmMaster": false,
        "SwarmHost": "tcp://0.0.0.0:3376",
        "SwarmDiscovery": "",
        "VBoxManager": {},
        "HostInterfaces": {},
        "CPU": 1,
        "Memory": 1024,
        "DiskSize": 20000,
        "NatNicType": "82540EM",
        "Boot2DockerURL": "",
        "Boot2DockerImportVM": "",
        "HostDNSResolver": false,
        "HostOnlyCIDR": "192.168.99.1/24",
        "HostOnlyNicType": "82540EM",
        "HostOnlyPromiscMode": "deny",
        "NoShare": false,
        "DNSProxy": true,
        "NoVTXCheck": false
    },
    "DriverName": "virtualbox",
    "HostOptions": {
        "Driver": "",
        "Memory": 0,
        "Disk": 0,
        "EngineOptions": {
            "ArbitraryFlags": [],
            "Dns": null,
            "GraphDir": "",
            "Env": [],
            "Ipv6": false,
            "InsecureRegistry": [],
            "Labels": [],
            "LogLevel": "",
            "StorageDriver": "",
            "SelinuxEnabled": false,
            "TlsVerify": true,
            "RegistryMirror": [
                "https://l8d1is83.mirror.aliyuncs.com"
            ],
            "InstallURL": "https://get.docker.com"
        },
        "SwarmOptions": {
            "IsSwarm": false,
            "Address": "",
            "Discovery": "",
            "Master": false,
            "Host": "tcp://0.0.0.0:3376",
            "Image": "swarm:latest",
            "Strategy": "spread",
            "Heartbeat": 0,
            "Overcommit": 0,
            "ArbitraryFlags": [],
            "Env": null,
            "IsExperimental": false
        },
        "AuthOptions": {
            "CertDir": "/Users/bingoogol/.docker/machine/certs",
            "CaCertPath": "/Users/bingoogol/.docker/machine/certs/ca.pem",
            "CaPrivateKeyPath": "/Users/bingoogol/.docker/machine/certs/ca-key.pem",
            "CaCertRemotePath": "",
            "ServerCertPath": "/Users/bingoogol/.docker/machine/machines/default/server.pem",
            "ServerKeyPath": "/Users/bingoogol/.docker/machine/machines/default/server-key.pem",
            "ClientKeyPath": "/Users/bingoogol/.docker/machine/certs/key.pem",
            "ServerCertRemotePath": "",
            "ServerKeyRemotePath": "",
            "ClientCertPath": "/Users/bingoogol/.docker/machine/certs/cert.pem",
            "ServerCertSANs": [],
            "StorePath": "/Users/bingoogol/.docker/machine/machines/default"
        }
    },
    "Name": "default"
}

打开浏览器访问  http://192.168.99.100

➜  DockerNote docker inspect web3
[
    {
        "Id": "a4a1cd7d8c33ae135c4998e79760e303c2cd2e6db4156910f23677aa4f8b6d19",
        "Created": "2016-07-02T04:02:00.084832957Z",
        "Path": "nginx",
        "Args": [
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 2754,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2016-07-02T04:02:00.237558836Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:0d409d33b27e47423b049f7f863faa08655a8c901749c2b25b93ca67d01a470d",
        "ResolvConfPath": "/mnt/sda1/var/lib/docker/containers/a4a1cd7d8c33ae135c4998e79760e303c2cd2e6db4156910f23677aa4f8b6d19/resolv.conf",
        "HostnamePath": "/mnt/sda1/var/lib/docker/containers/a4a1cd7d8c33ae135c4998e79760e303c2cd2e6db4156910f23677aa4f8b6d19/hostname",
        "HostsPath": "/mnt/sda1/var/lib/docker/containers/a4a1cd7d8c33ae135c4998e79760e303c2cd2e6db4156910f23677aa4f8b6d19/hosts",
        "LogPath": "/mnt/sda1/var/lib/docker/containers/a4a1cd7d8c33ae135c4998e79760e303c2cd2e6db4156910f23677aa4f8b6d19/a4a1cd7d8c33ae135c4998e79760e303c2cd2e6db4156910f23677aa4f8b6d19-json.log",
        "Name": "/web3",
        "RestartCount": 0,
        "Driver": "aufs",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "80"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "StorageOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": -1,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "BlkioIOps": 0,
            "BlkioBps": 0,
            "SandboxSize": 0
        },
        "GraphDriver": {
            "Name": "aufs",
            "Data": null
        },
        "Mounts": [],
        "Config": {
            "Hostname": "a4a1cd7d8c33",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "443/tcp": {},
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.11.1-1~jessie"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "nginx",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "2605534f8e40172c73a9532cdd9b37ccd13d0ede70e2102bfb1e1010b1ff155c",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {        // 端口绑定
                "443/tcp": null,
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "80"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/2605534f8e40",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "44bc8e6dd86d5169f4d2ceef664f44fdd398ba0cd6885f2af405632fadaa3f40",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.4",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:04",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "51f5af98eba61a9dced37947fb7df6e96a53b9f37fa2141b03fbc23f65796018",
                    "EndpointID": "44bc8e6dd86d5169f4d2ceef664f44fdd398ba0cd6885f2af405632fadaa3f40",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:04"
                }
            }
        }
    }
]

或者

➜  DockerNote docker port web3
80/tcp -> 0.0.0.0:80
➜  DockerNote docker rm -f web3
web3
➜  DockerNote docker run -d --name web3 -p 80 nginx      // 公布容器的80端口,指向主机上的随机的端口
8f3e9984e5d7922f8e5de06d16f9cb52fa62f7cf837ed736b8fe9d1e893ef707
➜  DockerNote docker port web3
80/tcp -> 0.0.0.0:32768

浏览器中访问 http://192.168.99.100:32768

➜  DockerNote docker rm -f web3
web3
➜  DockerNote docker run -d --name web3 --publish-all nginx    // 不需要手动指定端口或端口的映射关系,会自动公布在镜像里设置的所有需要公布的端口
➜  DockerNote docker run -d --name web3 -P nginx                 // 上面那条语句的简写形式
79d840cc426df17ea124886dbe6a685c642acae48625607fc79b79b2f061b25c
➜  DockerNote docker port web3
443/tcp -> 0.0.0.0:32769
80/tcp -> 0.0.0.0:32770
bingoogolapple commented 8 years ago

Docker 网络 - 自定义网络

➜  DockerNote docker network create --driver bridge web
1fc17e46d238dce4c8b8ceee62a54772918f1d47d0833f30bdc324619019036f
➜  DockerNote docker network inspect web
[
    {
        "Name": "web",
        "Id": "1fc17e46d238dce4c8b8ceee62a54772918f1d47d0833f30bdc324619019036f",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1/16"
                }
            ]
        },
        "Internal": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
➜  DockerNote docker run -d --name web5 --net web nginx
0eaacfb27f39a43cda0278104ffbbf280300c4901d57933ed271c0c014505508
➜  DockerNote docker network inspect web               
[
    {
        "Name": "web",
        "Id": "1fc17e46d238dce4c8b8ceee62a54772918f1d47d0833f30bdc324619019036f",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1/16"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "0eaacfb27f39a43cda0278104ffbbf280300c4901d57933ed271c0c014505508": {
                "Name": "web5",
                "EndpointID": "879aeb4350edf33c6fe793fef70f0805d9678665344b46fd6473919bd0013a40",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
➜  DockerNote docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                                           NAMES
0eaacfb27f39        nginx               "nginx -g 'daemon off"   About a minute ago   Up About a minute   80/tcp, 443/tcp                                 web5
79d840cc426d        nginx               "nginx -g 'daemon off"   About an hour ago    Up About an hour    0.0.0.0:32770->80/tcp, 0.0.0.0:32769->443/tcp   web3
9f70486baf32        nginx               "nginx -g 'daemon off"   2 hours ago          Up 2 hours                                                          web_none
8b2b180c16e6        nginx               "nginx -g 'daemon off"   2 hours ago          Up 2 hours          80/tcp, 443/tcp                                 web2
52d79ad6432e        nginx               "nginx -g 'daemon off"   2 hours ago          Up 2 hours          80/tcp, 443/tcp                                 web1
➜  DockerNote docker network connect web web3      // 把容器放到指定的网络里面
➜  DockerNote docker network inspect web     
[
    {
        "Name": "web",
        "Id": "1fc17e46d238dce4c8b8ceee62a54772918f1d47d0833f30bdc324619019036f",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1/16"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "0eaacfb27f39a43cda0278104ffbbf280300c4901d57933ed271c0c014505508": {
                "Name": "web5",
                "EndpointID": "879aeb4350edf33c6fe793fef70f0805d9678665344b46fd6473919bd0013a40",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "79d840cc426df17ea124886dbe6a685c642acae48625607fc79b79b2f061b25c": {
                "Name": "web3",
                "EndpointID": "16ee72e365818ee4e6bcecdbae62a12f4f3b8540a3494ae5ec01232f0b6953fb",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
➜  DockerNote docker exec -it web3 bash
root@79d840cc426d:/# ping web5                   // 此时web3和web5都在web这个网络里,docker里有个dns服务,可以直接用容器的名字                                                                                                                       
PING web5 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.168 ms
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.082 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.079 ms
^C--- web5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.075/0.101/0.168/0.039 ms
root@79d840cc426d:/# ip address         // 此时web3这个容器同时属于bridge和web这两个网络
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
15: eth0@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.4/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:4/64 scope link 
       valid_lft forever preferred_lft forever
20: eth1@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.3/16 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe12:3/64 scope link 
       valid_lft forever preferred_lft forever
root@79d840cc426d:/# exit
exit
➜  DockerNote docker network disconnect bridge web3    // 将web3这个容器从bridge网络里移除
➜  DockerNote docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "51f5af98eba61a9dced37947fb7df6e96a53b9f37fa2141b03fbc23f65796018",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Internal": false,
        "Containers": {        // 现在这里面已经看不到web3这个容器了
            "52d79ad6432e831deff32be53d5d61433e245e552b2f3567a5a7e72da6cec77f": {
                "Name": "web1",
                "EndpointID": "0db5b88023713270f341e23ad94e35ffe037e8e286d248d39ae9c20b581d1f0a",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "8b2b180c16e692421462a101625a7e3e8962b3dc2d61247fa18e013fefebad71": {
                "Name": "web2",
                "EndpointID": "37a3cbc6348591a276d75cdc15a04d77a1f088da32b70888eacc00ff4967e9d7",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]