Docker命令、基于Docker的SDN实验环境部署(1)

29 篇文章 0 订阅

背景

很多人做一些SDN的实验需要首先配置各种环境,敲各种命令,而且由于内核以及版本的不同,环境配置总是有各种错误,因此需要一种统一的配置好的环境,docker作为一种容器,可以轻松的实现环境的配置并上传dockerhub,供各个开发人员下载使用。因此,今天就讲讲我利用docker配置ryu控制器,并上传dockerhub。后续还会讲解,利用docker搭建的各种SDN控制器实验,包括利用docker swarm构建控制器集群、实现控制器负载均衡等,请各位看官多多关注。

Docker简介

1、Docker 的优点

Docker 是一个开源的应用容器引擎,基于Go语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。因此docker的主要应用场景如下:

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。主要有如下三个优点:

(1)快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:

  • 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
  • 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
  • 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
  • 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

(2)响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

(3)在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

2、docker常见命令介绍

(1)镜像命令

docker images:

root@ymumu-VirtualBox:/home/ymumu# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
ymumu/ryu    0.1       edb38c9e5a5c   7 minutes ago   719MB
ubuntu       latest    1318b700e415   3 weeks ago     72.8MB

其中
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像创建时间
SIZE 镜像大小
# 同一个仓库源可以有多个 TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG 定义不同
的镜像,如果你不定义镜像的标签版本,docker将默认使用 lastest 镜像!
# 可选项
-a: 列出本地所有镜像
-q: 只显示镜像id
--digests: 显示镜像的摘要信息

docker search

# 搜索镜像
root@ymumu-VirtualBox:/home/ymumu# docker search ryu
NAME                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
osrg/ryu                                                                            17                   [OK]
osrg/ryu-book                       To run the example code                         4                    [OK]

docker pull

# 下载镜像
root@ymumu-VirtualBox:/home/ymumu# docker pull muzixing/ryu
Using default tag: latest
latest: Pulling from muzixing/ryu
0412a09616ac: Already exists 
Digest: sha256:17500baf3de7f80842132d1fa417a6a8553a2365f8e95b739737339c1a37cde7
Status: Downloaded newer image for muzixing/ryu:latest
docker.io/muzixing/ryu:latest

docker rmi

# 删除镜像
docker rmi -f 镜像id # 删除单个
docker rmi -f 镜像名:tag 镜像名:tag # 删除多个
docker rmi -f $(docker images -qa) # 删除全部

(2)容器命令

新建容器并启动

# 命令
docker run [OPTIONS] IMAGE [COMMAND][ARG...]
# 常用参数说明
--name="Name" # 给容器指定一个名字
-d # 后台方式运行容器,并返回容器的id!
-i # 以交互模式运行容器,通过和 -t 一起使用
-t # 给容器重新分配一个终端,通常和 -i 一起使用
-P # 随机端口映射(大写)
-p # 指定端口映射(小结)
root@ymumu-VirtualBox:/home/ymumu# docker run -it --name ryu1 muzixing/ryu /bin/bash
root@36e8e10d210c:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  ryu  sbin  srv  sys  tmp  usr  var

列出所有运行的容器

# 命令
docker ps [OPTIONS]
# 常用参数说明
-a # 列出当前所有正在运行的容器 + 历史运行过的容器
-l # 显示最近创建的容器
-n=? # 显示最近n个创建的容器
-q # 静默模式,只显示容器编号。

退出容器

exit # 容器停止退出
ctrl+P+Q # 容器不停止退出

启动停止容器

docker start (容器id or 容器名) # 启动容器
docker restart (容器id or 容器名) # 重启容器
docker stop (容器id or 容器名) # 停止容器
docker kill (容器id or 容器名) # 强制停止容器

删除容器

docker rm 容器id # 删除指定容器
docker rm -f $(docker ps -a -q) # 删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器

Docker镜像构建

1、Dockerfile

dockerfile是用来构建Docker镜像的文件,是由一系列命令和参数构成的脚本。

从应用软件的角度来看,DockerFile,docker镜像与docker容器分别代表软件的三个不同阶段。

  • DockerFile 是软件的原材料 (代码)
  • Docker 镜像则是软件的交付品 (.apk)
  • Docker 容器则是软件的运行状态 (客户下载安装执行)

DockerFile 面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可!

Dokcerfile的指令如下:

FROM # 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER # 镜像维护者的姓名混合邮箱地址
RUN # 容器构建时需要运行的命令
EXPOSE # 当前容器对外保留出的端口
WORKDIR # 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV # 用来在构建镜像过程中设置环境变量
ADD # 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY # 类似ADD,拷贝文件和目录到镜像中!
VOLUME # 容器数据卷,用于数据保存和持久化工作
CMD # 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最
后一个生效!
ENTRYPOINT # 指定一个容器启动时要运行的命令!和CMD一样
ONBUILD # 当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的
ONBUILD被触发

2、镜像代码

为了构建自己的ryu控制器环境,我们利用Dockerfile构建镜像,镜像基于Ubuntu系统,在系统中安装python、ryu、git、ping等各项所需的工具与环境,具体的Dockerfile脚本代码编写如下所示。

# 构建SDN实验环境
# 基于Ubuntu系统
# 下载python组件,配置运行环境
# 下载安装ryu控制器、ovs
# 下载vim、iproute2、net-tools、git、ping等工具

FROM ubuntu
MAINTAINER ymumu<1494237426@qq.com>

# 设置工作访问时的路径,也就是进入时的初始目录 
ENV MYPATH /home
WORKDIR $MYPATH

# 下载vim、ip、git、sudo、ping等命令工具
RUN sed -i 's#http://archive.ubuntu.com/#http://mirrors.tuna.tsinghua.edu.cn/#' /etc/apt/sources.list
RUN apt-get update && apt-get install -y apt-utils
RUN apt-get update && apt-get install -y vim
RUN apt-get update && apt-get install -y net-tools
RUN apt-get update && apt-get install -y iproute2
RUN apt-get update && apt-get install -y git
RUN apt-get update && apt-get install -y inetutils-ping
RUN apt-get update && apt-get install -y sudo

# 下载python以及ryu依赖
RUN apt-get update && apt install -y python3
RUN apt-get update && apt install -y python3-eventlet
RUN apt-get update && apt install -y python3-routes
RUN apt-get update && apt install -y python3-webob
RUN apt-get update && apt install -y python3-paramiko
RUN apt-get update && apt install -y python3-pip

# 从GitHub仓库克隆ryu源码
RUN git clone https://github.com/Yang-Jianlin/ryu.git

# 进入ryu目录,开始进行ryu的安装
ENV MYPATH /home/ryu
WORKDIR $MYPATH

RUN pip3 install -r tools/pip-requires
RUN python3 setup.py install

# 结束ryu安装,返回home目录
ENV MYPATH /home
WORKDIR $MYPATH

# 安装ovs
RUN apt-get update && apt install -y openvswitch-switch

CMD echo "-------------end-----------------"

接下来,执行命令,运行Dockerfile,构建镜像。

docker build -t ymumu/ryu:0.1 .

 接下来,就可以进入构建好的镜像中进行各项操作了,而且环境和各种工具都已经配置完全。

输入命令进入ymumu/ryu中

docker run -it --name ryu ymumu/ryu:0.1 /bin/bash

 发布镜像

首先,需要在dockerhub注册账号,https://hub.docker.com/signup。

然后,执行下列命令:

root@ymumu-VirtualBox:/home/ymumu# docker login -u ymumu
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
root@ymumu-VirtualBox:/home/ymumu# docker push ymumu/ryu:0.1
The push refers to repository [docker.io/ymumu/ryu]

等待上传完毕即可。

接下来,就可以在dockerhub中查看到ymumu/ryu了。

 使用命令 docker pull ymumu/ryu:0.1 即可获取。

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楊木木8023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值