# Docker 实例分享

@(Docker分享)[Dockerfile|私有仓库|容器互联|跨网络互联]

分析内容

  • Dockerfile参数
  • 私有仓库
  • 局域网内Docker容器互联
  • 跨网络的容器互联
  • 做一个简单的实验

Dockerfile

一般Dockerfile 分为四个部分:
基础镜像信息、维护者信息、镜像操作指令、容器启动时执行的指令。

参数 格式 解释
FROM FROM image:tag 指定基础镜
MAINTAINER MAINTAINER liuzhiqing@yodo1.com 制作镜像的作者
COPY COPY src dest 拷贝本地文件到容器(上下文的相对路径或者绝对路径)
ADD ADD src dest 拷贝本地文件到容器(还支持url/压缩归档文件)
WORKDIR WORKDIR /path/to/workdir 使用多个WORKDIR,为后续命令指定相对目录
ENV ENV key value 指定环境变量,在后续RUN指定里可以使用,在容器运行时可以保持
VOLUME VOLUME ["/data"] 创建一个本地和容器的挂载点
EXPOSE EXPOSE port 容器端口映射到本机端口上
USER USER daemon 指定运行容器是的用户名和UID
RUN RUN command Shell 格式 命令通过/bin/sh -c 去运行
RUN RUN ["exec","param1","param2"] exec 格式,不调用shell程序,及容器中没有shell程序。参数会当成json数组被Docker解析
CMD CMD command /支持exec格式 运行容器的默认值,如果启动时指定了参数,则被覆盖。
ENTRYPOINT ENTRYPOINT command/支持exec格式 运行容器执行命令,但和CMD区别是忽略docker run指定的参数。

私有仓库

方式一: 下载官方做好的私有仓库的镜像,然后运行起来。

[root@localhost ~]# docker pull dl.dockerpool.com:5000/registry

[root@localhost ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry dl.dockerpool.com:5000/registry

[root@localhost ~]# curl http://192.168.1.194:5000/v1/search
{"num_results": 1, "query": "", "results": [{"description": null, "name": "library/unbuntu_v1.0"}]}

[root@localhost ~]# docker pull 192.168.1.194:5000/unbuntu_v1.0

[root@localhost ~]# docker images |grep unbuntu_v1.0
192.168.1.194:5000/unbuntu_v1.0   latest              e9c238b94cff        3 weeks ago         418.9 MB

[root@localhost ~]# docker tag liuzhiqing/nginx:v5  192.168.1.194:5000/nginx

[root@localhost ~]# docker pull 192.168.1.194:5000/nginx

[root@localhost ~]# docker push 192.168.1.194:5000/nginx

[root@localhost ~]# curl http://192.168.1.194:5000/v1/search
{"num_results": 2, "query": "", "results": [{"description": null, "name": "library/unbuntu_v1.0"}, {"description": "", "name": "library/nginx"}]}

方式二:本地服务器安装

安装
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum install -y python-devel libevent-devel python-pip gcc xz-devel
[root@localhost ~]# yum -y install docker-registry

修改IP及监听端口(如果想设置端口为6000,那么/etc/sysconfig/docker里 也要修改成6000)
[root@localhost ~]# vim /etc/sysconfig/docker-registry
[root@localhost ~]# vim /etc/docker-registry.yml  (修改的目的是可以通过curl 查询仓库镜像?!!)
    search_backend: _env:sqlalchemy
    sqlalchemy_index_database: _env:sqlite:////tmp/docker-registry.db

启动服务
[root@localhost ~]#systemctl  start docker-registry.service
[root@localhost ~]#netstat  -ntpl 检查6000端口是否存在

上传:
[root@localhost ~]#docker tag e9c238b94cff 192.168.1.194:6000/nginx 

[root@localhost ~]# docker push 192.168.1.194:6000/nginx

下载:
[root@localhost ~]# docker pull 192.168.1.194:6000/nginx

查询: (无法通过curl 查看??!!)
[root@localhost ~]# curl http://192.168.1.194:6000/v1/search
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.</p>
[root@localhost ~]#
[root@localhost ~]# curl http://192.168.1.194:6000/
"\"docker-registry server\""

局域网内容器互联

一. 同主机容器之间互联

默认容器之间是可以互通的,容器可以访问外部网络,外部网络不能访问容器。

简单的实现

  1. -p /-P 在启动容器时指定-p参数,映射容器内的端口供其他容器调用和访问。
# docker run -d -p 8000:80  --name docer_nginx docker.io/nginx
  1. --link 在启动容器时指定--link参数,Docker会在两个容器内创建独立的隧道,用于两个容器通信。
#docker run -d liuzhiqing/mysql-server:v1   
#docker run -it --link 828c819757a6:db liuzhiqing/mysql-client:v2 /bin/bash

自定义网桥
思路:通过操作Linux netwwork namespace 去隔离网络,自建Linux虚拟网桥,把需要相互通信的容器网卡,加入到网桥中。最终实现互通,ip netns 工具实现。

实验过程:......

二. 不同主机容器之间互联
桥接的方式
思路:找一个单独的网卡,两个不同主机的网卡连接到一个二层交换机上,新建容器的网卡都桥接到新的网桥上。

配图:

实验过程:.....

直连路由
思路:新建网桥,容器网卡连接到网桥上,通过iptables MASQUERADE伪装 /ip forword做NAT进行跨主机容器通信。

配图:

试验过程: ....

三. pipework工具

  1. 连接容器到本地网络
  2. 支持macvlan设备方式把容器接入到本地网络。
  3. 支持DHCP让容器自动获取IP
  4. 支持open vswitch的简单配置
  5. 支持容器网卡mac地址及配置VLAN (open vswitch的功能)

实验过程:...

其他
1.单台主机上的容器vlan划分
2.多台主机容器的vlan划分(交换机开trunk通道)

跨网络的容器互联

OVS隧道模式

overlay技术:
一种隧道技术,一种网络包装到另一种协议中去传输的技术,实现方法GRE隧道。

通过GRE实现Docker容器的跨网络通信

图:...

多租户GRE隔离
openstack里一个分支开源项目Neutron也是使用Open vswitch来实现的,但不同在于neutor的GRE模式有一种专门做GRE隧道的br-tun,该网桥中使用流表来转发数据包(openflow)

在br-int中 虚拟机使用VLAN-ID来区分不同的租户,通往外界的流量则使用GRE key来区分,GRE key有24位比特位,可以很好的解决vlan数量不够的问题。

做一个简单的实验

haproxy 分发给 app , app连接redis-master, redis-master连接2个从库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容

  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,481评论 0 120
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,740评论 0 7
  • 转自:http://ju.outofmemory.cn/entry/255894 概述自从docker容器出现以来...
    dleyanlin阅读 1,508评论 0 7
  • 概述 自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求。而容器的网络通信...
    糙老爷们儿吃什么樱桃阅读 3,615评论 1 5
  • “打蛇打七寸,擒贼先擒王”,一般客户关注的中心,就是他们内心最看重的东西。抓住客户最关注的中心,然后做重点突破,会...
    奋斗的番茄阅读 432评论 0 0