《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
现在如果我们退出这个容器就会关闭
数据卷容器
数据卷容器就是可以让一个容器访问另一个容器的卷,不管这个容器是否是运行都可以访问到。
数据卷容器简单解释就是:它可以让这个数据在多个容器中共享
提示:如果我们现在停掉一个容器,数据卷容器还有一个好处就是不管这个容器是否在运行都会起作用,只要有容器在使用
我们以为我们是我们,但其实真的是这样吗?