docker实战(六):docker 网络及数据卷设置


docker实战(一):centos7 yum安装docker

docker实战(二):基础命令篇

docker实战(三):docker网络模式(超详细)

docker实战(四):docker架构原理

docker实战(五):docker镜像及仓库配置

docker实战(六):docker 网络及数据卷设置

docker实战(七):docker 性质及版本选择




绿色出现,关注优质资源..................................

Docker组成

Docker的组成部分docker类似于cs结构

Docker Client

Docker Server

我们可以将docker启动比喻成Docker server,我们执行命令的时候相当于Docker client

默认情况下,docker会创建一个桥接网卡[docker 0],docker有2种映射方式,一种是随机映射,一种是指定映射.生产场景一般不使用随机映射,但是随机映射的好处就是由docker分配,端口不会冲突

======================================================

一、Docker网络设置

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

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

案例1:使用docker启动nginx随机映射配置

[root@docker-02 ~]# docker run -d -P nginx
c766dd075329785635b90a894822466f2c897b5b943465321e7b17700c3bd638
[root@docker-02 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
c766dd075329        nginx               "nginx -g 'daemon ..."   21 seconds ago      Up 20 seconds       0.0.0.0:32768->80/tcp   wonderful_bhaskara

提示:物理机的32769被映射到80端口
-P代表随机映射
http://192.168.227.132:32768/

我们可以查看我们的端口

我们可以看一下iptables查看Nat表

docker默认会使用dhcp分配IP地址,但是我们如果想访问到需要设置iptables

我们可以使用docker logs [ID/Name]来查看日志

案例2:使用docker启动一个nginx,指定91端口 

 [root@docker-02 ~]# docker run -d -p 192.168.227.132:91:80 --name mynginx nginx
313b19ade1de8709d064482b901408233711622203291a03a077adc826d00f3c
[root@docker-02 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                        NAMES
313b19ade1de        nginx               "nginx -g 'daemon ..."   10 seconds ago      Up 10 seconds           192.168.227.132:91->80/tcp   mynginx
c766dd075329        nginx               "nginx -g 'daemon ..."   45 minutes ago      Up 45 minutes           0.0.0.0:32768->80/tcp        wonderful_bhaskara
5c7b37d5c51f        centos              "/bin/bash"              3 days ago          Exited (0) 2 days ago                                my-test提示: -d代表后台运行 -p 指定端口 --name 指定名称

访问如下:

通过端口映射,我们就可以非常方便的去访问到容器内部的服务

案例3:docker 启动映射多端口

[root@docker-02 ~]# docker run -d -p 443:443 -p 92:80 --name nginxv2 nginx
0f8b52c7db4ed5229ed5ad571d65a7128c37e6a4f91e415696b661b8a958b24c
[root@docker-02 ~]# docker port nginxv2
443/tcp -> 0.0.0.0:443
80/tcp -> 0.0.0.0:92

二、Docker数据管理

Docker数据分为两种:

数据卷: -v /data

               -v src:dst

数据卷容器: --volumes-from

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

数据卷设置

案例:我们创建一个容器,起名叫nginx-volume-test 挂载到容器中的/data目录下

[root@docker-02 ~]# docker run -d --name nginx-volume-time -v /data nginx
a8d0a913f8a3b33b674a76b258895b42bf8506b29ab51c5778755027b7c58834

进入容器,目录下已经有我们data目录

[root@docker-02 ~]# docker exec -it nginx-volume-time /bin/bash
root@a8d0a913f8a3:/# ls 
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
看到刚才我们挂载的数据目录data

我们可以查看当前挂载目录

root@a8d0a913f8a3:/data# mount
overlay on / type overlay (rw,relatime,seclabel,lowerdir=/var/lib/docker/overlay2/l/EL3ILRSJQ4PICSYIHELJAAAC7V:/var/lib/docker/overlay2/l/LIQXIO6LLOY6QBZMZHOESYOH3Y:/var/lib/docker/overlay2/l/VOHPHJVE4AQLYY7EIKVBONVT4H:/var/lib/docker/overlay2/l/EGMK6TTANNVN6VWTWXQLNJABZR,upperdir=/var/lib/docker/overlay2/309617d12cde1b0a28533a3f1dca603eea81af6a774b349065d7a0f412ed7806/diff,workdir=/var/lib/docker/overlay2/309617d12cde1b0a28533a3f1dca603eea81af6a774b349065d7a0f412ed7806/work)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,seclabel,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=666)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime,seclabel)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (ro,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpuacct,cpu type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/net_cls type cgroup (ro,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (ro,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime,seclabel)
/dev/mapper/centos-var on /data type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/centos-var on /etc/resolv.conf type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/centos-var on /etc/hostname type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/centos-var on /etc/hosts type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel,size=65536k)
/dev/mapper/centos-var on /run/secrets type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
proc on /proc/bus type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/fs type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/irq type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime)
tmpfs on /proc/acpi type tmpfs (ro,relatime,seclabel)
tmpfs on /proc/kcore type tmpfs (rw,nosuid,seclabel,mode=755)
tmpfs on /proc/keys type tmpfs (rw,nosuid,seclabel,mode=755)
tmpfs on /proc/timer_list type tmpfs (rw,nosuid,seclabel,mode=755)
tmpfs on /proc/timer_stats type tmpfs (rw,nosuid,seclabel,mode=755)
tmpfs on /proc/sched_debug type tmpfs (rw,nosuid,seclabel,mode=755)
tmpfs on /proc/scsi type tmpfs (ro,relatime,seclabel)
tmpfs on /sys/firmware type tmpfs (ro,relatime,seclabel)
提示:虽然我们不知道mount到哪里,但是在却有date目录

我们可以通过docker inspect来查看mount的情况

[root@docker-02 ~]# docker inspect -f {{.Mounts}} nginx-volume-time
[{volume 1462c3690dc6677d0e7af3b35d182845aca911345f72ce5571bc16f2ea74ed10 /var/lib/docker/volumes/1462c3690dc6677d0e7af3b35d182845aca911345f72ce5571bc16f2ea74ed10/_data /data local  true }]

mount挂载就是我们下面路径下的内容

[root@docker-02 ~]# cd        /var/lib/docker/volumes/1462c3690dc6677d0e7af3b35d182845aca911345f72ce5571bc16f2ea74ed10/_data
[root@docker-02 _data]#  pwd
/var/lib/docker/volumes/1462c3690dc6677d0e7af3b35d182845aca911345f72ce5571bc16f2ea74ed10/_data

 我们可以在这个文件下创建一个文件,然后在进容器中进行查看

[root@docker-02 _data]# touch yhdocker.txt

[root@docker-02 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                                      NAMES
a8d0a913f8a3        nginx               "nginx -g 'daemon ..."   19 minutes ago      Up 19 minutes           80/tcp                                     nginx-volume-time
0f8b52c7db4e        nginx               "nginx -g 'daemon ..."   27 minutes ago      Up 27 minutes           0.0.0.0:443->443/tcp, 0.0.0.0:92->80/tcp   nginxv2
313b19ade1de        nginx               "nginx -g 'daemon ..."   33 minutes ago      Up 33 minutes           192.168.227.132:91->80/tcp                 mynginx
c766dd075329        nginx               "nginx -g 'daemon ..."   About an hour ago   Up About an hour        0.0.0.0:32768->80/tcp                      wonderful_bhaskara
5c7b37d5c51f        centos              "/bin/bash"              3 days ago          Exited (0) 2 days ago                                              my-test
[root@docker-02 ~]# docker exec -it nginx-volume-time /bin/bash
root@a8d0a913f8a3:/# ls /data/
abcdocker.txt

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

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

exit
[root@docker-02 ~]# cd /var/lib/docker/volumes/1462c3690dc6677d0e7af3b35d182845aca911345f72ce5571bc16f2ea74ed10/_data
[root@docker-02 _data]# mkdir -p /data/docker-volume-nginx
[root@docker-02 _data]# docker run -d --name nginx-volume-test2 -v /data/docker-volume-nginx/:/data nginx
e5cfd987f975d62a5e64b36b6e097e7787dea4869a910f3b08ca303f1c0f191b

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

查看

[root@docker-02 ~]# docker exec -it nginx-volume-test2 /bin/bash
root@e5cfd987f975:/# ls /data/1.txt
/data/1.txt

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

我们可以添加几个参数

[root@docker-02 ~]# cd /var/lib/docker/volumes/1462c3690dc6677d0e7af3b35d182845aca911345f72ce5571bc16f2ea74ed10/_data
[root@docker-02 _data]# docker run -d --name nginx-volume-test3 -v /data/docker-volume-nginx/:/data:ro nginx
e614383a89318952b51bfd829b19eb72ebd1f58797e6f90bc17b1cb0a7044a41

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

容器还可以挂载文件

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

[root@docker-02 _data]# docker run --rm -it -v /root/.bash_history:/.bash_history nginx /bin/bash
root@0d8abcbbb930:/# head .bash_history
ifconfi
ifconfig
yum search ifconfig
yum install net-tools.x86_64
ifconfig
ip route
clear
hostname
vi /etc/hostname
reboot
现在如果我们退出这个容器就会关闭

容器数据之间同步案例:

[root@docker-02 ~]# docker run -d --name nfs -v /root/nfs-data:/data nginx 
30c74a55685050027316347b6de20058af3665fb87b1fd7bca14e7316e8e900e
[root@docker-02 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES
30c74a556850        nginx               "nginx -g 'daemon off"   4 seconds ago       Up 4 seconds        80/tcp, 443/tcp                            nfs
b2bef96c8330        nginx               "nginx -g 'daemon off"   2 hours ago         Up 2 hours          80/tcp, 443/tcp                            nginx-volume-test2
e3356d281a09        nginx               "nginx -g 'daemon off"   3 days ago          Up 3 days           80/tcp, 443/tcp                            nginx-volume-time

[root@docker-02 ~]# docker run --rm -it  --volumes-from nfs centos /bin/bash
[root@1a29a9cdffdf /]# cd /data/
[root@1a29a9cdffdf data]# ls
[root@1a29a9cdffdf data]# touch 123456567
切换进去查看

[root@docker-02 ~]# cd nfs-data/
[root@docker-02 nfs-data]# ls
123456567

数据卷容器

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

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

[root@docker-02 ~]# docker run -it --rm --name volume-test3 --volumes-from nginx-volume-test2 centos /bin/bash
[root@3498004e9a1f /]# 

--volumes-from 另一个容器的名称

此时我们可以看到根目录下有data目录,因为默认是没有的

[root@docker-02 ~]# docker run -it --rm --name volume-test3 --volumes-from nginx-volume-test2 centos /bin/bash
[root@3498004e9a1f /]# ls /data/1.txt 
/data/1.txt

现在我们可以访问到nginx-volume-test2下面挂载的目录,这就实现类似nfs的功能

提示:我们现在如果停掉test2 一样可以访问,数据卷容器还有一个好处是不管这个容器是否运行都会起作用,只要有容器在使用数据卷容器就无法删除

over!!!!!!!!!!!!!!!!!!!!!!


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值