本节内容:

  • 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 - - [/Aug/::: +] "GET / HTTP/1.1" "-" "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" "-"
// :: [error] #: * open() "/usr/share/nginx/html/favicon.ico" failed (: 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 - - [/Aug/::: +] "GET /favicon.ico HTTP/1.1" "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 : 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

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

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

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

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

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

[root@5d485979254b /]# ls -l /data
-rw-r--r--. root root Aug : 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" seconds ago Up 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停了,依然可以通过其在宿主机上真实的目录访问里面的数据。这个数据卷容器创建后可以什么都不干,直接关闭,其他容器挂载过来。

Docker网络和存储的更多相关文章

  1. Docker网络与存储(三)

    Docker的网络和存储 1.1 Docker的4种网络模式 host模式,使用--net=host指定. container模式,使用--net=container:NAME_or_ID指定. no ...

  2. Docker——网络和存储(数据卷)

    iptables -t nat -vnL |grep docker 查看docker桥接网卡:brctl show 本地端口随机映射到docker容器的80端口上: docker run -d -P ...

  3. 理解Docker(5):Docker 网络

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  4. Docker网络模式

    [编者的话] 本文是<Docker网络及服务发现>一书的一个章节,介绍了搭建Docker单主机网络的基础内容.关于Docker网络的更多内容,包括多主机的网络,请参考该书的其他章节. @C ...

  5. docker网络解析

    Docker概念和默认网络 什么是Docker网络呢?总的来说,网络中的容器们可以相互通信,网络外的又访问不了这些容器.具体来说,在一个网络中,它是一个容器的集合,在这个概念里面的一个容器,它会通过容 ...

  6. Docker 网络之进阶篇

    笔者在<Docker 基础 : 网络配置>一文中简单介绍了容器网络的基本用法,当时网络的基本使用方式还处于 --link 阶段.时过境迁,随着 docker 的快速发展,其网络架构也在不断 ...

  7. Docker 网络背后的原理探索

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 知其然而不知其 ...

  8. Docker网络解决方案 - Calico部署记录

    简单来说,实现docker跨主机容器间通信,常用的第三方网络方案是Flannel,Weave,Calico:Flannel会为每个host分配一个subnet,容器从这个subnet中分配ip,这些i ...

  9. Docker网络解决方案 - Weave部署记录

    前面说到了Flannel的部署,今天这里说下Docker跨主机容器间网络通信的另一个工具Weave的使用.当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来.容器在不同主机之间都使用的 ...

随机推荐

  1. 使用uwsgi配置django

    1.uwsgi的安装 pip install uwsgi 2.uwsgi的基本测试: 创建一个test.py文件,内容如下: def application(env, start_response): ...

  2. P2158 [SDOI2008]仪仗队 && 欧拉函数

    P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...

  3. 类python中高级用法

    1. __call__用法 class Foo: def __init__(self): print('init') def __call__(self, *args, **kwargs): prin ...

  4. 微信图片上传,遇到一个神奇的jgp

    微信图片上传,获取图片base64遇到一个神奇的   jgp var imgFn = function (event) { event.preventDefault(); var id = '#'+$ ...

  5. bzoj千题计划166:bzoj2179: FFT快速傅立叶

    http://www.lydsy.com/JudgeOnline/problem.php?id=2179 FFT做高精乘 #include<cmath> #include<cstdi ...

  6. (一)在Lingo中使用集合

    1.    在Lingo中使用集合 4.1 集合的基本用法和lingo模型的基本要素 Lingo虽然使用方便,但是如果要解决几万个,几十万个变量的优化问题时,我们总不能一个一个地列出x1,x2,…,x ...

  7. [Luogu 3275] SCOI2011 糖果

    [Luogu 3275] SCOI2011 糖果 第一道差分约束.感谢 AZe. 我的理解是根据一些不等关系建一个图,在图上边跑一个最长路(有时候是最短路). 因为可能存在负环,所以必须用 SPFA! ...

  8. 如何创建一个https的站点(超简单) 以及 IIS7.5绑定Https域名

    1.申请免费1年的ssl证书(传送门:https://common-buy.aliyun.com/?spm=5176.2020520163.cas.29.N0xOPM&commodityCod ...

  9. ARC官方文档翻译! - iPhone App开发外包专区 - 威锋论坛 - 威锋网

    CHENYILONG Blog ARC官方文档翻译! - iPhone App开发外包专区 - 威锋论坛 - 威锋网  http://bbs.weiphone.com/read-htm-tid-344 ...

  10. js 禁用右键菜单、拖拽、选中、复制

    //禁用拖拽 document.ondragstart = function () { return false; }; /** * 禁用右键菜单 */ document.oncontextmenu ...