自定义镜像

由于当前BAE专业版支持的语言只有java、nodejs、php和python,当用户希望选择其它语言实现一些自定义或增强功能时,用户可以使用BAE专业版的自定义镜像功能。自定义镜像功能帮助用户将集成的镜像代码部署到镜像仓库,然后用户可以选择根据镜像创建应用来实现代码中的功能。在BAE专业版的操作控制台上用户可以通过镜像列表查看镜像仓库中各镜像以及其版本信息。

通过自定义镜像创建应用操作流程如下图:

  1. 在linux系统上安装docker 1.6.0以及以上版本,有关docker的操作请参考docker教程

  2. 在docker客户端上执行docker login -u username -p password -e email registry.bce.baidu.com命令登录镜像仓库。

    • 登录使用的用户名和密码为用户账户的AK/SK密码,AK/SK可以通过“百度云控制台右上角”的“账户名称->安全认证”获取。
    • 登录时的Email地址可以填写任意字符串。
    • BAE镜像仓库采用https协议以确保用户的数据安全。
  3. 执行docker push registry.bce.baidu.com/UserId/image_name:image_tag命令将镜像上传到镜像仓库中。UserId即为用户ID,可以在“百度云控制台右上角”的“账户名称->用户信息->基本信息”中查看。示例如下:

    docker login -u username -p password -e email registry.bce.baidu.com
    docker push registry.bce.baidu.com/UserId/image_name:image_tag
    

    说明:

    • 镜像名称和tag不能超过128个字符。
    • 目前一个用户最多只能push 5个镜像,每个镜像下面的tag不限。
    • 关于如何制作docker镜像请参见制作docker镜像示例
  4. 镜像上传成功后可以在BAE专业版的控制台中的“镜像列表”中进行查看,镜像列表页会显示镜像仓库中所有镜像的名称、ID和创建时间。用户也可以直接在镜像列表页选择对应的镜像直接创建应用。

    点击镜像名称可以查看镜像的详细信息如版本信息,并可以复制镜像的拉取地址,然后执行docker pull MirrorAddress命令拉取镜像,其中MirrorAddress即为复制的镜像拉取地址。

  5. 通过自定义镜像创建应用。

    在镜像列表页对应镜像名称后的操作列选择“创建应用”。自定义镜像在创建应用的环境配置页面可以选择镜像的版本。自定义镜像只能在镜像列表中选取镜像创建,可以是用户自定义的语言。应用创建完成后可以在应用列表中查看应用状态和信息,应用名称下方的“运行时”会显示对应镜像的名称。

    说明:
    BAE专业版可以直接创建应用,在创建应用的时候选择语言和代码管理方式即可。通过应用列表创建的应用只支持BAE官方的运行时,即只支持系统定义的Java、nodejs、php和python语言。

  1. 如果在创建完的应用下新创建环境,创建环境时必须选择镜像的版本。环境创建完成后,镜像的版本信息会显示在“环境详情”页签中。

    说明:

    • BAE代码仓库中的代码存放到/home/bae/app目录下。
    • 如果用户希望在BAE的控制台查看对应环境的日志,日志需要写在/home/bae/log目录,并以'.log'结尾。
    • 如果用户希望重新部署后数据不丢失,需要将数据写入到/home/bae/data目录。
    • 如果用户希望使用WebSSH功能,镜像中需要安装bash,且位于/bin目录下。
    • 对于Web类型的应用,BAE将负载均衡80端口的请求映射到容器的8080端口。因此如果希望通过负载均衡的80端口访问应用,需要在容器的8080端口创建监听。
    • 自定义镜像暂不支持控制台设置环境变量。
    • 自定义镜像暂不支持BAE提供的https功能,但用户可以考虑在镜像中自己定制https。

制作docker镜像示例

  1. 登录镜像仓库。

    docker login -u username -p password -e email registry.bce.baidu.com
    
  2. 从docker官网拉取nginx:stable-alpine镜像。

    docker pull nginx:stable-alpine
    
  3. 使用Dockerfile构建镜像,Dockerfile示例如下:

    FROM nginx:stable-alpine
    COPY ./my-static-html /usr/share/nginx/html
    COPY ./nginx.conf /etc/nginx/nginx.conf
    CMD ["nginx", "-g", "daemon off;"]
    

    示例代码解释如下:

    FROM nginx:stable-alpine //源镜像为nginx:stable-alpine

    COPY ./my-static-html /usr/share/nginx/html //将my-static-html文件夹拷贝到/usr/share/nginx/html目录下,其中my-static-html文件夹下存放的是静态网页文件。

    COPY ./nginx.conf /etc/nginx/nginx.conf //修改nginx.conf文件将监听端口设为8080,并拷贝到/etc/nginx/nginx.conf

    CMD ["nginx", "-g", "daemon off;"] //通过CMD指定运行容器时默认启动的进程。

    说明:容器运行时默认启动的进程既可以通过Dockerfile的CMD命令指定,也可以通过ENTRYPOINT命令指定。关于Dockerfile的详细使用方法,请参考官方文档Docker官网

  4. 构建镜像。

    docker build -t registry.bce.baidu.com/0123456789abcdef0123456789abcdef/nginx:example .
    
  5. 把镜像上传到镜像仓库。

    docker push registry.bce.baidu.com/0123456789abcdef0123456789abcdef/nginx:example