本节内容:

  • 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. GO_01:Linux-CentOS之Go语言环境配置

    1.下载安装 下载当前最新版本,通过wget命令,当然你也可以手动下载之后再传入到Linux中,都可以. 本文安装的是1.8版本.由于Go语言的要求,需要配置gopath,而对应再gopath里按照g ...

  2. PyQt 5.4参考指南 ---- PyQt5和PyQt4之间的差异

    欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/in ...

  3. SMO详解

    转自:简书https://www.jianshu.com/p/55458caf0814 SVM通常用对偶问题来求解,这样的好处有两个:1.变量只有N个(N为训练集中的样本个数),原始问题中的变量数量与 ...

  4. word2vec原理CBOW与Skip-Gram模型基础

    转自http://www.cnblogs.com/pinard/p/7160330.html刘建平Pinard word2vec是google在2013年推出的一个NLP工具,它的特点是将所有的词向量 ...

  5. 5 Kafka 应用问题经验积累

    16.Kafka 配置文件同步 为了给kafka的进程添加GC日志信息,方便在以后重启的时候,加入GC日志: 修改bin/kafka-server-start.sh: export KAFKA_OPT ...

  6. 使用前端组件化思想修改todolist

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Linux服务器上使用curl命令发送报文

    报文格式如下: curl -l -H "Content-type: application/json" -X POST -d 'postdata' http://172.20.10 ...

  8. Codeforces Round #476 (Div. 2) [Thanks, Telegram!] C

    http://codeforces.com/contest/965/problem/C 题目大意:n个糖,k个人,每次最多只能拿M个糖,从第一个人开始拿,可以循环D次.问Arkady最多可以拿几块糖? ...

  9. Java并发编程原理与实战二十五:ThreadLocal线程局部变量的使用和原理

    1.什么是ThreadLocal ThreadLocal顾名思义是线程局部变量.这种变量和普通的变量不同,这种变量在每个线程中通过get和set方法访问, 每个线程有自己独立的变量副本.线程局部变量不 ...

  10. 【转】WCF光芒下的Web Service

    WCF光芒下的Web Service 学习.NET的开发人员,在WCF的光芒照耀下,Web Service 似乎快要被人遗忘了.因为身边做技术的人一开口就是WCF多么的牛逼!废话不多,本人很久不写博客 ...