接上一篇文章
【容器技术】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@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
可以通过指定的端口来访问启动的容器服务
Docker数据存储
03
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
联系客服