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

相关文章
|
1月前
|
Linux 网络安全 Docker
盘古栈云,创建带ssh服务的linux容器
创建带ssh服务的linux容器
269 146
|
11月前
|
NoSQL 关系型数据库 应用服务中间件
docker基础篇:安装tomcat
docker基础篇:安装tomcat
313 64
|
8月前
|
Kubernetes 安全 数据安全/隐私保护
容器云服务是什么?
容器云基于容器技术,实现应用及其依赖的标准化封装,支持跨平台快速部署和高效管理。与传统虚拟机相比,容器共享宿主机操作系统内核,资源占用少、启动快,但隔离性稍弱。Docker Engine通过Dockerfile定义应用环境并生成容器镜像,适合单机场景;Kubernetes作为行业标准编排工具,支持自动扩缩容和服务发现,适用于大规模集群管理;OpenShift提供企业级全流程平台,满足合规要求;Rancher简化多云环境下的Kubernetes管理;CoreOS Tectonic专注于安全性,适用于高安全需求领域。容器云正朝着无服务器化、智能运维和边缘协同等方向发展。
607 2
|
9月前
|
人工智能 监控 安全
容器化AI模型的安全防护:构建可信的AI服务
在AI模型广泛应用的背景下,容器化AI模型的安全防护至关重要。主要安全威胁包括数据窃取、模型窃取、对抗样本攻击和模型后门攻击等。为应对这些威胁,需采取多层次防护措施:容器安全(如使用可信镜像、限制权限)、模型安全(如加密、水印)、数据安全(如加密、脱敏)和推理安全(如输入验证、异常检测)。此外,利用开源工具如Anchore Engine、Falco和ART等,可进一步加强防护。遵循安全开发生命周期、最小权限原则和深度防御等最佳实践,确保AI服务的安全性和可信度。
|
10月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
158 23
|
10月前
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
354 7
|
12月前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。
|
应用服务中间件 Docker 容器
docker应用部署---Tomcat的部署配置
这篇文章介绍了如何使用Docker部署Tomcat服务器,包括搜索和拉取Tomcat镜像、创建容器并设置端口映射和目录映射,以及如何创建一个HTML页面并使用外部机器访问Tomcat服务器。
docker应用部署---Tomcat的部署配置
|
应用服务中间件 Apache Windows
免安装版的Tomcat注册为windows服务
免安装版的Tomcat注册为windows服务
376 3
|
Java 应用服务中间件 Windows
windows服务器重装系统之后,Tomcat服务如何恢复?
windows服务器重装系统之后,Tomcat服务如何恢复?
242 11