GVKun编程网logo

Docker Macvlan 应用部署(docker network macvlan)

6

在这里,我们将给大家分享关于DockerMacvlan应用部署的知识,让您更了解dockernetworkmacvlan的本质,同时也会涉及到如何更有效地Docker04应用部署与迁移备份Docker

在这里,我们将给大家分享关于Docker Macvlan 应用部署的知识,让您更了解docker network macvlan的本质,同时也会涉及到如何更有效地Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库、Docker Macvlan 介绍 or 工作原理、Docker Macvlan 网络部署、Docker macvlan实战的内容。

本文目录一览:

Docker Macvlan 应用部署(docker network macvlan)

Docker Macvlan 应用部署(docker network macvlan)

Docker Macvlan 应用部署

MacVLAN有两种桥接模式

  • Bridge模式:不创建子接口的情况下直接去桥接物理接口。直接桥接到与宿主级的同网段。
  • VLAN Bridge模式:创建子接口去桥接物理接口。可划分多个VLAN。

Macvlan Bridge模式 容器专属网络

1、节点1节点2操作:创建macvlan网络

docker network create -d macvlan --subnet=172.100.1.0/24 --gateway=172.100.1.1 -o parent=ens33 macvlan_net
docker network create 创建网络
-d 指定网络驱动程序为macvlan
--subnet 指定一个子网段
--gateway 指定网关
-o parent=ens33 指定宿主接口
macvlan_net 自定义网络名称
命令解析
命令:docker network ls
NETWORK ID          NAME                           DRIVER              SCOPE
0a48ab454840        macvlan_net                    macvlan             local
查看网络

注:如果需要访问外网,需要将网络设置为与宿主级相同网络下。

注:本地不可访问,因为桥接的本地网络。

注:单个网卡只能绑定一次如重复添加会报如下错误。

# ens33网卡已被绑定,不多次绑定。
Error response from daemon: network dm-0a48ab454840 is already using parent interface ens33

# 删除绑定网卡网络集
docker network rm ID号
报错

2、测试通信

macvlan-01# docker run -it --net macvlan_net --ip=172.100.1.10 busybox
macvlan-02# docker run -it --net macvlan_net --ip=172.100.1.11 busybox ping 172.100.1.10
docker run -it --net macvlan_net --ip=172.100.1.11 busybox ping 172.100.1.10
PING 172.100.1.10 (172.100.1.10): 56 data bytes
64 bytes from 172.100.1.10: seq=0 ttl=64 time=0.949 ms
64 bytes from 172.100.1.10: seq=1 ttl=64 time=0.316 ms
64 bytes from 172.100.1.10: seq=2 ttl=64 time=0.317 ms
64 bytes from 172.100.1.10: seq=3 ttl=64 time=0.310 ms

Macvlan VLAN Bridge模式 容器专属网络

1、节点1节点2操作:创建一个VLAN,VLAN ID 50

# ip link add link 宿主网卡 name 宿主网卡名字.子网卡名称id type vlan id 50
ip link add link ens33 name ens33.50 type vlan id 50
# 重启docker激活网卡
systemctl restart docker

2、节点1节点2操作:创建Macvlan网络

docker network create -d macvlan --subnet=172.99.0.0/24 --gateway=172.99.0.1 -o parent=ens33.50 macvlan_net99
docker network create 创建网络
-d 指定网络驱动程序为macvlan
--subnet 指定一个子网段
--gateway 指定网关
-o parent=ens33 指定宿主接口
macvlan_net99 自定义网络名称
命令解析
命令:docker network ls
NETWORK ID          NAME                           DRIVER              SCOPE
f3b3b084f580        macvlan_net99                  macvlan   
查看网络

3、测试互通

macvlan-01# docker run -it --net macvlan_net99 --ip=172.99.0.10 busybox
macvlan-02# docker run -it --net macvlan_net99 --ip=172.99.0.11 busybox ping 172.99.010

注:像这样创建多个子网卡,来实现划分多个VLAN环境。

 

Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库

Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库

MySQL 部署   

    拉取 mysql 镜像    docker pull centos/mysql-57-centos7

    创建 MySQL 容器    docker run -di --name=mysql01 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=320512 centos/mysql-57-centos7

    -p 代表端口映射,格式为 宿主机映射端口:容器运行端口
    -e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是 root 用户的登录密码

Tomcat 部署

    拉取镜像 docker pull tomcat:7-jre7

    创建容器 创建容器 -p 表示地址映射

    docker run ‐di ‐‐name=mytomcat ‐p 9000:8080

    ‐v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7‐jre7

Nginx 部署

    拉取镜像    docker pull nginx

    创建容器    docker run ‐di ‐‐name=mynginx ‐p 80:80 nginx

Redis 部署

    拉取镜像    docker pull redis

    创建容器    docker run ‐di ‐‐name=myredis ‐p 6379:6379 redis

 

 

迁移与备份

    容器保存为镜像

    我们可以通过以下命令将容器保存为镜像

    docker commit 容器名称 镜像名称

镜像备份

    我们可以通过以下命令将镜像保存为 tar 文件

    docker save -o tar 文件名称 镜像名称

恢复镜像

    docker load -i tar 文件名称

Dockerfile

    Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

    1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;

    2、对于测试人员:可以直接拿开发时所构建的镜像或者通过 Dockerfile 文件构建一个新的镜像开始工作了;

    3、对于运维人员:在部署时,可以实现应用的无缝移植。

常用命令

命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name 声明镜像的创建者
ENV key value 设置环境变量 (可以写多条)
RUN command 是 Dockerfile 的核心部分 (可以写多条)
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file 和 ADD 相似,但是如果有压缩文件并不能解压
WORKDIR path_dir 设置工作目录

使用脚本创建镜像

步骤:
(1)创建目录

    mkdir –p /usr/local/dockerjdk8

(2)下载 jdk-8u171-linux-x64.tar.gz 并上传到服务器(虚拟机)中的 /usr/local/dockerjdk8 目录

(3)创建文件 Dockerfile vi Dockerfile

#依赖镜像名称和 ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径 jar, 把 java 添加到容器中
ADD jdk‐8u171‐linux‐x64.tar.gz /usr/local/java/
#配置 java 环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH
$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

(4)执行命令构建镜像(注意后边的空格和点,不能省略)

docker build ‐t=''jdk1.8'' .

参看镜像是否建立完成

docker images

 

Docker 私有仓库

私有仓库搭建与配置

(1)拉取私有仓库镜像(此步省略)

    docker pull registry

(2)启动私有仓库容器

    docker run ‐di ‐‐name=registry ‐p 5000:5000 registry

  (3)    打开浏览器输入地址 http://ip:5000/v2/_catalog,看到 {"repositories":[]} 表示私有仓库搭建成功并且内容为空。

  (4)    修改 daemon.json    vi /etc/docker/daemon.json

            添加以下内容,保存退出,这是为了让 docker 信任私有仓库地址 {"insecure-registries":["ip:5000"]}

重启 docker 服务

    systemctl restart docker

 

镜像上传到私有仓库

    标记此镜像为私有仓库的镜像    docker tag jdk1.8 ip:5000/jdk1.8    

再次启动私服容器

    docker start registry

上传标记的镜像

    docker push ip:5000/jdk1.8

Docker Macvlan 介绍 or 工作原理

Docker Macvlan 介绍 or 工作原理

Docker Macvlan Network

  • Macvlan Network:属于Docker的网络驱动。
  • Macvlan Network:Docker主机网卡接口逻辑上分为多个子接口,每个子接口标识一个VLAN。容器接口直接连接Docker主机网卡接口,通过路由策略转发到另一台Docker主机。
  • Macvlan  Network :macvlan最大的优势,它支持能去连接子接口,linux 网卡子接口最大 4094个。

工作原理解析

1、两边节点分别创建macvlan网络,并创建子网段。
2、docker0网卡会通过NET去访问外网。
3、容器内的eth0是由macvlan所在物理接口ens33创建的一个逻辑网口。
4、当节点1向节点2发送数据包时,容器内的子网网卡会向它的网关发送一个mac地址请求。
5、虚拟网关接受请求后会先查询本地的路由表查找发送目标,如果找不到它会转交给eth1来发ARP送广播,来获取目标IP地址是多少。
6、节点2收到ARP广播后它会查找本地是否存在目标IP地址,通过IP来获取自定IP的mac地址。
7、获取mac地址后它会转发给eth0真机网卡,然后通过宿主级网卡发送给节点1的外网网卡,然后再转给容器内网卡。
 

Docker Macvlan 网络部署

Docker Macvlan 网络部署

  Macvlan Bridge 模式

  节点 1 创建

docker network create -d macvlan --subnet=172.100.1.0/24 --gateway=172.100.1.1 -o parent=ens33 macvlan_net

  网段为 172.100.1.0/24 桥接的网卡为 ens33 macvlan_net 为指定的名称

  查看

  节点 2 也创建

  创建容器测试互通

  节点 1 创建 需要指定 IP 地址

docker run -it --net macvlan_net --ip=172.100.1.10 busybox

  节点 2 创建 

docker run -it --net macvlan_net --ip=172.100.1.11 busybox

  可以 ping 通

 

  再创建一个网络与宿主机网段是一样的

  一个 macvlan 只能绑定一个物理接口

  需要删除原来的才能创建

docker network rm 2cd49002aec0

  创建

docker network create -d macvlan --subnet=192.168.56.0/24 --gateway=192.168.56.2 -o parent=ens33 macvlan_net

  节点 2 同样的操作

  启动容器

docker run -it --net macvlan_net --ip=192.168.56.130 busybox

  这个容器和宿主机桥接的是一样的网络,可以访问宿主机和公网

 

  MacvlanVLAN Bridge 模式

  创建一个 vlan

ip link add link ens33 name0.50 type vlan id 50

  查看

  创建一个 Macvlan 的网络

docker network create -d macvlan --subnet=172.99.0.0/24 --gateway=172.99.0.1 -o parent=name0.50 macvlan_net50

  节点 2 也是同样操作

  创建容器测试互通

docker run -it --net macvlan_net50 --ip=172.99.0.10 busybox

  启动子接口网卡

ifconfig ens33.50 up

  

Docker macvlan实战

Docker macvlan实战

docker swarm模式不支持同宿主机网段ip,非swarm模式才支持同网段ip,那就是macvlan模式。

ubuntu16.04-1 172.31.68.241  
ubuntu16.04-2 172.31.68.242 172.31.68.222
ubuntu16.04-3 172.31.68.243 172.31.68.223

    ps:第二列为宿主机ip,第三列为容器ip

创建macvlan网络

docker network create -d macvlan --subnet=172.31.68.0/24 --gateway=172.31.68.1 -o parent=ens3  my-macvlan

    ps:在ubuntu16.04-2/ubuntu16.04-3上都需要创建,由于不需要在ubuntu16.04-1创建容器,所以ubuntu16.04-1上不需要创建macvlan网络

创建容器

    ubuntu16.04-2

docker run --net=my-macvlan --name=test2 --ip=172.31.68.222 -it 172.31.68.241/library/xenial3 /bin/bash

    ubuntu16.04-3

docker run --net=my-macvlan --name=test3 --ip=172.31.68.223 -it 172.31.68.241/library/xenial3 /bin/bash

 参数解释

-d macvlan     加载kernel的模块名
--subnet         宿主机所在网段
--gateway       宿主机所在网段网关
-o parent        继承指定网段的网卡

联通测试

    test2 -> test3

    test3 -> ubuntu16.04-1

    ubuntu16.04-1 -> test3

 

我们今天的关于Docker Macvlan 应用部署docker network macvlan的分享已经告一段落,感谢您的关注,如果您想了解更多关于Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库、Docker Macvlan 介绍 or 工作原理、Docker Macvlan 网络部署、Docker macvlan实战的相关信息,请在本站查询。

本文标签: