接上一篇文章

【容器技术】Docker容器技术入门(一)

今天接着上次聊一聊有关Docker网络、数据存储相关的技术点



01 .Docker网络模式

Dokcer 通过使用 Linux 桥接提供容器之间的通信,Docker的网络模式有四种

分别是以下四种模式

host 模式,使用--net=host 指定。

container 模式,使用--net=container:NAMEorID 指定。

none 模式,使用--net=none 指定。

bridge 模式,使用--net=bridge 指定,默认配置

host 模式----------------------------------------------------

如果容器使用 host 模式,那么容器将不会获得一个独立的 Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡与配置 IP 等,而是使用宿主机的 IP 和端口。就和直接跑在宿主机中一样。但是容器的文件系统、进程列表等还是和宿主机隔离的。

container 模式----------------------------------------------------

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡与配置 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他方面仍然是隔离的。

none模式----------------------------------------------------

此模式不同于前两种,Docker 容器有自己的 Network Namespace,但是,Docker容器没有任何网络配置。而是需要我们手动给 Docker容器添加网卡、配置 IP 等。

bridge 模式----------------------------------------------------

此模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace,并将一个主机上的Docker容器连接到一个虚拟网桥上。





02 .运行容器





[root@centos7 ~]# docker run -d -P nginx  #-d启动到后台运行
6135db66a7d7c1237901a79974f88f1079b3d467c14ce83fc46bc6b4eb8b3240
[root@centos7 ~]# docker ps
CONTAINER ID  IMAGE  COMMAND    CREATED   STATUS   PORTS   NAMES
6135db66a7d7   nginx   "nginx -g 'daemon off"   33 seconds ago  Up 31 seconds   0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   gigantic_meitner

随机一个端口去自动映射80

参数说明

docker -P  随机端口映射

docker -p 指定端口映射

-p hostport:containerport

-p ip:hostport:containerport

实例说明

[root@centos7 ~]# docker run -d -p 81:80 nginx
3ca9f847bebec3684952b0f2c081d31f84b9489de50b635246d9a592cc06d46c
[root@centos7 ~]# docker ps
CONTAINER ID   IMAGE   COMMAND  CREATED   STATUS   PORTS   NAMES
3ca9f847bebe  nginx  "nginx -g 'daemon off"  8 seconds ago   Up 6 seconds  443/tcp, 0.0.0.0:81->80/tcp  goofy_mcnulty

可以通过指定的端口来访问启动的容器服务

03.Docker数据存储


docker管理数据的方式有两种:

数据卷

数据卷容器

数据卷

数据卷是一个或多个容器专门指定绕过Union File System的目录,为持续性或共享数据提供一些有用的功能:

数据卷可以在容器间共享和重用

数据卷数据改变是直接修改的

数据卷数据改变不会被包括在容器中

数据卷是持续性的,直到没有容器使用它们

参数说明

-v /data直接将数据目录挂载到容器/data目录

-v src:dst 将物理机目录挂载到容器目录

实例操作

[root@centos7 ~]# docker run -it --name test-001 -v /data centos
[root@4578675314b9 /]# ls -l /data/
total 0
[root@centos7 ~]# docker ps
CONTAINER ID   IMAGE  COMMAND  CREATED  STATUS  PORTS   NAMES
4578675314b9  centos  "/bin/bash"  2 minutes ago Up 2 minutes test-001
[root@centos7 ~]# docker inspect 4578675314b9
"Mounts": [
           {
               "Name": "ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115",
               "Source": "/var/lib/docker/volumes/ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115/_data",
             "Destination": "/data", ##可以看出是将容器中的存储目录挂载到/data
               "Driver": "local",
               "Mode": "",
               "RW": true,
               "Propagation": ""
           }
       ],
[root@centos7 ~]# cd /var/lib/docker/volumes/ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115/_data  ###这是物理机的目录
[root@centos7 _data]# ll
total 0
[root@centos7 _data]# mkdir test

容器里查看数据

[root@4578675314b9 /]# cd /data/  ###这个是容器里的目录
[root@4578675314b9 data]# ll
total 0
drwxr-xr-x 2 root root 6 Apr 10 08:54 test

可以看出容器的数据目录下同样存在刚刚物理机创建的test目录


同样还可以使用下面的方法挂载

docker run -it -v /data1:/mnt centos          

#前者是物理机目录(挂载成功自动在物理机上创建此目录)后者是容器目录

[root@centos7 ~]# docker run -it -v /data1:/mnt centos
[root@425569ce9eef /]# cd /mnt/
[root@425569ce9eef mnt]# ll
total 0
[root@centos7 ~]# cd /data1/
[root@centos7 data1]# echo "hello">test.txt
[root@centos7 data1]# ll
total 4
-rw-r--r-- 1 root root 6 Apr 10 17:09 test.txt
[root@centos7 data1]# cat test.txt
hello

检查容器目录是否有文件与内容

[root@425569ce9eef mnt]# ll
total 4
-rw-r--r-- 1 root root 6 Apr 10 09:09 test.txt
[root@425569ce9eef mnt]# cat test.txt
hello
[root@425569ce9eef mnt]# pwd
/mnt
[root@425569ce9eef mnt]# hostname
425569ce9eef

此种方法适合开发代码管理,代码目录直接挂载到容器中,修改WEB站点目录即可访问

docker run -it -v /data2:/opt:ro centos

#指定只读权限进行挂载

docker run -it -v /data2:/opt:rw centos 

#指定读写权限进行挂载

docker run -it -v /root/file1:file1 centos

#挂载单个文件到容器目录


容器卷的方式

--volumes-from #使用其它容器的目录

[root@centos7 ~]# docker run -d --name mydocker -v /data centos  
4f243ada709ee87d8f1e50bf13ab225c8dfd6b38f7dad97fa84ab0cb3d7d517b
[root@centos7 ~]# docker run -it --name mynfs --volumes-from mydocker centos
[root@82a489adb07a /]# ll /data/
total 0

此时进入mydocker容器/data目录写入数据进行测试

[root@centos7~]# cd /var/lib/docker/volumes/8421a48b58337a30ac4750c06748e01a3f328bdc2fa3b945d7f9737d9bc1b002/_data
[root@centos7 _data]# ls
[root@centos7 _data]# echo "welcome to here">file
[root@centos7 _data]# ll
total 4
-rw-r--r-- 1 root root 16 Apr 10 17:34 file

再查看刚刚的容器中是否有数据

[root@82a489adb07a /]# hostname
82a489adb07a
[root@82a489adb07a /]# cd /data/
[root@82a489adb07a data]# ll
total 4
-rw-r--r-- 1 root root 16 Apr 10 09:34 file
[root@82a489adb07a data]# cat file
welcome to here                                                

推荐阅读

[强烈推荐] 精心整理|公众号文章目录大全

[容器技术] Docker容器技术入门(一)

[管理工具]进程管理工具Supervisor(送书活动)

[职业规划]图解菜鸟到大拿实现财务自由之路

[资源分享]史上最全的技术类视频资源在这里

[聊聊面试]“金三银四”的折腾之聊一聊面试

[人生感悟]或许这些你会感兴趣??

[有问必答]民工哥 “有问必答” 专栏开通,欢迎来撩


©著作权归作者所有:来自51CTO博客作者mob604756ef35df的原创作品,如需转载,请注明出处,否则将追究法律责任

每一份赞赏源于懂得

赞赏

0人进行了赞赏支持

更多相关文章

  1. Docker容器技术入门(一)
  2. 精心整理|公众号文章目录大全
  3. 这20个Docker Command,有几个是你会的?
  4. 容器技术|Docker三剑客之docker-machine
  5. 打造高逼格、可视化的Docker容器监控系统平台
  6. 容器技术|Docker三剑客之Compose
  7. 圣怀布局,网格(容器,项目,单元,轨道,间距,排列,位置,对齐),隐式
  8. Docker遇到Syslog的踩坑小记
  9. Docker容器技术之Docker file

随机推荐

  1. ubuntu 编译 Android(安卓)出现的若干错
  2. 每天一算:二叉树的中序遍历
  3. 每天一算:Partition List
  4. 【图解数据结构】 一组动画彻底理解计数
  5. 五分钟学算法:二叉树的后序遍历
  6. 每天一算:Odd Even Linked List
  7. 【图解数据结构】 一组动画彻底理解桶排
  8. 【图解数据结构】 一组动画彻底理解二叉
  9. 每天一算:Delete Node in a Linked List
  10. 【图解数据结构】 一组动画彻底理解基数