其他
【容器技术】Docker容器技术入门(二)
接上一篇文章
【容器技术】Docker容器技术入门(一)
今天接着上次聊一聊有关Docker网络、数据存储相关的技术点
Docker网络模式
01
Dokcer 通过使用 Linux 桥接提供容器之间的通信,Docker的网络模式有四种
分别是以下四种模式
host 模式,使用--net=host 指定。
container 模式,使用--net=container:NAMEorID 指定。
none 模式,使用--net=none 指定。
bridge 模式,使用--net=bridge 指定,默认配置
如果容器使用 host 模式,那么容器将不会获得一个独立的 Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡与配置 IP 等,而是使用宿主机的 IP 和端口。就和直接跑在宿主机中一样。但是容器的文件系统、进程列表等还是和宿主机隔离的。
这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡与配置 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他方面仍然是隔离的。
此模式不同于前两种,Docker 容器有自己的 Network Namespace,但是,Docker容器没有任何网络配置。而是需要我们手动给 Docker容器添加网卡、配置 IP 等。
此模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace,并将一个主机上的Docker容器连接到一个虚拟网桥上。
运行容器
02
[root
6135db66a7d7c1237901a79974f88f1079b3d467c14ce83fc46bc6b4eb8b3240
[root 7 ~]# 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
7 ~]# docker run -d -P nginx #-d启动到后台运行随机一个端口去自动映射80
参数说明
docker -P 随机端口映射
docker -p 指定端口映射
-p hostport:containerport
-p ip:hostport:containerport
实例说明
[root81:80 nginx
3ca9f847bebec3684952b0f2c081d31f84b9489de50b635246d9a592cc06d46c
[root 7 ~]# 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
7 ~]# docker run -d -p 可以通过指定的端口来访问启动的容器服务
Docker数据存储
03
docker管理数据的方式有两种:
数据卷
数据卷容器
数据卷是一个或多个容器专门指定绕过Union File System的目录,为持续性或共享数据提供一些有用的功能:
数据卷可以在容器间共享和重用
数据卷数据改变是直接修改的
数据卷数据改变不会被包括在容器中
数据卷是持续性的,直到没有容器使用它们
参数说明
-v /data直接将数据目录挂载到容器/data目录
-v src:dst 将物理机目录挂载到容器目录
实例操作
[root001 -v /data centos
[root@4578675314b9 /]# ls -l /data/
total 0
[root 7 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4578675314b9 centos "/bin/bash" 2 minutes ago Up 2 minutes test-001
[root 7 ~]# docker inspect 4578675314b9
"Mounts": [
{
"Name": "ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115",
"Source": "/var/lib/docker/volumes/ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115/_data",
"Destination": "/data", ##可以看出是将容器中的存储目录挂载到/data
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
[root 7 ~]# cd /var/lib/docker/volumes/ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115/_data ###这是物理机的目录
[root 7 _data]# ll
total 0
[root 7 _data]# mkdir test
7 ~]# docker run -it --name 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
[root@425569ce9eef /]# cd /mnt/
[root@425569ce9eef mnt]# ll
total 0
[root 7 ~]# cd /data1/
[root 7 data1]# echo "hello">test.txt
[root 7 data1]# ll
total 4
-rw-r--r-- 1 root root 6 Apr 10 17:09 test.txt
[root 7 data1]# cat test.txt
hello
7 ~]# docker run -it -v /data1:/mnt centos检查容器目录是否有文件与内容
[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
4f243ada709ee87d8f1e50bf13ab225c8dfd6b38f7dad97fa84ab0cb3d7d517b
[root 7 ~]# docker run -it --name mynfs --volumes-from mydocker centos
[root@82a489adb07a /]# ll /data/
total 0
7 ~]# docker run -d --name mydocker -v /data centos 此时进入mydocker容器/data目录写入数据进行测试
[root8421a48b58337a30ac4750c06748e01a3f328bdc2fa3b945d7f9737d9bc1b002/_data
[root 7 _data]# ls
[root 7 _data]# echo "welcome to here">file
[root 7 _data]# ll
total 4
-rw-r--r-- 1 root root 16 Apr 10 17:34 file
7~]# cd /var/lib/docker/volumes/再查看刚刚的容器中是否有数据
[
82a489adb07a
[ ]
[ ]
total 4
-rw-r--r-- 1 root root 16 Apr 10 09:34 file
[ ]
welcome to here
]推荐阅读
[强烈推荐] 精心整理|公众号文章目录大全
[容器技术] Docker容器技术入门(一)
[管理工具]进程管理工具Supervisor(送书活动)
[职业规划]图解菜鸟到大拿实现财务自由之路
[资源分享]史上最全的技术类视频资源在这里
[聊聊面试]“金三银四”的折腾之聊一聊面试
[人生感悟]或许这些你会感兴趣??
[有问必答]民工哥 “有问必答” 专栏开通,欢迎来撩
·end·
—如果喜欢,快分享给你的朋友们吧—
我们一起愉快的玩耍吧
超过20000+万人正在关注
专注于Linux系统运维、运维架构、各类高可用架构技术,热衷于分享开源技术,热爱开源、拥抱开源,我是80后民工哥,微信公众号:民工哥Linux运维,我为自己带盐,谁说80后不能活出精彩人生!!!
关注公众号后台回复 “入群” 索取入群方式
长按关注公众号热爱开源、拥抱开源