Docker 数据卷和数据卷容器
数据卷(Data Volumes):数据卷是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器,
特征
1.数据卷 可以在容器之间共享和重用
2.对数据卷的修改会立马生效
3.对数据卷的更新,不会影响镜像
4.数据卷 默认会一直存在,即使容器被删除
数据卷容器:如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。
数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载
数据卷:挂载宿主系统的存储空间
数据卷容器:挂载容器的存储空间(也可以实现容器之间文件的共享)
数据卷创建方式
注:数据卷默认会放到/var/lib/docker/volumes路径下
docker volume create 名字
查看所有的数据卷
docker volume ls
查看指定数据卷的详细信息(显示一个JSON格式的数据)
docker volume inspect mysql
语法格式:docker run -v 宿主机挂载点–name 容器名 -it 镜像名
[root@controller ~]# docker run -v /var/www:/data1 --name web11 -it centos:7 /bin/bash
[root@c920dab00c03 /]# ls
anaconda-post.log bin data1 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@c920dab00c03 /]# cd data1/
[root@c920dab00c03 data1]# touch test1
[root@c920dab00c03 data1]# ls
test1
另起一个终端查看是否有/var/www/test1文件
数据卷容器创建
1.先创建可以被挂载的容器web22
[root@docker ~]# docker run --name web22 -v /data1 -v /data2 -it centos:7 /bin/bash
[root@6b432f4fcfc7 /]# ls
anaconda-post.log data1 dev home lib64 mnt proc run srv tmp var
bin data2 etc lib media opt root sbin sys usr
2.另起终端,创建新的容器,指定挂载web22容器
[root@docker ~]# docker run -it --volumes-from web22 --name db1 centos:7 /bin/bash
[root@c0c357c27cae /]# cd data1/
[root@c0c357c27cae data1]# touch test111
[root@c0c357c27cae data1]# cd ../data2
[root@c0c357c27cae data2]# touch test222
3.在web22中查看/data1和/data2中是否有刚刚创建的
[root@c05dab4285e3 /]# cd data1/
[root@c05dab4285e3 data1]# ls
test111
[root@c05dab4285e3 data1]# cd /data2/
[root@c05dab4285e3 data2]# touch test222
[root@c05dab4285e3 data2]# ls
test222
实现了容器之间的共享
端口映射
-P:随机生成端口号
[root@docker ~]# docker run -d -P httpd:latest
[root@controller ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8e8bda0f8f07 httpd:latest "httpd-foreground" 3 minutes ago Up 3 minutes 0.0.0.0:49153->80/tcp romantic_joliot
'可观测到随机生成的端口号为49153'
-p:指定端口号
[root@controller ~]# docker run -d -p 123:80 httpd:latest
c0cad644f097a21e19507b1ef5b3540d65273990043b0d4cbf73fc619a6002dd
[root@controller ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c0cad644f097 httpd:latest "httpd-foreground" 23 seconds ago Up 21 seconds 0.0.0.0:123->80/tcp condescending_bardeen
容器互联
创建容器one和two之间通信 --link 容器one:one
[root@controller ~]# docker run -itd -P --name one centos:7 /bin/bash
9c6027fc258a0d87658c3a3d1d468780cd756f486dfdf40e0a07c5af5934231e
[root@controller ~]# docker run -itd -P --name two --link one:one centos:7 /bin/bash
d887f451ae1dbe0e1983de5e10a402982bc6c280b611a8bbda34c7f700e45885
[root@controller ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d887f451ae1d centos:7 "/bin/bash" 7 seconds ago Up 6 seconds two
9c6027fc258a centos:7 "/bin/bash" 53 seconds ago Up 52 seconds one
进入容器one 测试互联
[root@controller ~]# docker exec d887f451ae1d /bin/bash
[root@controller ~]# docker exec -it d887f451ae1d /bin/bash
[root@d887f451ae1d /]# ping one
PING one (172.17.0.4) 56(84) bytes of data.
64 bytes from one (172.17.0.4): icmp_seq=1 ttl=64 time=0.099 ms
64 bytes from one (172.17.0.4): icmp_seq=2 ttl=64 time=0.046 ms