容器内部不保存数据,只提供服务。
重要的数据需要使用外部卷存储。(数据持久化)
容器可以使用真机的目录,或者共享存储作为存储卷。
启动docker时,将真机的目录挂在到docker下:
docker run -it -v 真机目录:docker中目录 容器名
mkdir /tmp/docker_data
docker run -it -v /tmp/docker_data:/abc myos:test
# -v表示将本地目录与docker中的目录进行映射,会覆盖docker中对应目录的已有内容
# 真机上的/tmp/docker_data和docker中的/abc是同一个目录
# 多个容器可以使用真机上的同一个目录,从而实现数据的共享
# 一个docker可以使用真机上的多个目录作为卷
docker run -it -v /tmp/data1:/abc -v /tmp/data2:/def myos:test
# 多个docker也可以使用同一个目录作为卷,这样就实现了数据共享
如果想要实现多台主机上的多个docker容器共享一个目录
可以将NFS或者Ceph共享给多台主机,然后多台主机共享这个目录
例:使用NFS,实现多台主机上的多个docker共享同一个目录
NFS主机:
mkdir /data_dir
chmod 777 /data_dir
yum -y install nfs-utils
vim /etc/exports
/data_dir *(rw, no_root_squash)
systemctl restart nfs-server
systemctl restart nfs-secure
exports -rv
echo "hello nfs docker!" > /data_dir/index.html
docker主机:
yum -y install nfs-utils nfs-server
systemctl restart nfs-server
mkdir /mnt/page
mount -t nfs 192.168.80.1:/data_dir /mnt/page
docker run -it -v /mnt/page:/var/www/html myhttp:test
docker run -it -v /mnt/page:/var/www/html myhttp:test
# 两个docker容器共享同一个目录,192.168.80.1主机的/mnt/page
Docker网络架构:
docker network list #查看docker网络模型
bridge:桥接
host:仅主机,不常用
null:无网络,不常用
启动docker服务的时候,真机上会产生一个docker0的虚拟交换机,这个交换机连接所有的容器
docker network create --subnet=10.10.10.0/24 docker1 #创建一个名字为docker1的虚拟交换机,网段是10.10.10.0/24
# 通过ipconfig可以查看到这个交换机,但是名字不是docker1
docker run -it --network=docker1 myos:test #启动容器,指定使用的虚拟交换机
docker network inspect docker1 #查看虚拟交换机信息
在本地主机上(192.168.80.2)启动的docker容器,其他主机是不能访问这个容器的服务的
因此需要将docker容器的端口和本地主机上的端口进行绑定
docker run -it[d] -p 真机端口:容器服务对应端口 容器名
docker run -it[d] -p 80:80 myhttp:test #将本地的80端口和docker容器的80端口进行绑定
写总结的第七十五天!!!