4. Docker数据管理
Docker 数据管理
数据卷
创建数据卷
docker volume create my-vol
查看所有的数据卷
docker volume ls
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local my-vol
查看数据卷的详细信息
docker volume inspect my-vol
[root@localhost ~]# docker volume inspect my-vol
[
{
"CreatedAt": "2018-08-17T08:15:42+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
挂载主机目录
挂载主机目录到容器
docker run -p 8080:8080 -d --mount type=bind,source=/root/first,target=/webapp centos-nodejs:1.0
[root@localhost ~]# docker run -p 8080:8080 -d --mount type=bind,source=/root/first,target=/webapp centos-nodejs:1.0
ecc09d5c7ecc5fd532bddcba6bdf1bca3db46f0554351e1a52e3c957c6759c0f
查看容器挂载信息
docker inspect ecc09d5c7ecc
"Mounts": [
{
"Type": "bind",
"Source": "/root/first",
"Target": "/webapp"
}
],
Docker 网络配置
Docker 基础网络配置
外部访问容器
启动容器时,使用 -P 或 -p 参数来指定端口映射,-P 随机生成本地端口绑定容器指定端口,-p 手动指定主机端口映射容器端口。
docker run -p 8080:8080 -d centos-nodejs:1.0
查看端口映射信息
docker ps
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ecc09d5c7ecc centos-nodejs:1.0 "node /app/index.js" About an hour ago Up About an hour 0.0.0.0:8080->8080/tcp xenodochial_mestorf
端口映射说明
默认映射所有地址所有端口
-p 8080:8080
效果同外部访问容器
映射到本机指定地址的指定端口
-p 127.0.0.1:8080:8080
docker run -p 127.0.0.1:8080:8080 -d centos-nodejs:1.0
[root@localhost ~]# docker run -p 127.0.0.1:8080:8080 -d centos-nodejs:1.0
6bb9a458519cc02ad3803e18d799f798a0c64cf36764a99f4b04f9a5a84f86cc
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6bb9a458519c centos-nodejs:1.0 "node /app/index.js" 3 seconds ago Up 2 seconds 127.0.0.1:8080->8080/tcp dreamy_panini
映射到主机地址的任意端口
-p 127.0.0.1::8080
docker run -p 127.0.0.1::8080 -d centos-nodejs:1.0
[root@localhost ~]# docker run -p 127.0.0.1::8080 -d centos-nodejs:1.0
be23197aef2a41efd029c63fb266088cc1ad90dffe486107288fb77849778329
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be23197aef2a centos-nodejs:1.0 "node /app/index.js" 57 seconds ago Up 56 seconds 127.0.0.1:32768->8080/tcp inspiring_lamarr
查看容器端口对应绑定的主机端口
docker port be23197aef2a(容器id) 8080
[root@localhost ~]# docker port be23197aef2a 8080
127.0.0.1:32768
容器互联
容器互联网络原理
Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给 docker0 接口。比如典型的 172.17.42.1,掩码为 255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。
当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。
创建一个自己的虚拟网桥
docker network create -d bridge my-bridge
创建两个链接到新网桥的两个容器
docker run -it --name test5 --network my-bridge centos
docker run -it --name test6 --network my-bridge centos
相互能够ping通,每台能够获取自己的本网段IP。
在test6 ping test5
[root@9ce1b27d2ec8 /]# ping test5
PING test5 (172.18.0.2) 56(84) bytes of data.
64 bytes from test5.my-bridge (172.18.0.2): icmp_seq=1 ttl=64 time=0.120 ms
64 bytes from test5.my-bridge (172.18.0.2): icmp_seq=2 ttl=64 time=0.094 ms
64 bytes from test5.my-bridge (172.18.0.2): icmp_seq=3 ttl=64 time=0.086 ms
--- test5 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.086/0.100/0.120/0.014 ms
在test 6查看其IP地址
test6 IP地址:172.18.0.3
[root@9ce1b27d2ec8 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
在test5 ping test6
[root@4abf9907b82c /]# ping test6
PING test6 (172.18.0.3) 56(84) bytes of data.
64 bytes from test6.my-bridge (172.18.0.3): icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from test6.my-bridge (172.18.0.3): icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from test6.my-bridge (172.18.0.3): icmp_seq=3 ttl=64 time=0.123 ms
--- test6 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.060/0.086/0.123/0.026 ms
在test5 查看其ip 地址
[root@4abf9907b82c /]# ip a
test5:172.18.0.2
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
作者:神奇二进制
文章出处:https://www.cnblogs.com/l-hh/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
文章如有叙述不当的地方,欢迎指正。如果觉得文章对你有帮助,可以精神上的支持 [推荐] 或者 [关注我] ,一起交流,共同进步!