实验时,出现的问题(需要开启路由转发功能)
vim/etc/sysctl.conf
[root@localhost /]# systemctl restart network
[root@localhost /]# systemctl restart docker ##重启网卡和docker
Docker的数据管理
管理Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器( DataVolumes Containers) 。
一、数据卷
数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。
小实验:讲宿主机的/var/www 挂载到容器的/data1
[root@localhost /]# docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
##如何限制容器对共享目录的操作(只读)
## /var/www:/data1:ro 在后面加个:ro 即可
[root@735931bdf9e6 /]# echo 'rose' > /data1/rose.txt
[root@735931bdf9e6 /]# vi /data1/rose.txt
rose
~
## -itd和 -it 前者是后台启动 后者是前台启动 如果后面加环境如:/bin/bash 可以直接进去
查看数据是否共享
[root@735931bdf9e6 /]# exit
exit
[root@localhost /]# cd /var/www/
[root@localhost www]# ls
rose.txt
[root@localhost www]# cat rose.txt
rose
[root@localhost www]#
二、数据卷容器
如果需要在容器之间共享一些数据(就是容器与容器之间互相共享数据),最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。
需求:宿主机目录/var/www挂载到容器中的/data1。
查看共享的数据是否有问题
三、容器互联(使用centos镜像)
容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息
创建并运行源容器web1
[root@localhost www]# docker run -itd -P --name web1 centos:7 /bin/bash
8d88da2987b3cce6ea8ddb56f207a14ce896cf84e0eb8c7a28b2dd49e2be122e
创建并运行接收容器web2使用--link选项指定连接容器以实现容器互联
[root@localhost www]# docker run -itd -P --name web2 --link web1:web1 centos:7 /bin/bash
## --link 容器:连接的别名
3f05ee02338cdd8ad6b7c06f695551111500b27e9587e3b894bf9779b67a915a
[root@localhost www]# docker exec -it web2 /bin/bash
[root@3f05ee02338c /]# ping web1
PING web1 (172.17.0.2) 56(84) bytes of data.
64 bytes from web1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.108 ms
64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.061 ms
^C
--- web1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, t