《Docekr入门学习篇》——Docker网络及数据卷

Docker网络设置

默认情况下docker会创建一个桥接网卡[docker 0],docker有两种映射方式,一种是随机映射,一种是指定映射。

提示:生产场景一般不使用随机映射,但是随机映射的好处是由docker分配,端口不会冲突。

[root@linux-node1 ~]# docker run -d -P nginx
63cbe30165c8fb2ce7789a8173db6f2060705028ce6c326d1f0cd467bdee583c
[root@linux-node1 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                           NAMES
63cbe30165c8        nginx               "nginx -g 'daemon off"   8 seconds ago       Up 7 seconds        0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   drunk_bhabha
提示:物理机的32769被映射到80端口
-P代表随机映射
可以通过netstat和iptables的nat表查看
Dockerqi启动一个Nginx,指定81端口
[root@linux-node1 ~]# docker run -d -P nginx
63cbe30165c8fb2ce7789a8173db6f2060705028ce6c326d1f0cd467bdee583c
[root@linux-node1 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                           NAMES
63cbe30165c8        nginx               "nginx -g 'daemon off"   8 seconds ago       Up 7 seconds        0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   drunk_bhabha

提示:物理机的32769被映射到80端口
-P代表随机映射
Docker启动映射多端口
[root@linux-node1 ~]# docker run -d -p 443:443 -p 82:80 --name nginxv2 nginx
865aed79c5ec875c5d7a033267c9d124324201f92d66382a152d1743533a586b
[root@linux-node1 ~]# docker port nginxv2
443/tcp -> 0.0.0.0:443
80/tcp -> 0.0.0.0:82

Docker数据管理

Docker数据分为两种

   数据卷:-v /data

           -v src:dst

   数据卷容器:--volumes -from

数据卷可以理解为挂载,可以将数据mount到docker镜像中,当在docker镜像中写数据时,实际写入到了物理主机里。如果容器较多,则不方便管理。

数据卷设置

🌰:创建一个容器nginx-volume挂载到容器中的/data下

 

 

 

进入容器后目录下已有data目录

 

 

 

[root@5c001f75686b ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=5019468k,nr_inodes=1254867,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=34,pgrp=0,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=22947)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-home on /home type xfs (rw,relatime,attr2,inode64,noquota)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=1007304k,mode=700)
tmpfs on /run/user/42 type tmpfs (rw,nosuid,nodev,relatime,size=1007304k,mode=700,uid=42,gid=42)
gvfsd-fuse on /run/user/0/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
/dev/mapper/centos-root on /var/lib/docker/containers type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-root on /var/lib/docker/overlay2 type xfs (rw,relatime,attr2,inode64,noquota)
overlay on /var/lib/docker/overlay2/180e1b52b7d680a8bdde1de1a3e2648825fc85e19fa11941265c150484d8a316/merged type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/BWBOIVOVQWHIGRO5O3CI3Q7GWW:/var/lib/docker/overlay2/l/2TEZK7SQ26NG45MUBXBKB7MAQD:/var/lib/docker/overlay2/l/6LHCZI2WWRDQ2X5Q2FMJ7XJ3KP:/var/lib/docker/overlay2/l/WRVE7PAJLTFA5BYD55MBMJQ43V,upperdir=/var/lib/docker/overlay2/180e1b52b7d680a8bdde1de1a3e2648825fc85e19fa11941265c150484d8a316/diff,workdir=/var/lib/docker/overlay2/180e1b52b7d680a8bdde1de1a3e2648825fc85e19fa11941265c150484d8a316/work)
shm on /var/lib/docker/containers/5c001f75686b644ffdf7170160d778701f34bdbf75a0b713817b93e80c1d210e/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
proc on /run/docker/netns/86de57653d47 type proc (rw,nosuid,nodev,noexec,relatime)

可以通过docker inspect查看mount的状况

[root@5c001f75686b ~]# docker inspect -f {{.Mounts}} nginx-volume
[{volume 9db5ae89f6329b50586743973755a7573d6d87d892557f46660ff887645f1174 /var/lib/docker/volumes/9db5ae89f6329b50586743973755a7573d6d87d892557f46660ff887645f1174/_data /data local  true }]

Mount挂载的就是以下路径

[root@rbtnode1 ~]# cd /var/lib/docker/volumes/9db5ae89f6329b50586743973755a7573d6d87d892557f46660ff887645f1174/_data/
[root@rbtnode1 _data]# ll
总用量 0
创建一个文件进入docker查看
[root@rbtnode1 _data]# touch 11
[root@rbtnode1 _data]# ll
总用量 0
-rw-r--r-- 1 root root 0 7月  31 14:05 11
[root@rbtnode1 _data]# nsenter -t 3091 -u -i -n -p
[root@5c001f75686b _data]# ll
总用量 0
-rw-r--r-- 1 root root 0 7月  31 14:05 11

我们还可以使用-v指定一个卷用来作为存储

我们可以创建一个目录,用来指定。

[root@linux-node1 _data]# mkdir -p /data/docker-volume-nginx
[root@linux-node1 _data]# docker run -d --name nginx-volume-test2 -v /data/docker-volume-nginx/:/data nginx
b2bef96c8330583b555b576134e3f32db02050eb2bd3bb09defcfe89d4b72862

提示:-v /data/docker-volume-nginx 存储文件的目录

   data   容器中的目录

查看

[root@linux-node1 _data]# echo "123" >>/data/docker-volume-nginx/1.txt
root@b2bef96c8330:/# cat /data/1.txt 
123

提示:这种方法生产上会比较实用一些,但是这种方式dockerfile里不支持.因为这种方法不可移植

我们可以添加几个参数

[root@linux-node1 _data]# docker run -d --name nginx-volume-test2 -v /data/docker-volume-nginx/:/data:ro nginx

# 添加ro代表只读,可以使用只读的方式来挂载

容器还可以挂载文件

例如:我们挂载一个.bash_history,挂载完并删除

[root@linux-node1 ~]# docker run --rm -it -v /root/.bash_history:/.bash_history nginx /bin/bash
root@63ed2c5eef1c:/# head .bash_history 
ifcon

现在如果我们退出这个容器就会关闭

数据卷容器

数据卷容器就是可以让一个容器访问另一个容器的卷,不管这个容器是否是运行都可以访问到。

数据卷容器简单解释就是:它可以让这个数据在多个容器中共享

提示:如果我们现在停掉一个容器,数据卷容器还有一个好处就是不管这个容器是否在运行都会起作用,只要有容器在使用

posted @ 2019-09-29 17:29  Fire_Li  阅读(303)  评论(0编辑  收藏  举报