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使用量,网络使用情况等资源使用情况

原文地址:http://blog.51cto.com/13520772/2108523

时间: 2024-07-30 00:35:20

Docker网络与存储的相关文章

Docker——网络和存储

iptables -t nat -vnL |grep docker 查看docker桥接网卡:brctl show 本地端口随机映射到docker容器的80端口上: docker run -d -P nginx 查看日志:docker logs 容器_id nginx 必须放在前台运行 本地端口指定映射到docker容器的80端口上:#81是宿主机端口,80是dokcer容器里面的端口 docker run -d -p 81:80 nginx 存储: 数据卷:所有的docker都能连接到上面 挂

docker的持久化存储和共享存储和网络架构

1.持久化存储docker容器中一般不保存数据,只封装系统和环境,这样就存在一个问题,一个docker容器的数据内容不能持久化,且不能共享出来,在生产中,不能很好地提供服务.为了解决这个问题,就要涉及到docker的持久化存储和共享存储的技术了.所谓持久化,就是将真实机目录挂载到容器中,让容器运行时所产生的数据都写入到真实机的目录中,以此来提供持久存储. mkdir /var/webroot docker run -d -p 80:80 -v /var/webroot:/var/www/html

docker解决数据存储问题的方案

如今docker在云计算领域发展的势头非常猛,各个公司不论大小都開始研究这个开源工具和技术.环绕docker的开源项目和创业公司也多如牛毛,就是一个简单管理container的web ui都有非常多开源项目.只是还是一个人说的好.docker必须要是集群才好玩.并且越大越好玩. 当然这是从玩技术的人眼中看待的问题,假设要真正用于生产还是有非常多问题须要解决,非常多方案须要设计,非常多容错须要处理. 今天看资料学习到了docker是如何解决容器里面数据存储的问题的方案,曾经做PAAS遇到过这样的问

【云快讯】之二十六《AWS推出网络文件存储EFS,进军NAS存储市场》

2015-04-10 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 亚马逊网络服务的不断蚕食企业存储市场,AWS最新计划发布一个新服务替代网络附加存储(NAS)设备.亚马逊弹性文件系统(EFS)将提供一个共享的,低延迟的文件系统,用于支持项目团队和组织内部需要共享大型文件,并快速访问它们的场景,如视频制作公司等. "该文件系统在云服务普及的今天是缺少的一环,"Amazon Web Services的负责人安迪·雅西周四在AWS峰会在旧金山表示该服

理解Docker(5):Docker 网络

本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 1. Docker 网络概况 用一张图来说明 Docker 网络的基本概况: 2. 四种单节点网络模式 2.1 bridge 模式 Docker 容器默认使用 bridge 模式的网络.其特点

Docker 网络及数据卷设置 [三]

Docker 网络及数据卷设置 [三] Docker 时间:2016年11月8日 一.Docker网络设置 默认情况下,docker会创建一个桥接网卡[docker 0],docker有2种映射方式,一种是随机映射,一种是指定映射 提示:生产场景一般不使用随机映射,但是随机映射的好处就是由docker分配,端口不会冲突 案例1:使用docker启动nginx随机映射配置 [[email protected] ~]# docker run -d -P nginx63cbe30165c8fb2ce7

Docker网络解决方案-Flannel部署记录

Docker跨主机容器间网络通信实现的工具有Pipework.Flannel.Weave.Open vSwitch(虚拟交换机).Calico实现跨主机容器间的通信.其中Pipework.Weave.Flannel,三者的区别是: Weave的思路 在每个宿主机上布置一个特殊的route的容器,不同宿主机的route容器连接起来. route拦截所有普通容器的ip请求,并通过udp包发送到其他宿主机上的普通容器. 这样在跨机的多个容器端看到的就是同一个扁平网络. weave解决了网络问题,不过部

“深入浅出”来解读Docker网络核心原理

前言 之前笔者写了有些关于dokcer的各种相关技术的文章,唯独Docker网络这一块没有具体的来分享.后期笔者会陆续更新Docker集群以及Docker高级实践的文章,所以在此之前必须要和大家一起来解读一下Docker网络原理.认真看下去你会有收获的. ?在深入Docker内部的网络原理之前,我们先从一个用户的角度来直观感受一下Docker的网络架构和基本操作是怎么样的. Docker网络架构 ?Docker在1.9版本中(现在都1.17了)引入了一整套docker network子命令和跨主

理解Docker :Docker 网络

本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 1. Docker 网络概况 用一张图来说明 Docker 网络的基本概况: 2. 四种单节点网络模式 2.1 bridge 模式 Docker 容器默认使用 bridge 模式的网络.其特点