zoukankan      html  css  js  c++  java
  • 4. Docker数据管理

    Docker 数据管理

    数据卷

    创建数据卷

    docker volume create my-vol
    

    查看所有的数据卷

    docker volume ls
    
    [root@localhost ~]# docker volume ls
    DRIVER              VOLUME NAME
    local               my-vol
    

    查看数据卷的详细信息

    docker volume inspect my-vol
    
    [root@localhost ~]# docker volume inspect my-vol
    [
        {
            "CreatedAt": "2018-08-17T08:15:42+08:00",
            "Driver": "local",
            "Labels": {},
            "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
            "Name": "my-vol",
            "Options": {},
            "Scope": "local"
        }
    ]
    

    挂载主机目录

    挂载主机目录到容器

    docker run -p 8080:8080 -d --mount type=bind,source=/root/first,target=/webapp centos-nodejs:1.0
    
    [root@localhost ~]# docker run -p 8080:8080 -d --mount type=bind,source=/root/first,target=/webapp centos-nodejs:1.0         
    ecc09d5c7ecc5fd532bddcba6bdf1bca3db46f0554351e1a52e3c957c6759c0f
    

    查看容器挂载信息

    docker inspect ecc09d5c7ecc
    
    "Mounts": [
                    {
                        "Type": "bind",
                        "Source": "/root/first",
                        "Target": "/webapp"
                    }
                ],
    

    Docker 网络配置

    Docker 基础网络配置

    外部访问容器

    启动容器时,使用 -P 或 -p 参数来指定端口映射,-P 随机生成本地端口绑定容器指定端口,-
    p手动指定主机端口映射容器端口

    docker run -p 8080:8080 -d  centos-nodejs:1.0
    

    查看端口映射信息

    docker ps
    
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
    ecc09d5c7ecc        centos-nodejs:1.0   "node /app/index.js"   About an hour ago   Up About an hour    0.0.0.0:8080->8080/tcp   xenodochial_mestorf
    

    端口映射说明

    默认映射所有地址所有端口

    -p 8080:8080
    效果同外部访问容器
    

    映射到本机指定地址的指定端口

    -p 127.0.0.1:8080:8080
    
    docker run -p 127.0.0.1:8080:8080 -d centos-nodejs:1.0
    [root@localhost ~]# docker run -p 127.0.0.1:8080:8080 -d centos-nodejs:1.0                                                    
    6bb9a458519cc02ad3803e18d799f798a0c64cf36764a99f4b04f9a5a84f86cc
    
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                      NAMES
    6bb9a458519c        centos-nodejs:1.0   "node /app/index.js"   3 seconds ago       Up 2 seconds        127.0.0.1:8080->8080/tcp   dreamy_panini
    

    映射到主机地址的任意端口

    -p 127.0.0.1::8080
    
    docker run -p 127.0.0.1::8080 -d centos-nodejs:1.0 
    
    [root@localhost ~]# docker run -p 127.0.0.1::8080 -d centos-nodejs:1.0    
    be23197aef2a41efd029c63fb266088cc1ad90dffe486107288fb77849778329
    
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                       NAMES
    be23197aef2a        centos-nodejs:1.0   "node /app/index.js"   57 seconds ago      Up 56 seconds       127.0.0.1:32768->8080/tcp   inspiring_lamarr
    

    查看容器端口对应绑定的主机端口

    docker port be23197aef2a(容器id) 8080  
    
    [root@localhost ~]# docker port be23197aef2a 8080   
    127.0.0.1:32768
    

    容器互联

    容器互联网络原理

    Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。

    同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给 docker0 接口。比如典型的 172.17.42.1,掩码为 255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。

    当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。

    image

    创建一个自己的虚拟网桥

    docker network create -d bridge my-bridge
    

    创建两个链接到新网桥的两个容器

    docker run -it --name test5 --network my-bridge  centos 
    
    docker run -it --name test6 --network my-bridge  centos 
    

    相互能够ping通,每台能够获取自己的本网段IP。

    在test6 ping test5

    [root@9ce1b27d2ec8 /]# ping test5
    PING test5 (172.18.0.2) 56(84) bytes of data.
    64 bytes from test5.my-bridge (172.18.0.2): icmp_seq=1 ttl=64 time=0.120 ms
    64 bytes from test5.my-bridge (172.18.0.2): icmp_seq=2 ttl=64 time=0.094 ms
    64 bytes from test5.my-bridge (172.18.0.2): icmp_seq=3 ttl=64 time=0.086 ms
    --- test5 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2002ms
    rtt min/avg/max/mdev = 0.086/0.100/0.120/0.014 ms
    

    在test 6查看其IP地址
    test6 IP地址:172.18.0.3

    [root@9ce1b27d2ec8 /]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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
    26: eth0@if27: <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 link-netnsid 0
        inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
           valid_lft forever preferred_lft forever
    

    在test5 ping test6

    [root@4abf9907b82c /]# ping test6
    PING test6 (172.18.0.3) 56(84) bytes of data.
    64 bytes from test6.my-bridge (172.18.0.3): icmp_seq=1 ttl=64 time=0.060 ms
    64 bytes from test6.my-bridge (172.18.0.3): icmp_seq=2 ttl=64 time=0.075 ms
    64 bytes from test6.my-bridge (172.18.0.3): icmp_seq=3 ttl=64 time=0.123 ms
    --- test6 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2001ms
    rtt min/avg/max/mdev = 0.060/0.086/0.123/0.026 ms
    

    在test5 查看其ip 地址

    [root@4abf9907b82c /]# ip a
    
    test5:172.18.0.2
    
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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
    24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
           valid_lft forever preferred_lft forever
    
  • 相关阅读:
    Python中的类(上)
    Django REST Framework API Guide 07
    Django REST Framework API Guide 06
    Django REST Framework API Guide 05
    Django REST Framework API Guide 04
    Django REST Framework API Guide 03
    Django REST Framework API Guide 02
    Django REST Framework API Guide 01
    Django 详解 信号Signal
    Django 详解 中间件Middleware
  • 原文地址:https://www.cnblogs.com/l-hh/p/12567377.html
Copyright © 2011-2022 走看看