本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
SAE底层基于Kubernetes,因此对于可以执行docker run
命令的镜像或者能部署到Kubernetes的镜像,都可以直接在SAE中运行。本文介绍在SAE中运行镜像的主要考虑方面,包括如何选择镜像服务、镜像仓库、设置镜像Tag与部署镜像,以及如何查看修改镜像启动命令与配置文件等。
在SAE上部署无状态的服务
虽然SAE在理论上能部署任意镜像,但还是推荐在SAE部署无状态的镜像服务,主要原因如下:
网络层面:SAE中的容器随时可以被销毁(主动部署触发或者底层物理机腾挪触发等),并拉起新的容器(IP发生变化)。因此,如果您的服务强依赖于容器的固定IP或者容器的顺序,就不适合部署在SAE,或者只能部署一个单容器用作简单的测试,不用于生产环境。如果是对外需要固定IP,可以通过绑定私网或者公网SLB解决。
持久化存储层面:因为容器随时可以被销毁,拉起新的容器,之前容器上存储的数据都会丢失,所以如果只是部署单个容器则需要将持久化的目录挂载到NAS。具体操作,请参见设置NAS存储;如果是部署多个有状态的容器加上需要共享存储,则无法在SAE部署。
若在SAE上部署有状态服务,您需要自行验证服务的高可用和容灾能力,SAE不承诺SLA。
选择镜像类型
镜像仓库
ACR镜像仓库(推荐)
推荐采用阿里云容器镜像服务ACR,分个人版实例与企业版实例。更多信息,请参见个人版和企业版。如果您采用ACR,那么在SAE可以直接选择您同一个阿里云账号内的镜像部署。
更多信息,请参见跨账号拉取阿里云镜像。
Docker Hub镜像仓库
部分用户可能需要直接采用Docker Hub中的镜像,以nginx镜像为例,如果您期望部署nginx 1.23.1版本的镜像,则在SAE的公有镜像页签内直接填入该镜像地址。
镜像地址如下:
将完整镜像地址填入SAE:
重要SAE默认部署在VPC网络内,拉取公网镜像需要能访问公网,则需要在私网内开通NAT来访问公网。更多信息,请参见配置NAT网关使SAE应用能访问公网。
自建镜像仓库
对于自建镜像仓库的情况,如果您想要拉取镜像并配置在公有镜像页签内,需要确保该镜像能够公网公开访问,并且限制SAE的出口IP。请加入钉群(钉群号:32874633),联系阿里云研发团队获取SAE的出口IP。
镜像Tag
开发者可能会因为方便而直接使用latest
版本的镜像部署,包括每次打包新版代码也会直接覆盖latest
版本的镜像,但是在SAE中如果使用latest
版本的镜像会遇到无法回滚、无法拉取到最新版本的镜像等问题,因此建议您在SAE中部署有版本意义的镜像Tag,例如时间戳。
部署docker run
的镜像
docker run
的参数和SAE的支持如下:
| SAE支持 |
| 无需设置该参数,在SAE中天然作为一个独立容器运行。 |
| 无需设置该参数,SAE有Webshell能力可以直接进入容器。 |
| 无需设置该参数,SAE容器端口即为进程端口。 |
| 不支持设置或修改,SAE会为每个容器分配唯一的 |
| 在SAE中可以通过挂载/etc/resolv.conf文件配置DNS。 |
| 在SAE控制台配置环境变量即可。具体操作,请参见设置环境变量。 |
| 无需设置该参数,SAE使用阿里云VPC网络。 |
| |
| 在SAE中可以挂载NAS、OSS、ConfigMap。 |
查看镜像的启动命令
方式一:docker image inspect
docker image inspect nginx:1.23.1 [ { "Container": "5f19bc2cd794cd60ec845cbed7a60c85003dc56f26ee807f9eea2480bc46****", "ContainerConfig": { ... "Cmd": [ "/bin/sh", "-c", "#(nop) ", "CMD [\"nginx\" \"-g\" \"daemon off;\"]" ], "Entrypoint": [ "/docker-entrypoint.sh" ], ... }, "Config": { ... "Cmd": [ "nginx", "-g", "daemon off;" ], "Entrypoint": [ "/docker-entrypoint.sh" ], }, } ]
方式二:查看文档
通常镜像文档中,可以看到当前镜像的启动命令,以nginx1.23.1版本的镜像为例。
关于镜像中的Entrypoint和CMD设置组合的实际运行效果,请参见官方说明文档。
在SAE中修改镜像的启动命令
如果镜像有公开文档,建议您先阅读文档。当前很多镜像都提供了可配置的环境变量,因此无需修改镜像启动命令。以nginx镜像为例,支持的环境变量如下:
如果开放的环境变量较少,或者您有一些定制需求,确实需要修改镜像的启动命令(比如增加一些参数),那么通过底层基于Kubernetes的SAE,可以设置Command和Args来完全覆盖镜像的启动命令。具体操作,请参见设置镜像部署应用的启动命令。
Nginx
PHP(执行多个命令)
修改镜像内的配置文件
除了修改镜像的启动命令,还有部分场景是修改镜像内的配置文件,比如典型的就是nginx.conf
。可以使用SAE的注入配置信息能力,后续修改配置文件后,重新部署应用即可。更多信息,请参见注入配置信息。
调试镜像
部署镜像的过程中可能会出现一直无法启动或者启动以后不符合预期等问题,请参见常见问题索引尝试解决。如果仍然无法解决问题,请加入钉群(钉群号:32874633),联系阿里云研发团队。