docker--网络、数据卷

运行一个container的本身就是开启一个具有独立namespace的进程

进程有自己的网络,文件系统等.

docker通过run命令来启动一个container

运行一个container必须要指定一个image作为初始化的文件系统

对于不存在的image,docker会自动去registry里面下载对应的image,然后再运行container

一.网络


docker使用bridge桥接的方式来实现container之间以及和外部的通信

查看host主机的网络信息


两张veth网卡对应两个container容器(正在运行的)

veth网络都桥接在docker0上(被分配)


可以用docker  inspect d9f82680332d  查看容器网络信息

network架构:

  在host主机上的一个veth{id}的虚拟网卡和一个container里面的eth0网卡一一映射

  host上的bridge负责把数据流在不同的veth间转发,实现网络的IO

  bridge(docker0)使用RFC1918私有网络,给每一个container分配ip

网络设置:

  通过--net参数来修改container的网络设置,默认是bridge的方式

  none表示关闭container的网路连接

  host表示使用主机的网络栈,这个时候host主机不会创建veth虚拟网卡映射到container

       container的网络和主机host的网络在同一网段

[root@VM_82_228_centos ~]# docker run -d --net host docker.io/centos python -m SimpleHTTPServer

3e69b247f2da554ddaa19424cece0654f54e4a832a187723a2a18d027dec3d77

-d:创建在后台运行

--net host:创建在本机host网络上

python -m SimpleHTTPServer:在容器内执行的命令(命令进程不终止,容器状态也不会停止)

host主机查看进程


已经监听8000端口


网络已经不是docke0分配


如果不将容器的网络挂在本机host上,那么如何进行访问容器的服务呢?

将本机host的端口同容器内的端口进行映射,详情看下面端口映射

DNS:

  默认使用host的dns设置

  可以通过--dns的参数来指定container自己的dns配置

端口映射:

docker通过采用端口映射的方式,允许把内部container的服务端口暴露到外部

使用-p参数可以指定需要暴露的container的内部端口,在不指定特定的host的对应端口的情况下,docker会自动分配(49000-49900)在一个host上的端口与其映射

  使用-P参数,表示暴露所有在image中通过EXPOSE指定的端口

root@docker ~]# docker run -dt -p 8000 saltstack/ubuntu-14.04 python -m SimpleHTTPServer

f7d04a31f5a2d6220a70c8dd7d78a5819bd722b3baab9e743c6c098533bd96ec

p 8000:表示将容器内的8000端口暴露了出来,由于这里没有明确指定用本机host的哪个端口与之映射,所以这里采用了随机端口

-p 8000:80 -p 443:443:映射容器中的多个端口(前面本机host端口,后面container端口)


通过查看container可以看见随机端口与之做了映射,然后访问主机host的这个端口
随机端口为32768
将容器的8000端口映射到host80端口

[root@docker ~]# docker run -dt -p 80:8000 saltstack/ubuntu-14.04 python -m SimpleHTTPServer

a9c3d1c7b6f4319ee34fe726eb5989b7f20bdf4e75e26ef4d5e734665c7efa75


如果想映射多个端口时:

  -p 8000:80 -p 443:443:映射容器中的多个端口,只需要在后面连接映射本机host端口对应container端口就行

 或者直接-P暴露掉container中的所有端口对应host本机的随机端口

二.数据卷

volume绑定:

  通过-v参数,可以把host上的一个目录绑定到container中,允许container对其进行读写

 -v /zam/web:/web 将本机host下面的test目录映射到container中下面的web目录

docker run -t -v /zam/web/:/web docker.io/centos sh -c "ls -al web "

由于命令执行完成后,container也就消亡了停止了

docker 数据卷

  -v, --volume list Bind mount a volume, 为container绑定一个数据卷

     docker run -it -v /zam/web/  -h shuju docker.io/centos

      -i:交互模式,直接进入到container容器中

  -t:tty,伪终端

  -h wadeson:指定为container设置hostname

  -v /data:container内的/data为挂载点

使用 docker  inspect   82202acb4588   查看挂载信息


source为本机host的目录映射到container中的/data目录

在host主机中创建文件


返回容器查看


验证成功

将本机host的/root目录挂载到容器中的/root目录

[root@VM_82_228_centos ~]# docker run -it -v /root/:/root -h shuju2 docker.io/centos

[root@shuju2 /]# ls /root/

centos7.tar

如果需要将目录挂载在container中只读:

docker run -it -v /root:/root:ro -h shuju3  docker.io/centos 

从一个指定的容器选择挂载点

相当于两个container共同使用本机host的挂载点

现在有两个容器,都是exited状态,现在启动一个容器,将启动的容器的挂载点选择上面图中的任何一个:

[root@docker ~]# docker run -it --volumes-from b8c05a805280 -h wadeson saltstack/ubuntu-14.04

root@wadeson:/# ls /data/

 root@wadeson:/#

参考:http://www.cnblogs.com/jsonhc/p/7760144.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容