zoukankan      html  css  js  c++  java
  • Docker网络和存储

    本节内容:

    • Docker网络访问
    • 端口映射
    • 数据管理

    一、Docker网络访问

    1. docker自带的网络

    • docker network ls:列出当前docker中已有的网络
    • docker network inspect:查看网络详情,比如查看网络中有哪些容器
    • docker run --network=<NETWORK>:指定运行容器时使用哪个网络

    2. host网络

    容器的网络接口跟主机一样。

    3. none网络

    除了lo接口外,容器没有任何其他网络接口。

    4. bridge网络

    这是新建容器时默认使用的网络,也是使用得最多的网络。网络中的所有容器可以通过IP互相访问。

    bridge网络通过网络接口docker0跟主机桥接,可以在主机上通过ifconfig docker0查看到该网络接口的信息。

    二、端口映射

    docker使用端口映射来让容器里面某一个端口对外。一种是随机映射,一种是指定端口映射。

    1. 随机映射

    docker run -P
        -P参数 随机映射端口。随机端口的好处是不会冲突。

    举个例子:

    [root@node1 ~]# docker pull nginx
    [root@node1 ~]# docker run -d -P nginx

    可以访问Docker日志:

    [root@node1 ~]# docker logs 1822a2ea3ff3
    172.16.4.81 - - [22/Aug/2017:09:20:25 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36" "-"
    2017/08/22 09:20:25 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.16.4.81, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "172.16.7.151:32768", referrer: "http://172.16.7.151:32768/"
    172.16.4.81 - - [22/Aug/2017:09:20:25 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://172.16.7.151:32768/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36" "-"

    2. 指定端口映射

    docker run -p hostPort:containerPort
    docker run -p ip:hostPort:containerPort
    docker run -p ip::containerPort
    docker run -p hostPort:containerPort:udp
        -p 指定端口映射,前面的是主机端口,后面的是容器端口。
    [root@node1 ~]# docker run -d -p 81:80 nginx

    三、数据管理

    两种方式:

    • 数据卷
    • 数据卷容器

    1. 数据卷

    启动一个容器,把宿主机的某个目录挂载到容器目录上。

    • -v /data
    • -v src:dst 指定一个目录挂载进容器。

    【示例1】:未指定宿主机目录挂载

    [root@node1 ~]# docker run -it --name volume-test1 -v /data centos    
    [root@5d485979254b /]# ls -l /data 
    total 0

    这个容器里的/data 肯定在宿主机的某个位置。打开一个新的终端,查看这个位置:

    [root@node1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
    5d485979254b        centos              "/bin/bash"              2 minutes ago       Up 2 minutes                                volume-test1                                 test
    [root@node1 ~]# docker inspect 5d485979254b

    在宿主机上的目录中创建文件:

    [root@node1 ~]# cd /var/lib/docker/volumes/7f37e83849f079275545b7d1f3381903795e946d113e1c43ff24fc1a7717e00f/_data
    [root@node1 _data]# ls -l
    total 0
    [root@node1 _data]# touch test.txt

    回到容器中,查看/data目录下是否有刚才创建的文件:

    [root@5d485979254b /]# ls -l /data 
    -rw-r--r--. 1 root root 0 Aug 23 02:07 test.txt

    【示例2】:指定宿主机目录挂载

    [root@node1 ~]# docker run -it -v /opt:/opt centos
    [root@850031902bb7 /]# ls /opt/
    ansible_playbooks  rh
    [root@850031902bb7 /]# exit
    exit

    宿主机的/opt:

    [root@node1 ~]# ls /opt
    ansible_playbooks  rh

    挂载的时候可以指定权限:

    [root@node1 ~]# docker run -it -v /opt:/opt:rw centos
    rw: 读写
    ro: 只读

    挂载单个文件到容器:

    [root@node1 ~]# docker run -it -v ~/.bash_history:/.bash_history centos

    2. 数据卷容器

    --volumes-from  让一个容器访问另外一个容器的卷

    【示例3】:创建一个容器作为数据卷,启动其他容器访问这个容器的卷。

    [root@node1 ~]# docker run -it --name nfs -v /data centos /bin/bash 
    [root@72bb5caa54db /]#

    Ctrl+P Ctrl +Q退出交互式容器的bash,这样容器就会在后台运行。

    [root@node1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    72bb5caa54db        centos              "/bin/bash"              37 seconds ago      Up 36 seconds                            nfs
    [root@node1 ~]# docker inspect 72bb5caa54db
    [root@node1 ~]# cd /var/lib/docker/volumes/8f1e1da837d5d86f79ac14e5d57c0e47243e3c68d5ca822d4f7a498386c07a59/_data
    [root@node1 _data]# touch test2.txt

    启动其他容器,访问这个容器的卷:

    [root@node1 _data]# docker run -it --name test1 --volumes-from nfs centos
    [root@9097c1af8e86 /]# ls /data/
    test2.txt
    [root@9097c1af8e86 /]# 

    这个数据卷容器可以用来作收容器间数据共享,哪怕这个数据卷容器nfs停了,依然可以通过其在宿主机上真实的目录访问里面的数据。这个数据卷容器创建后可以什么都不干,直接关闭,其他容器挂载过来。

  • 相关阅读:
    iOS开发多线程篇—GCD介绍
    IOS UI篇—UILabel的文字顶部对齐
    TableView编辑中实现多行删除的2中方法以及注意
    UITableView的新手——层次注意
    UITabBarItem编写的时候出现得图片显示异常,和有一些比较忽略的方法总结
    在ios开发中nil和NUll和Nilde区别————和如何判断连个对象的关系和UISlider不能拖动的问题
    iphone 手机屏幕和UIView和UIWindowde 的主要的区别
    iOS平常注意1
    ios优化复制大文件时,如何使内存运用最少且效率最高
    property在括号中应该怎样写
  • 原文地址:https://www.cnblogs.com/zhaojiankai/p/7741597.html
Copyright © 2011-2022 走看看