Docker网络与存储

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker网络与存储相关的知识,希望对你有一定的参考价值。

第1章 docker网络类型

1.1 docker共有四种网络类型:

技术分享图片

类型

说明

None

不为容器配置任何网络功能,没有网络 --net=none     只有一个环回地址

Container

与另一个运行中的容器共享Network   Namespace--net=container:containerID

Host

与主机共享Network   Namespace--net=host

Bridge

Docker设计的NAT网络模型(默认类型)

bridge默认docker网络隔离基于网络命名空间,在物理机上创建docker容器时会为每一个

docker容器分配网络命名空间,并且把容器ip桥接到物理机的虚拟网桥上

1.1 none网络

此模式下不会为任何容器配置任何网络参数,通常应用于本地应用服务的场景下使用

docker run -it --network none busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever

1.2 与其它容器共享网络配置---> container

此模式与host相似,但此模式创建容器共享的是其他容器的IP和端口而不是物理机,此模式容器自身不会配置网络和端口,创建此模式容器进去之后,会发现里边的IP是你所指定的那个容器IP并且端口也是共享的,而且其他是互相隔离的,如进程

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2293dac38edc        nginx               "nginx -g 'daemon of…"   27 seconds ago      Up 25 seconds       0.0.0.0:80->80/tcp       wizardly_hopper
0dea7902d0a1        registry            "/entrypoint.sh /etc…"   44 minutes ago      Up 26 minutes       0.0.0.0:5000->5000/tcp   registry
docker run -it --network container:2293dac38edc  busybox:latest /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
21: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

1.3 使用宿主机网络

此模式创建的容器没有自己独立的网络命名空间,是和物理机共享一个网络命名空间,并且共享物理机的所有端口与IP,并且这个模式认为是不安全的

docker run -it --network host busybox:latest /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:0b:ad:d4 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.70/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe0b:add4/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:0b:ad:de brd ff:ff:ff:ff:ff:ff

1.4 自定义网络

?  创建网桥

docker network create --driver bridge jiang
0c03aaefad371f7de42151b5128d8a4e78373648b54900c10aa6e49462cdc2e7

?  查看网络列表

[[email protected] ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
19905a8a8c56        bridge              bridge              local
62d0c409c7ed        host                host                local
0c03aaefad37        jiang               bridge              local
f63205c97696        none                null                local

?  自定义网段设置网桥设备

[[email protected] ~]# docker network create --driver bridge --subnet 192.168.86.0/24 --gateway 192.168.86.1 jiang01
1ed82064325b48a7fee3f0bfeb39e29d00e10334b438d344741a90e300eccce1

?  分配ip进入容器

[[email protected] ~]# docker run -it --network jiang01 --ip 192.168.86.100 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
25: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:c0:a8:56:64 brd ff:ff:ff:ff:ff:ff
inet 192.168.86.100/24 brd 192.168.86.255 scope global eth0

1.5 利用pipework工具为docker容器分配ip

?  安装pipework:

wget https://github.com/jpetazzo/pipework/archive/master.zip
unzip master.zip
cp pipework-master/pipework /usr/local/bin/
chmod  +x /usr/local/bin/pipework

?  配置桥接网卡

安装桥接工具

yum install bridge-utils.x86_64 -y

修改网卡配置实现桥接:

修改eth0网卡,br0实现桥接

cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.bak}
vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=10.0.0.70
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=223.5.5.5
/etc/init.d/network restart

运行容器指定ip地址

pipework br0 $(docker run -it -d -p 80:80 nginx) 
10.0.0.80/[email protected]


在其他机器上进行访问测试

[[email protected] ~]# curl 10.0.0.80 -I
HTTP/1.1 200 OK
Server: nginx/1.13.12
Date: Fri, 27 Apr 2018 04:27:49 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
Connection: keep-alive
ETag: "5acb8e45-264"
Accept-Ranges: bytes

1.6 容器间基于DNS通信:只有用户自定义的网络可以使用

docker run -it --network=jiang01 --name=test  busybox
/ #
/ # ping test1

?  在启动一个容器

docker run -it --network=jiang01 --name=test1 busybox
/ #
/ # ping test

1.7 macvlan实现跨主机通信:

?  创建网络

docker network create --driver macvlan --subnet 10.1.0.0/24 --gateway 10.1.0.254 -o parent=eth0 macvlan_1
6a461f1e8320bfb1e9f33636ce19a97ca830dceb3e65644a1a64d61a88d5a74b

?  设置网卡为混杂模式

ip link  set  eth0 promisc on

?  创建使用macvlan网络容器

docker run -it --network=macvlan_1 --ip=10.1.0.1 nginx /bin/sh

第1章 docker存储

1.1 挂载时创建卷

?  进入容器中查看挂载前的数据是否存在

docker run -it nginx bash
[email protected]:/usr/share/nginx/html# ls
50x.html  index.html
[email protected]:/usr/share/nginx/html# tail index.html
working. Further configuration is required.</p>
 
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
 
<p><em>Thank you for using nginx.</em></p>
</body>
</html>

?  修改挂载首页文件

vim /tmp/index.html
nihao

?  我这里容器已经运行起来了,所以要关闭一下

docker container stop 1882ab7b9e7e
docker run -d -p 80:80 -v /tmp/:/usr/share/nginx/html nginx
2d2367bc9bbfeb7550560c4939d451d28f185992970808361db059aab18a23b7
curl 10.0.0.70
nihao

?  查看卷列表:

docker volume ls
DRIVER              VOLUME NAME

注意:指明挂载目录,不会对容器中的数据进行改变,

1.2 创建卷后挂载:

?  创建一个名为jiang的卷

[[email protected] ~]# docker volume create jiang
jiang

?  查看所有卷:

docker volume ls

?  查看卷路径:

docker volume inspect jiang
[
    {
        "CreatedAt": "2018-04-27T14:03:19+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/jiang/_data",
        "Name": "jiang",
        "Options": {},
        "Scope": "local"
    }
]

?  指定卷启动一个容器:

docker run -d -p 80:80 -v jiang:/usr/share/nginx/html nginx
968f03aa0b9965a82b86a7e2c17f5e9dcf530838d8ed4dd075845017e75ab74b

?  在宿主机上进行测试,访问首页:

[[email protected] ~]# curl 10.0.0.70
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

?  修改首页文件中的内容

echo hello world >/var/lib/docker/volumes/jiang/_data/index.html

?  再次访问

curl 10.0.0.70
hello world

1.2.1 多个容器共享卷

?  启动容器时,和其他容器共享卷:

docker run -d -P --volumes-from 968f03aa0b99 nginx:latest

?  进行测试:

curl 10.0.0.70:32768
hello world
curl 10.0.0.70:80
hello world

第2章 关于docker的一些注意事项

2.1 重启docker服务,容器全部退出的解决办法:

?  在启动时指定自动重启

docker run –restart=always

?  修改docker配置文件

1.      添加一下信息即可

“live-restore”: true

2.      docker server配置文件/etc/docker/daemon.json

[[email protected] ~]# cat  /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "graph": "/opt/mydocker",       # 修改数据的存放目录到/opt/mydocker/,原/var/lib/docker/
  "insecure-registries": ["10.0.0.100:5000"],
  "live-restore": true
}

?  重启生效,只对再次之后启动的容器生效

systemctl restart  docker.service

2.2 使用容器的建议:

1.      不要拆分方式进行应用程序发布

2.      不要创建大型镜像

3.      不要在单个容器中运行多个进程

4.      不要再镜像内保存凭证,不要依赖IP地址

5.      以非root用户运行程序

6.      不要使用最新标签

7.      不要利用运行中的容器创建镜像

8.      不要使用单层镜像

9.      不要将数据存放在容器内

2.3 关于docker容器的监控

?  容器的基本信息

包括容器的数量,ID;名称;镜像;启动命令;端口信息

?  容器的运行状态

统计各状态的容器的数量,包括运行中,暂停,停止及异常退出

?  容器的用量信息

统计容器的cpu使用率,内存使用量,块设备IO使用量,网络使用情况等资源使用情况


以上是关于Docker网络与存储的主要内容,如果未能解决你的问题,请参考以下文章

Docker网络与存储

docker存储与网络

201555332盛照宗—网络对抗实验1—逆向与bof基础

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段

docker镜像存出与载入

docker介绍与安装