4.docker数据卷与网络

数据卷

我们知道Dokcer容器中仅仅包含镜像文件部分,容器停止,数据就会丢失。为了实现对进程运行的数据或可变的数据进行永久保存,我们将数据存在数据卷中,Docker提供两种形式数据管理。

  • 数据卷(Data Volumes)
  • 数据卷容器管理(Data Volumn Containers)也叫容器共享卷

这里我们使用一个nginx 官方镜像,来说明数据卷的使用。

拉取httpd镜像

[root@docker-daemon ~]# docker pull nginx

[root@docker-daemon ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx         latest              3f8a4339aadd        4 weeks ago         108.5 MB

数据卷

所谓创建数据卷,就是在使用docker run命令的时候,使用-v标记来创建一个数据卷并挂在到容器中,这里我们创建一个/data目录,并在里面放一个文件index.html,然后将其挂载到httpd镜像中。

格式

  • -v /data:将docker中的目录挂载到宿主机上
  • -v host_dir:container_dir:指定宿主机和容器中的目录

1.创建我们的web页面

[root@docker-daemon ~]# mkdir /data
[root@docker-daemon ~]# echo "

Hello Docker

" > /data/index.html

2.将宿主目录挂载到容器的/usr/share/nginx/html目录

[root@docker-daemon ~]# docker  run -d -p 80:80 -v /data:/usr/share/nginx/html   --name my_nginx nginx:latest
451fe3283af42029b6ad685accdb204f834fc1e83db1987d16983e4bf17e1b10=

现在我们就可以直接在宿主机上修改容器内web页面了。

4.docker数据卷与网络_第1张图片
图片.png

我们可以通过inspect命令查看挂载情况

[root@docker-daemon ~]# docker inspect -f "{{.Mounts}}" my_nginx
[{ /data /usr/share/nginx/html   true rprivate}]

容器共享卷

所谓容器共享卷就是多个容器使用同一个数据卷在运行时,我们通过--volumes-from来指定.

示例:此处我们再起一个容器my_nginx2共享容器my_nginx的数据卷

[root@docker-daemon ~]# docker  run -d -p 81:80 --volumes-from my_nginx   --name my_nginx2 nginx:latest
4885b0012882975ef8f73ace6ba9e037cf0d11da4621667a78175b466b0d4d04

网络

Docker安装完成后默认会创建三个网络,我们可以使用docker network ls命令查看。

网络类型 说明 用途
none 封闭式容器 不参与网络通信 ,运行此类容器中的进程仅能访问本地回环接口 常用于备份、进程诊断及各种离线任务
bridge 桥接式容器 拥有两个接口,回环接口和连接至主机某桥设备的以太网接口 默认接口,主要用于与外接进行通信
host 开放式容器 与宿主机使用同一个网络栈 常用于直接暴露端口给外部机器访问
container: WEB 联盟式容器 两个容器使用同一个网络协议栈 常用于多个容器使用同一个ipd地址达到高可用的效果

创建容器时,可以为docker run命令使用--network选项知名要加入的网络。

示例:
桥接式容器

# docker run -it --rm --name my_centos_bridge dengyou/centos:net-tools
[root@cb7ed2d16a20 /]# ifconfig |awk '/netmask/{print $2}'
172.17.0.2 //docker0分配的ip地址
127.0.0.1

我们还可以使用--hostname--dns来指定主机名和IP地址

# docker run -it --name my_centos_1 --rm --hostname c1.dengyou.com --dns 8.8.8.8  dengyou/centos:net-tools
[root@c1 /]# hostname    
c1.dengyou.com
[root@c1 /]# cat /etc/resolv.conf 
nameserver 8.8.8.8

--add-host:添加主机名解析

# docker run -it --name my_centos_1 --rm --hostname c1.dengyou.com --dns 8.8.8.8  --add-host "www.idx.com:192.168.1.93"  dengyou/centos:net-tools
[root@c1 /]# cat /etc/hosts|grep www
192.168.1.93    www.idx.com

封闭时容器

# docker run -it --rm --name my_centos_none --net none  dengyou/centos:net-tools
[root@c336560f7106 /]# ifconfig |awk '/netmask/{print $2}'
127.0.0.1  //只有回环地址

开放式容器

[root@docker-daemon ~]# docker run -it --rm --name my_centos_host --net host  dengyou/centos:net-tools
[root@docker-daemon /]# ifconfig |awk '/netmask/{print $2}'
172.17.0.1
192.168.1.224
127.0.0.1

联盟时容器

容器centos_one

[root@docker-daemon ~]# docker run -it --name cenot_one --net bridge dengyou/centos:net-tools
[root@054189c3c767 /]# ifconfig |awk '/netmask/{print $2}'
172.17.0.2
127.0.0.1

容器centos_two

[root@docker-daemon ~]# docker run -it --name centos_two --net container:centos_one dengyou/centos:net-tools
[root@41a0e97ee9b9 /]# ifconfig  |awk '/netmask/{print $2}'
172.17.0.2
127.0.0.1

从上面可以看出,centos_one和centos_two共享同一个协议栈。

端口映射

使用格式

  • -p :将指定的容器端口映射至主机的所有地址的一个动态端口
  • - p ::映射指定的主机端口
  • -p :::将容器的指定端口映射到主机指定ip的动态端口
  • -p:::将指定的容器端口映射至主机指定ip的端口
  • - P:动态端口:指堆积端口,具体的映射结果可使用docker port命令查看

你可能感兴趣的:(4.docker数据卷与网络)