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
    
  • 相关阅读:
    Oracle 自定义聚合函数
    PL/SQL Developer背景色设置
    Oracle 所有关键字查询视图 V$RESERVED_WORDS
    react创建ts项目
    chrome如何导出已经安装的扩展程序为.crx文件?
    If you would prefer to ignore this check, add SKIP_PREFLIGHT_CHECK=true to an .env file in your
    vue脚手架配置环境变量
    sourceTree系列二:创建分支,并推送到远程上
    sourceTree系列一:合并分支,把uat的代码合并到dev上
    如何在typescript中解决 error TS2451: Cannot redeclare block-scoped variable 'name'
  • 原文地址:https://www.cnblogs.com/l-hh/p/12567377.html
Copyright © 2011-2022 走看看