Commit 42744627 authored by ymwangya's avatar ymwangya

修改代码,启动docker容器时,将docker端口暴露出来

parent ac45a6f4
Pipeline #6 failed with stages
...@@ -9,5 +9,6 @@ public class ClientProperties { ...@@ -9,5 +9,6 @@ public class ClientProperties {
private String zookeeperUrl = "zookeeper://127.0.0.1:2181"; private String zookeeperUrl = "zookeeper://127.0.0.1:2181";
private String cloudUrl = "127.0.0.1:9300"; private String cloudUrl = "127.0.0.1:9300";
private String appName = "default"; private String appName = "default";
} }
...@@ -2,10 +2,10 @@ server: ...@@ -2,10 +2,10 @@ server:
port: 9090 port: 9090
zookeeper: zookeeper:
url: 127.0.0.1:2181 url: 192.168.31.156:2181
bs: bs:
cloudcenter: cloudcenter:
name: my-bs-cloud-center name: my-bs-cloud-center
ipservice: ipservice:
url: 127.0.0.1:23333 url: 192.168.31.156:23333
\ No newline at end of file \ No newline at end of file
...@@ -11,6 +11,7 @@ import lombok.Data; ...@@ -11,6 +11,7 @@ import lombok.Data;
public class ContainerDescription { public class ContainerDescription {
private String mode; private String mode;
private int replicas; private int replicas;
// dockerContainer模板 // dockerContainer模板
private DockerContainer dockerContainer; private DockerContainer dockerContainer;
......
...@@ -14,6 +14,8 @@ mybatis: ...@@ -14,6 +14,8 @@ mybatis:
map-underscore-to-camel-case: true map-underscore-to-camel-case: true
mapper-locations: classpath:mapping/*.xml mapper-locations: classpath:mapping/*.xml
debug: false debug: false
#边缘节点的端口
server: server:
port: 8081 port: 8081
...@@ -22,11 +24,11 @@ bs: ...@@ -22,11 +24,11 @@ bs:
name: my-bs-cloud-center name: my-bs-cloud-center
edgenode: edgenode:
name: random name: random
ip-prefix: 192 ip-prefix: 192.168.31
ipservice: ipservice:
ip: 127.0.0.1:23333 ip: 192.168.31.156:23333
sdn-controller: sdn-controller:
host: 127.0.0.1 host: 127.0.0.1
port: 6653 port: 6653
zookeeper: zookeeper:
url: 127.0.0.1:2181 url: 192.168.31.156:2181
bishe.app.app-name=joliu bishe.app.app-name=joliu
bishe.app.cloud-url=127.0.0.1:9091 bishe.app.cloud-url=192.168.31.156:9090
spring.influx.url=http://192.168.0.108:8086 spring.influx.url=http://192.168.0.108:8086
spring.influx.user=admin spring.influx.user=admin
......
...@@ -32,7 +32,7 @@ public class BisheMultiNodeTests { ...@@ -32,7 +32,7 @@ public class BisheMultiNodeTests {
@Test @Test
public void testInFluxDB() { public void testInFluxDB() {
Point.Builder builder = Point.measurement("monitor"); Point.Builder builder = Point.measurement("monitor");//这是检测功能
System.out.println(System.currentTimeMillis()); System.out.println(System.currentTimeMillis());
builder builder
.addField("rate", 1221f) .addField("rate", 1221f)
...@@ -60,6 +60,7 @@ public class BisheMultiNodeTests { ...@@ -60,6 +60,7 @@ public class BisheMultiNodeTests {
container.setName("APP1"); container.setName("APP1");
container.setCommand("sh"); container.setCommand("sh");
container.setImage("joliu/networktest"); container.setImage("joliu/networktest");
//container.setImage("dfs_transfer_client");
containerDescription.setDockerContainer(container); containerDescription.setDockerContainer(container);
List<ContainerDescription> cds = new ArrayList<>(); List<ContainerDescription> cds = new ArrayList<>();
......
package top.ninwoo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import top.ninwoo.bishe.starter.entity.ContainerMonitor;
import top.ninwoo.bishe.starter.service.ClusterService;
import top.ninwoo.bishe.starter.service.NetworkService;
import top.ninwoo.client.BisheTestMain;
import top.ninwoo.common.entity.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = BisheTestMain.class)
public class YmwangDbcTests {
/*分散计算业务的测试*/
@Autowired
private ClusterService clusterService;
@Resource
private NetworkService networkService;
@Test
public void testSendSeparateConfig() {
ArrayList<SeparatedClusterConfig> clusterConfigs = new ArrayList<>();
SeparatedClusterConfig separatedClusterConfig = new SeparatedClusterConfig();
// TODO: 这个ID应该是从借口获取的
separatedClusterConfig.setEdgeNodeId("192.168.31.198:8881"); //边缘节点IP+端口号
ClusterConfig clusterConfigCom = new ClusterConfig();
clusterConfigCom.setId(11113l);
clusterConfigCom.setOwner("joliu");
List<ContainerDescription> cds = new ArrayList<>();
/*通过镜像"ymwang/dfs_transfer_client"启动一个名为client的容器,来作为文件的收发端(图片的切割、合并)*/
ContainerDescription containerDescriptionClient = new ContainerDescription();
containerDescriptionClient.setMode("normal");
containerDescriptionClient.setReplicas(1);
DockerContainer container = new DockerContainer();
container.setName("dbc_client");//创建一个client容器
container.setCommand("bash");
container.setImage("dbc_client");
container.setPorts("8999");//指定容器端口
containerDescriptionClient.setDockerContainer(container);
cds.add(containerDescriptionClient);//将client容器添加到list集合中
/*通过镜像"ymwang/dfs_transfer_server"启动一个名为server1的容器,用于存储图片切片*/
ContainerDescription containerDescriptionServer1 = new ContainerDescription();
containerDescriptionServer1.setMode("normal");
containerDescriptionServer1.setReplicas(20);
DockerContainer containerServer1 = new DockerContainer();
containerServer1.setName("dbc_server");//创建一个server1容器
containerServer1.setCommand("sh");
containerServer1.setImage("dbc_server");
containerDescriptionServer1.setDockerContainer(containerServer1);
cds.add(containerDescriptionServer1);//将server1容器添加到list集合中
clusterConfigCom.setDockers(cds);
NetworkTopology topo = new NetworkTopology();
//topo.setAppNames(new String[]{"Run", "APP", "br:ovs1"});
topo.setAppNames(new String[]{"dbc_client", "dbc_server", "br:ovs1"});
// 这个参数好像没啥用
topo.setTopologyId(11);
topo.setTopology(new int[][]{{0,0,0},{0,0,0},{1,1,0}});
clusterConfigCom.setTopology(topo);
separatedClusterConfig.setClusterConfig(clusterConfigCom);
clusterConfigs.add(separatedClusterConfig);
clusterService.sendClusterConfigToEdgeNode(clusterConfigs);
}
//测试容器ip
@Test
public void getIpListByAppNameTest() {
List<String> ipList = networkService.getIpListByAppName(11113L, "dbc_server");
System.out.println(ipList);
}
@Test
public void getIpList() {
List<String> ipListS = networkService.getIpListByAppName(11113L, "dbc_server");
String[] ipList = new String[ipListS.size()];
for (int i = 0; i < ipListS.size(); i++) {
if(!ipListS.isEmpty()){
String ip_tmp = ipListS.get(i);
String[] split_list = ip_tmp.split("/");
ipList[i] = split_list[0]+":8082";
}
}
for (int j = 0; j < ipList.length; j++) {
System.out.println(ipList[j]);
}
}
@Test
public void removeClusterFromEdgeNodeTest() {
clusterService.removeClusterFromEdgeNode(11113L);
}
@Test
public void getLogicalNetworkTopologyTest() {
NetworkTopology logicalNetworkTopology = networkService.getLogicalNetworkTopology(11113L);
System.out.println(logicalNetworkTopology);
}
@Test
public void enableNetworkMonitorTest() throws InterruptedException {
String res = networkService.enableNetworkMonitor(11112L, "server");
System.out.println(res);
}
@Test
public void cancelNetworkMonitorTest() {
String run = networkService.cancelNetworkMonitor(11112L, "server");
System.out.println(run);
}
@Test
public void getNetworkMonitorTest() throws InterruptedException {
List<ContainerMonitor> run = networkService.getContainerMonitors(11112L, "Run");
int i = 0;
while(i < 10) {
run.forEach(c -> {
System.out.println(c.getContainerInfo());
});
Thread.sleep(500);
i++;
}
}
}
package top.ninwoo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import top.ninwoo.bishe.starter.entity.ContainerMonitor;
import top.ninwoo.bishe.starter.service.ClusterService;
import top.ninwoo.bishe.starter.service.NetworkService;
import top.ninwoo.client.BisheTestMain;
import top.ninwoo.common.entity.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = BisheTestMain.class)
public class YmwangDfsTests {
@Autowired
private ClusterService clusterService;
@Resource
private NetworkService networkService;
@Test
public void testSendSeparateConfig() {
ArrayList<SeparatedClusterConfig> clusterConfigs = new ArrayList<>();
SeparatedClusterConfig separatedClusterConfig = new SeparatedClusterConfig();
// TODO: 这个ID应该是从借口获取的
separatedClusterConfig.setEdgeNodeId("192.168.31.198:8881");
ClusterConfig clusterConfigStore = new ClusterConfig();
clusterConfigStore.setId(11112l);
clusterConfigStore.setOwner("joliu");
List<ContainerDescription> cds = new ArrayList<>();
/*通过镜像"ymwang/dfs_transfer_client"启动一个名为client的容器,来作为文件的收发端(图片的切割、合并)*/
ContainerDescription containerDescriptionClient = new ContainerDescription();
containerDescriptionClient.setMode("normal");
containerDescriptionClient.setReplicas(1);
DockerContainer container = new DockerContainer();
container.setName("dfs_client");//创建一个client容器
container.setCommand("bash");
container.setImage("dfs_client");
container.setPorts("8099");//指定容器端口
containerDescriptionClient.setDockerContainer(container);
cds.add(containerDescriptionClient);//将client容器添加到list集合中
/*通过镜像"ymwang/dfs_transfer_server"启动一个名为server1的容器,用于存储图片切片*/
ContainerDescription containerDescriptionServer1 = new ContainerDescription();
containerDescriptionServer1.setMode("normal");
containerDescriptionServer1.setReplicas(20);
DockerContainer containerServer1 = new DockerContainer();
containerServer1.setName("dfs_server");//创建一个server1容器
containerServer1.setCommand("sh");
containerServer1.setImage("dfs_server");
containerDescriptionServer1.setDockerContainer(containerServer1);
cds.add(containerDescriptionServer1);//将server1容器添加到list集合中
clusterConfigStore.setDockers(cds);
NetworkTopology topo = new NetworkTopology();
//topo.setAppNames(new String[]{"Run", "APP", "br:ovs1"});
topo.setAppNames(new String[]{"dfs_client", "dfs_server", "br:ovs1"});
// 这个参数好像没啥用
topo.setTopologyId(11);
topo.setTopology(new int[][]{{0,0,0},{0,0,0},{1,1,0}});
clusterConfigStore.setTopology(topo);
separatedClusterConfig.setClusterConfig(clusterConfigStore);
clusterConfigs.add(separatedClusterConfig);
clusterService.sendClusterConfigToEdgeNode(clusterConfigs);
}
//测试容器ip
@Test
public void getIpListByAppNameTest() {
List<String> ipList = networkService.getIpListByAppName(11112L, "dfs_server");
System.out.println(ipList);
}
@Test
public void getIpList() {
List<String> ipListS = networkService.getIpListByAppName(11112L, "dfs_server");
String[] ipList = new String[ipListS.size()];
for (int i = 0; i < ipListS.size(); i++) {
if(!ipListS.isEmpty()){
String ip_tmp = ipListS.get(i);
String[] split_list = ip_tmp.split("/");
ipList[i] = split_list[0];
}
}
for (int j = 0; j < ipList.length; j++) {
System.out.println(ipList[j]);
}
}
@Test
public void removeClusterFromEdgeNodeTest() {
clusterService.removeClusterFromEdgeNode(11112L);
}
@Test
public void getLogicalNetworkTopologyTest() {
NetworkTopology logicalNetworkTopology = networkService.getLogicalNetworkTopology(11112L);
System.out.println(logicalNetworkTopology);
}
@Test
public void enableNetworkMonitorTest() throws InterruptedException {
String res = networkService.enableNetworkMonitor(11112L, "dfs_server");
System.out.println(res);
}
@Test
public void cancelNetworkMonitorTest() {
String run = networkService.cancelNetworkMonitor(11112L, "dfs_server");
System.out.println(run);
}
@Test
public void getNetworkMonitorTest() throws InterruptedException {
List<ContainerMonitor> run = networkService.getContainerMonitors(11112L, "Run");
int i = 0;
while(i < 10) {
run.forEach(c -> {
System.out.println(c.getContainerInfo());
});
Thread.sleep(500);
i++;
}
}
}
...@@ -64,7 +64,7 @@ public class DockerServiceImpl implements DockerService, InitializingBean { ...@@ -64,7 +64,7 @@ public class DockerServiceImpl implements DockerService, InitializingBean {
/** /**
* 使用系统命令 docker run -itd 在后台启动一个容器, * 使用系统命令 docker run -itd 在后台启动一个容器,
* 使用这种方式的一个重要愿意,是因为我没搞明白docker java启动容器的api到底如何使用 * 使用这种方式的一个重要原因,是因为我没搞明白docker java启动容器的api到底如何使用
* @param container 输入一个容器的描述信息 * @param container 输入一个容器的描述信息
* @return 返回容器启动之后真实的描述信息 * @return 返回容器启动之后真实的描述信息
*/ */
......
...@@ -94,7 +94,13 @@ public class DockerUtilsImpl implements DockerUtils { ...@@ -94,7 +94,13 @@ public class DockerUtilsImpl implements DockerUtils {
public DockerContainer runDocker(DockerContainer container) { public DockerContainer runDocker(DockerContainer container) {
// TODO: 这里启动Docker容器,需要再研究port如何起作用 // TODO: 这里启动Docker容器,需要再研究port如何起作用
// TODO: 这里还需要处理name等属性为空的情况 // TODO: 这里还需要处理name等属性为空的情况
String cmd = "docker run -itd --name " + container.getName() + " --privileged " + container.getImage() + " " + container.getCommand(); //String cmd = "docker run -itd --name " + container.getName() + " --privileged " + container.getImage() + " " + container.getCommand();
String cmd;
if(container.getPorts() == null){
cmd = "docker run -itd --name " + container.getName() + " --privileged " + container.getImage() + " " + container.getCommand();
}else{
cmd = "docker run -itd -p " + container.getPorts()+ ":" +container.getPorts()+ " " + "--name " + container.getName() + " --privileged " + container.getImage() + " " + container.getCommand();
}
String result = linuxCtlUtils.runCmd(cmd); String result = linuxCtlUtils.runCmd(cmd);
if(result.contains("Error")) { if(result.contains("Error")) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment