手工部署容器应用——容器虚拟机

概述

如果您的应用的依赖包比较复杂,无法直接上传或者通过新浪云的云端构建程序构建的时候,您可以通过线上手工部署的方式来部署您的程序,手工部署的过程和使用云主机、VPS等差不多,下文中我们将一步一步教您如何在新浪云手工部署一个应用。

警告

手工部署主要用来在线构建容器镜像、运行调试,线上环境请 一定要打成镜像 后再部署。

创建实例

首先,进入云应用首页,点击『创建应用』创建一个新的应用。应用类型选择『自定义 / 容器 / 手工部署』。

../../_images/docker-vm-create.png

按照自己的需求,选择一个操作系统镜像,选择机器的配置,输入应用名,然后点击创建应用,一个新的容器虚拟机就创建成功了。

登录实例

虚拟机创建成功后,控制台会跳转到『容器管理』页面,等容器虚拟机启动成功(状态为运行)时,点击容器虚拟机右侧的『终端』,就可以直接在 WEB 中直接进入 ssh 登录进容器虚拟机了。

../../_images/docker-vm-management.png

你也可以通过 SSH/SFTP 客户端工具来登录管理实例,详细见: 如何使用 SSH/SFTP 客户端登录容器虚拟机

安装应用程序

进入容器虚拟机的 ssh 终端后,就可以跟普通的虚拟机一样的的管理了。(下文中,我们 CentOS-7 系统安装配置运行一个 Nginx 服务器为示例)。

$ yum install epel-release
$ yum install nginx

启动应用程序

现在访问应用 URL,页面会返回 502 ,因为现在还没有进程在处理请求。

应用创建后,新浪云会自动给容器虚拟机添加一个 HTTP 负载均衡,您只需要在容器虚拟机中启动一个应用程序,让程序监听在 5050 端口上,就可以通过应用的二级域名 http://应用名.applinzi.com 来访问自己的应用程序了。

修改 Nginx 的配置文件 /etc/nginx/nginx.conf ,修改以下配置:

daemon off;
worker_processes 2;

http {

    ...

    server {
        listen 5050 default_server;
        ...
    }
}

警告

注意其中的 daemon 选项,所有启动的应用程序必须启动在前台,不能是后台程序。

我们在终端中启动 Nginx 。

$ nginx

现在,再访问应用的 URL,就能看到 Nginx 的 Welcome 页面了。

调试和测试时,您可以直接在 ssh 终端中启动应用程序,但是如果虚拟机重启或者应用程序异常退出,通过 ssh 终端启动的程序不会被系统自动重启,如果需要自己的应用程序能自动重启,你需要使用系统的进程管理工具来启动应用程序,容器虚拟机默认的进程管理工具是 Mint ,在系统的 /etc/ 目录下新建一个配置文件, Procfile ,添加如下配置:

web: nginx

在命令行中执行 mint start web ,即可使用 Mint 来启动 web 进程,现在进程已经由系统来管理,虚拟机如果重启会自动启动该进程。

Mint 进程管理工具

Mint 的配置文件为 /etc/Procfile ,Procfile 中每一行定义一个要启动的进程,格式为:

进程名:启动命令

配置示例:

web: go run web.go -a :$PORT
worker: bundle exec ruby worker.rb

Mint 支持如下命令:

$ mint              -- 打印帮助信息
$ mint reload       -- 重新读取配置文件并重启所有进程
$ mint start XXX    -- 启动进程名为 XXX 的进程
$ mint stop  XXX    -- 停掉进程名为 XXX 的进程
$ mint restart XXX  -- 重启进程名为 XXX 的进程
$ mint status       -- 打印所有运行的进程运行状况

Mint 会自动重启异常退出的进程,但是如果进程连续 3 次启动不到 1 分钟就退出,Mint 会认为进程无法启动而不再重启。

Crontab 定时任务

容器虚拟机默认没有安装 crond ,如果你需要使用容器虚拟机的 crontab 功能,您需要安装并运行 crond 进程。(以 CentOS 为例):

$ yum install cronie

将 crond 启动命令加入到 /etc/Procfile

crond: crond -n

最后,执行 mint start crond 启动 crond 进程。

创建镜像

手工部署完一台虚拟机后,你可以给虚拟机创建镜像,在容器虚拟机的右侧选择『创建镜像』。

../../_images/docker-create-image.png

其中 启动命令 是你要让容器启动后要运行的程序。这个命令必须运行在前台,否者容器会启动失败。

创建出来的镜像可以直接用来启动新的应用,在创建应用的时候选择『自定义/容器/我的镜像』,选择刚才打包出来的镜像即可。