在本地容器模式下,Cloud Toolkit插件将会在本地启动容器,并在容器中运行您的微服务应用。本文介绍如何配置本地容器云效模式。
前提条件
在使用本地容器模式前,请先完成如下配置:
背景信息
使用本地容器启动应用有如下优点:
-
支持非Java语言。
-
本地微服务应用可在更贴近生产环境的容器当中运行。
比如,您本地使用Windows系统开发,但生产环境使用Linux系统运行应用,便可通过此模式在本地系统运行Linux容器并在容器中运行您的微服务应用。
整体运行架构如下:

步骤一:本地容器配置
-
启动IntelliJ IDEA。
-
在顶部菜单栏中选择。
-
在Run/Debug Configurations页面单击左侧的+图标,在Add New Configuration小窗口中选择Alibaba Microservice Container,然后在右侧界面中配置本地容器相关参数。
右侧配置表单包含以下参数:Name(例如 provider-container)、Server(选择 Local Docker Server)、Application type(选择 Java(通用Jar包))、Artifact(选择 Maven Build,若出现橙色提示 "Please add Run Maven Goal task before launch",需在 Before launch 中添加 Maven Goal 任务)。此外可按需配置 Executable(Entrypoint 与 Command)、Bind ports、Bind mounts 和 Environment variables,完成后单击 OK。
参数
描述
Name
自定义本地容器名称。
Server
Docker Daemon后台进程。Cloud Toolkit插件当前只支持使用本地Docker,此处默认为Local Docker Server,不可设置。
Application Type
选择应用类型。当选择镜像类型时,Cloud Toolkit插件会使用您定义的本地容器镜像来运行微服务容器。若选择其他类型,则会使用默认容器来运行您的微服务应用。
-
Java(通用Jar包):如您的应用为Java语言,使用Spring Cloud或Dubbo微服务框架,打包类型为JAR包,可选择此类型。
-
Tomcat(通用War包):如您的应用为Java语言,使用Dubbo或Spring Cloud微服务框架,打包类型为WAR包,可选择此类型。
-
HSF-Container(HSF类型Jar/War包):如您的应用为Java语言,使用HSF微服务框架,打包类型为JAR或WAR包,可选择此类型。
-
Image:运行自定义的微服务容器。
Artifact
选择微服务应用包来源,当应用类型为非镜像时此参数有效。当前支持以下两种方式:
-
Maven Build:在本地对相应服务模块进行Maven构建,使用构建所得到的包进行运行。使用此方式需要手动添加Maven构建任务,具体内容,请参见Maven Build构建任务说明。
-
Use File:使用指定的本地文件作为应用包进行运行。
Image ID or name
自定义容器镜像ID或名称,当应用类型为镜像时此参数有效。
Entrypoint
容器镜像的入口点,当应用类型为镜像时此参数有效。若设置后,将覆盖自定义容器镜像中的入口点。
Command
容器镜像的命令,当应用类型为镜像时此参数有效。若设置后,将覆盖自定义容器镜像中的命令。
Bind ports
将宿主机的端口映射至容器内的端口,格式为<宿主机端口>:<容器端口>,多个端口映射使用空格分隔。设置此参数可使得在容器外通过宿主机端口来访问对应的容器内端口。
说明在默认情况下,CloudToolkit插件会暴露Spring Cloud服务端口和调试端口,无需在此处重复设置,请参见端口映射说明。
Bind mounts
将宿主机的文件目录映射至容器内的文件目录,格式为<宿主机路径>:<容器路径>,多个路径映射使用空格分隔。设置此参数可使得宿主机和容器共享相同的文件目录,并可分别进行读写。
Environment variable
设置容器的环境变量,格式为<Key>=<Value>,多个环境变量使用分号分隔。
说明在默认情况下,CloudToolkit插件会注入一些微服务相关参数至容器内,请参见微服务环境变量说明。
-
-
配置完成后,单击OK,保存配置。
步骤二:运行容器
单击运行容器配置,如果当前为第一次运行,Cloud Toolkit插件会自动拉取底层所依赖的默认容器镜像和相关工具,此阶段稍作等待。等环境初始化后,应用启动日志如下:
ProviderApplication.java 代码如下。
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
运行容器后,控制台输出的应用启动日志:
Proxy container created: 51de759f803184765d16f4d53564c6d6510b581356fd2ed98fb9bfdfa437ef2a
Proxy container start successfully.
User container created: da1d32992d644f3cb80262ca4395ddada0ab2c7a564ec15f852b31c8c9f3ec80
User container started successfully.
total 32128
drwxr-xr-x 1 root root 4096 Mar 23 07:11 .
drwxr-xr-x 1 root root 4096 Mar 23 07:11 ..
-rw-r--r-- 1 root root 32886156 Mar 3 14:05 nacos-service-provider-0.0.1-SNAPSHOT.jar
Picked up JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
Listening for transport dt_socket at address: 5005
2021-03-23 07:12:00.189 INFO 9 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
...
(可选)步骤三:调试Java应用
Cloud Toolkit插件会通过JAVA_TOOL_OPTIONS来启用Java应用调试,并暴露该调试端口至宿主机。调试端口默认为5005,如端口已被占用则依次往后顺延。
您可使用相关工具来连接该端口进行应用调试,也可使用IntelliJ IDEA中自带的Attatch debugger功能来进行调试:容器启动完成后,控制台末尾输出 Listening for transport dt_socket at address: 5005,其后出现 Attach debugger 链接,单击即可连接远程调试器。
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
Proxy container created: 51de759f803184765d16f4d53564c6d6510b581356fd2ed98fb9bfdfa437ef2a
Proxy container start successfully.
User container created: da1d32992d644f3cb80262ca4395ddada0ab2c7a564ec15f852b31c8c9f3ec80
User container started successfully.
total 32128
drwxr-xr-x 1 root root 4096 Mar 23 07:11 .
drwxr-xr-x 1 root root 4096 Mar 23 07:11 ..
-rw-r--r-- 1 root root 32886156 Mar 3 14:05 nacos-service-provider-0.0.1-SNAPSHOT.jar
Picked up JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
Listening for transport dt_socket at address: 5005 Attach debugger
2021-03-23 07:12:00.189 INFO 9 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigu...
端口映射说明
Cloud Toolkit插件会映射Java应用的调试端口和Spring Cloud服务端口至宿主机,详细说明如下:
-
Java调试端口:默认为5005,如已占用则依次往后顺延。此插件会通过JAVA_TOOL_OPTIONS参数注入调试信息,如使用非镜像类型启动容器,默认容器镜像会使用该调试信息运行您的微服务应用。如您采用自定义镜像类型来启动容器,请在您的启动脚本中使用该参数进行应用启动。
-
Spring Cloud服务端口:默认为8080,如已占用则依次往后顺延。此参数可通过端云互联配置中的本地SpringCloud服务端口进行覆盖。
微服务环境变量说明
Cloud Toolkit插件在启动时会注入如下环境变量至本地微服务容器中。如您使用非镜像类型启动,默认容器镜像的启动脚本会自动识别如下环境变量并启动;如您使用自定义镜像类型启动,可根据需要来使用这些环境变量。
|
环境变量名 |
环境变量值 |
|
PRODUCT |
此环境变量标识当前运行环境的云产品类型,可选择EDAS、SAE或MSE 。 |
|
JAVA_TOOL_OPTIONS |
|
|
ADDRESS_SERVER_HOST |
地址服务器地址。 |
|
ADDRESS_SERVER_PORT |
地址服务器端口。 |
|
ACCESS_KEY |
命名空间AccessKey ID。 |
|
SECRET_KEY |
命名空间AccessKey Secret。 |
|
TENANT_ID |
命名空间ID。 |
|
SUB_ONLY |
当在端云互联中设置只订阅不注册时,此参数值为true。 |
|
PROJECT_NAME |
本地微服务归属的应用ID。 |
|
REMOTE_IP |
远端中间代理的内网IP,默认取其eth0网卡IP。 |
Maven Build构建任务说明
如果您选择以Maven Build方式来构建微服务应用包,则需在容器配置中添加相应的Maven构建任务。具体操作如下:
-
在本地容器配置中单击Before launch区域的+图标,在弹出的功能列表中选择Run Maven Goal。
-
在弹出的Select Maven Goal对话框中,设置Maven构建任务所对应的模块和执行命令。
在 Working directory 字段中选择目标模块路径,在 Command line 字段中输入命令。
如果您当前的项目工程中包含多个模块,则建议依次添加以下构建任务:
-
添加对项目父级Maven工程的clean install构建任务。
-
添加对目标子模块工程的clean package构建任务。Cloud Toolkit插件将会使用此子模块工程所构建的包来进行运行。
-