docker+open vswitch多宿主间容器互连构建tomcat服务

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

1、本文介绍centos7下的docker容器互联及端口映射问题


环境介绍:

    docker1:192.168.1.230

    docker2:192.168.1.231


a.两台宿主分别更改主机名docker1  and  docker2

1
2
3
# hostnamectl set-hostname docker1
 
# reboot

b.在docker1和docker2上分别用yum方式安装docker并启动服务

1
2
3
4
5
6
[root@docker1 ~] # yum -y install docker
 
[root@docker1 ~] # service docker start
Redirecting to  /bin/systemctl  start  docker.service
 
通过 ps  -ef |  grep  docker 查看进程已经启动

c.docker1docker2上分别安装open vswitch及依赖环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@docker1 ~] # yum -y install openssl-devel kernel-devel
[root@docker1 ~] #  yum groupinstall "Development Tools"
[root@docker1 ~] # adduser ovswitch
[root@docker1 ~] # su - ovswitch
[ovswitch@docker1 ~]$ wget [ovswitch@docker1 ~]$  tar  -zxvpf openvswitch-2.3.0. tar .gz   
[ovswitch@docker1 ~]$  mkdir  -p ~ /rpmbuild/SOURCES
[ovswitch@docker1 ~]$  sed  's/openvswitch-kmod, //g'  openvswitch-2.3.0 /rhel/openvswitch .spec > openvswitch-2.3.0 /rhel/openvswitch_no_kmod .spec
[ovswitch@docker1 ~]$  cp  openvswitch-2.3.0. tar .gz rpmbuild /SOURCES/
 
[ovswitch@docker1 ~]$ rpmbuild -bb --without check ~ /openvswitch-2 .3.0 /rhel/openvswitch_no_kmod .spec
 
[ovswitch@docker1 ~]$  exit
 
[root@docker1 ~] # yum localinstall /home/ovswitch/rpmbuild/RPMS/x86_64/openvswitch-2.3.0-1.x86_64.rpm
[root@docker1 ~] # systemctl start openvswitch.service        # 启动ovs
[root@docker1 ~] # systemctl  status openvswitch.service -l   #查看服务状态
鈼[0m openvswitch.service - LSB: Open vSwitch switch
    Loaded: loaded ( /etc/rc .d /init .d /openvswitch )
    Active: active (running) since Fri 2016-04-22 02:37:10 EDT; 9s ago
      Docs:  man :systemd-sysv-generator(8)
   Process: 24616 ExecStart= /etc/rc .d /init .d /openvswitch  start (code=exited, status=0 /SUCCESS )
    CGroup:  /system .slice /openvswitch .service
            鈹溾攢24640 ovsdb-server: monitoring pid 24641 (healthy)                                                                                                                                                                                                                                                                                                                                                        
            鈹溾攢24641 ovsdb-server  /etc/openvswitch/conf .db -vconsole:emer -vsyslog:err -vfile:info --remote=punix: /var/run/openvswitch/db .sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log- file = /var/log/openvswitch/ovsdb-server .log --pidfile= /var/run/openvswitch/ovsdb-server .pid --detach --monitor
            鈹溾攢24652 ovs-vswitchd: monitoring pid 24653 (healthy)                                                                                                                                                                                    
            鈹斺攢24653 ovs-vswitchd unix: /var/run/openvswitch/db .sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log- file = /var/log/openvswitch/ovs-vswitchd .log --pidfile= /var/run/openvswitch/ovs-vswitchd .pid --detach --monitor
 
Apr 22 02:37:10 docker1 openvswitch[24616]:  /etc/openvswitch/conf .db does not exist ... (warning).
Apr 22 02:37:10 docker1 openvswitch[24616]: Creating empty database  /etc/openvswitch/conf .db [  OK  ]
Apr 22 02:37:10 docker1 openvswitch[24616]: Starting ovsdb-server [  OK  ]
Apr 22 02:37:10 docker1 ovs-vsctl[24642]: ovs|00001|vsctl|INFO|Called as ovs-vsctl --no-wait -- init --  set  Open_vSwitch . db-version=7.6.0
Apr 22 02:37:10 docker1 ovs-vsctl[24647]: ovs|00001|vsctl|INFO|Called as ovs-vsctl --no-wait  set  Open_vSwitch . ovs-version=2.3.0  "external-ids:system-id=\"7469bdac-d8b0-4593-b300-fd0931eacbc2\""  "system-type=\"unknown\""  "system-version=\"unknown\""
Apr 22 02:37:10 docker1 openvswitch[24616]: Configuring Open vSwitch system IDs [  OK  ]
Apr 22 02:37:10 docker1 openvswitch[24616]: Inserting openvswitch module [  OK  ]
Apr 22 02:37:10 docker1 openvswitch[24616]: Starting ovs-vswitchd [  OK  ]
Apr 22 02:37:10 docker1 openvswitch[24616]: Enabling remote OVSDB managers [  OK  ]
Apr 22 02:37:10 docker1 systemd[1]: Started LSB: Open vSwitch switch.

d.在docker1和docker2分别建立桥接网卡和路由

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@docker1 ~] # cat /proc/sys/net/ipv4/ip_forward
1
[root@docker1 ~] # ovs-vsctl add-br obr0
[root@docker1 ~] # ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.1.230
[root@docker1 ~] # brctl addbr kbr0
[root@docker1 ~] # brctl addif kbr0 obr0 
[root@docker1 ~] # ip link set dev docker0 down
[root@docker1 ~] # ip link del dev docker0
 
[root@docker1 ~] # vi /etc/sysconfig/network-scripts/ifcfg-kbr0
ONBOOT= yes
BOOTPROTO=static
IPADDR=192.168.100.10
NETMASK=255.255.255.0
GATEWAY=192.168.100.0
USERCTL=no
TYPE=Bridge
IPV6INIT=no
DEVICE=kbr0
 
[root@docker1 ~] # cat  /etc/sysconfig/network-scripts/route-eth0
192.168.101.0 /24  via 192.168.1.231 dev eth0~            
 
[root@docker1 ~] # systemctl  restart network.service      
[root@docker1 ~] # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.2     0.0.0.0         UG    100    0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1007   0        0 kbr0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U     0      0        0 kbr0
192.168.101.0   192.168.1.231   255.255.255.0   UG    0      0        0 eth0
192.168.101.0   192.168.1.231   255.255.255.0   UG    100    0        0 eth0

c.虚拟网卡绑定kbr0后下载容器启动测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[root@docker1 ~] # vi /etc/sysconfig/docker-network 
# /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS= "-b=kbr0"
 
[root@docker1 ~] # service  docker restart
Redirecting to  /bin/systemctl  restart  docker.service
 
下载镜像:
[root@docker1 ~] # docker search centos
 
[root@docker1 ~] # docker pull 
 
[root@docker1 ~] # docker run -dti --name=mytest2 docker.io/nickistre/centos-lamp /bin/bash        
 
 
[root@docker1 ~] # docker ps -l      #查看容器的状态
CONTAINER ID        IMAGE                               COMMAND             CREATED             STATUS              PORTS                     NAMES
118479ccdebb        docker.io /nickistre/centos-lamp    "/bin/bash"          16 minutes ago      Up About a minute   22 /tcp , 80 /tcp , 443 /tcp    mytest1
 
[root@docker1 ~] # docker attach 118479ccdebb           #进入容器
[root@118479ccdebb ~] # ifconfig    #容器自动分配的一个ip地址
eth0      Link encap:Ethernet  HWaddr 02:42:C0:A8:64:01  
           inet addr:192.168.100.1  Bcast:0.0.0.0  Mask:255.255.255.0
           inet6 addr: fe80::42:c0ff:fea8:6401 /64  Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:7112 errors:0 dropped:0 overruns:0 frame:0
           TX packets:3738 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0 
           RX bytes:12175213 (11.6 MiB)  TX bytes:249982 (244.1 KiB)
 
lo        Link encap:Local Loopback  
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1 /128  Scope:Host
           UP LOOPBACK RUNNING  MTU:65536  Metric:1
           RX packets:1 errors:0 dropped:0 overruns:0 frame:0
           TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0 
           RX bytes:28 (28.0 b)  TX bytes:28 (28.0 b)
 
[root@118479ccdebb ~] # ping 192.168.101.1      #101.1位docker2的容器的ip地址
PING 192.168.101.1 (192.168.101.1) 56(84) bytes of data.
64 bytes from 192.168.101.1: icmp_seq=1 ttl=62  time =1.30 ms
64 bytes from 192.168.101.1: icmp_seq=2 ttl=62  time =0.620 ms
64 bytes from 192.168.101.1: icmp_seq=3 ttl=62  time =0.582 ms
 
 
至此不同宿主下面的容器就能互相通信了 ,那么如何通过宿主ip访问容器里面的业务呢呢,,

d.通过Dockerfile构建镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@docker1 ~] # cat Dockerfile 
#基本镜像
FROM docker.io /nickistre/centos-lamp
 
#作者
MAINTAINER PAIPX
 
#RUN命令
 
ADD  apache-tomcat-6.0.43  /usr/local/apache-tomcat-6 .0.43
RUN   cd  /usr/local/  &&  mv  apache-tomcat-6.0.43 tomcat
ADD  jdk-6u22-linux-x64.bin  /root/
RUN   cd  /root/  &&  chmod  +x jdk-6u22-linux-x64.bin && . /jdk-6u22-linux-x64 .bin &&  mkdir  -p  /usr/java/  &&  cp   jdk1.6.0_22  /usr/java/jdk  -a
#构建环境变量
ENV JAVA_HOME  /usr/java/jdk
ENV CLASSPATH $CLASSPATH:$JAVA_HOME /lib :$JAVA_HOME /jre/lib
ENV PATH $JAVA_HOME /bin :$JAVA_HOME /jre/bin :$PATH:$HOMR /bin
ENV CATALINA_HOME  /usr/local/tomcat
ENV PATH $CATALINA_HOME /bin :$PATH
RUN  mkdir  -p  "$CATALINA_HOME"
WORKDIR  $
#暴露端口
EXPOSE  8080
CMD [  "catalina.sh" "run" ]

build重构一个镜像

1
[root@docker1 ~] # docker build -t tomcat2 .

启动一个容器

1
[root@docker1 ~] # docker run -dti -p 8000:8080 --name=mytest4 tomcat2

然后通过http://ip:8000访问即可



本文转自 Anonymous123 51CTO博客,原文链接:http://blog.51cto.com/woshitieren/1766830

相关文章
|
3天前
|
运维 监控 安全
构建高效自动化运维体系:Ansible与Docker的协同实战
【5月更文挑战第25天】 在当今快速迭代的软件发布环境中,自动化运维成为确保部署效率和可靠性的关键。本文通过深入分析Ansible和Docker技术,探索它们如何协同工作以构建一个高效的自动化运维体系。文章不仅介绍了Ansible的配置管理功能和Docker容器化的优势,还详细阐述了将两者结合的实践策略,旨在帮助读者理解并实现更智能、更灵活的基础设施管理。
|
1天前
|
存储 网络协议 文件存储
如何使用Docker本地部署Traefik并实现公网访问内网服务
如何使用Docker本地部署Traefik并实现公网访问内网服务
|
1天前
|
监控 安全 云计算
云端防御战线:云计算环境下的网络安全策略构建高效稳定的Docker容器监控体系
【5月更文挑战第27天】 在数字化时代的浪潮中,云计算已成为企业与个人存储和处理数据的重要平台。然而,随着云服务使用率的飙升,网络威胁也愈发狡猾且复杂。本文将深入探讨在云计算环境中维护网络安全的挑战及策略,重点分析信息安全的关键组成部分,并提出多层次防御模型以增强云环境的数据保护能力。通过剖析最新的安全技术与实践,我们旨在为读者提供一套全面的网络安全解决方案蓝图。
|
1天前
|
Docker 容器
【开发问题记录】启动某个服务时请求失败(docker-componse创建容器时IP参数不正确)
【开发问题记录】启动某个服务时请求失败(docker-componse创建容器时IP参数不正确)
8 1
|
1天前
|
运维 安全 持续交付
构建高效自动化运维体系:Ansible与Docker的协同实践
【5月更文挑战第27天】在当今IT基础设施管理领域,自动化和微服务架构日益成为提高效率和响应速度的关键。本文将探讨如何通过结合Ansible和Docker技术,打造一套既灵活又可靠的自动化运维体系,实现持续集成、持续部署以及自动化管理。文章不仅介绍了相关技术的核心概念,还提供了实际案例分析,以期给运维专业人士提供参考,帮助他们优化现有的运维流程。
|
1天前
|
运维 监控 数据安全/隐私保护
构建高效自动化运维体系:Ansible与Docker的协同实践
【5月更文挑战第27天】 在现代IT基础设施管理领域,自动化运维已经成为提升效率、确保一致性和降低人为错误的关键手段。本文将深入探讨如何通过结合Ansible和Docker技术,构建一个灵活且高效的自动化运维体系。不同于传统摘要的概括性描述,我们将直接切入主题,展示这两个工具如何在实际场景中相互补充,实现配置管理、部署流程的自动化,以及如何处理复杂环境中的运维挑战。通过阅读本文,读者可以获得对自动化运维实践中关键技术选择和应用的深刻见解。
|
2天前
|
运维 持续交付 数据安全/隐私保护
构建高效自动化运维体系:Ansible与Docker的协同实践
【5月更文挑战第26天】 在追求持续交付和快速迭代的现代软件开发过程中,自动化运维成为确保系统稳定性和提升部署效率的关键。本文将探讨如何通过结合Ansible和Docker技术,构建一个既灵活又强大的自动化运维体系。我们将介绍Ansible的作用、Docker容器化的优势以及二者结合的最佳实践,旨在为读者提供一套可落地的解决方案,以优化他们的DevOps流程。
|
4天前
|
运维 安全 Devops
构建高效自动化运维体系:Ansible与Docker的协同实践
【5月更文挑战第23天】 在现代IT基础设施管理中,自动化运维已成为推动效率和可靠性的关键因素。本文探讨了如何利用Ansible这一强大的自动化工具与容器化技术的代表Docker相结合,构建一个高效的自动化运维体系。通过分析两者的特点及互补性,我们展示了一种整合策略,该策略可帮助企业实现快速、一致且安全的部署和管理过程。
|
5天前
|
运维 监控 Docker
构建高效自动化运维体系:Ansible与Docker的完美结合
【5月更文挑战第23天】 在现代IT基础设施管理中,自动化运维已成为提升效率、确保一致性和降低人为错误的关键手段。本文深入探讨了如何通过结合Ansible和Docker技术,构建一个高效、可靠的自动化运维体系。文章首先概述了自动化运维的必要性,接着详细阐述了Ansible和Docker各自的核心优势,最后提供了一个实践案例来展示如何将两者融合以实现运维自动化的最佳实践。
|
5天前
|
缓存 Linux 开发工具
Ubantu docker学习笔记(二)拉取构建,属于你的镜像
Ubantu docker学习笔记(二)拉取构建,属于你的镜像