HOWTO部署在AWS泊坞窗的容器,而无需使用弹性的豆茎或EC2集装箱服务 [英] HOWTO deploy a docker container on aws without using elastic beanstalk or ec2 container service

查看:203
本文介绍了HOWTO部署在AWS泊坞窗的容器,而无需使用弹性的豆茎或EC2集装箱服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用泊坞窗的容器,而无需使用弹性的豆茎或EC2集装箱服务。我想上传的.zip 文件描述容器(像你这样做有松紧豆茎),并有一个通用的EC2实例中运行它使用泊坞窗。

I'd like to use docker containers without having to use elastic beanstalk or ec2 container service. I'd like to upload a .zip file describing the container (like you do with elastic beanstalk) and have a generic ec2 instance run it using docker.

当寻找到运行的泊坞窗容器中的豆茎创建EC2实例的用户数据部分中,我看到了云计算的init脚本,下载一个大的shell脚本,做所有的设置(<一href="https://s3-eu-central-1.amazonaws.com/elasticbeanstalk-env-resources-eu-central-1/stalks/eb_docker_4.2.1/lib/UserDataScript.sh"相对=nofollow>为例)。我认为是弹性的豆茎确实也可以手动使用EC2实例和一个用户数据脚本实现的一切。

When looking into the user data section of a beanstalk-created ec2 instance running a docker container, I see a cloud-init script that downloads a big shell script that does all the setup (Example). I assume that everything that elastic beanstalk does can also be achieved manually by using ec2 instances and a user data script.

我的问题是:可能有人提供的最小的示例为用户数据脚本

My question is: Could someone provide a minimal example for a user data script that

  1. 在安装/配置泊坞窗
  2. 下载.zip文件
  3. 在运行我的搬运工图片

我熟悉的自动缩放团体等,我想获得此安装程序,而无需使用beanstalk-或EC2集装箱业务魔术运行。

I'm familiar with auto scaling groups etc. and I'd like to get this setup running without using the beanstalk- or ec2 container service magic.

推荐答案

基本上,你需要在你的EC2实例安装泊坞窗和Nginx的(如Web代理)。然后,下载web应用程序的归档和部署。这就是弹性魔豆一样。

Basically, you need to install Docker and nginx (as web proxy) in your EC2 instance. And then, download the web-app archive and deploy it. This is what Elastic Beanstalk does.

有关基本/最低,以部署一个泊坞窗容器的Web应用程序的用户数据:

For the basic/minimal user-data in order to deploy a single docker container web application:

#!/bin/bash

IMG_LABEL=myapp
APP_INIT_URL=https://s3.amazonaws.com/your-bucket-app/myapp-init.tar.gz

function prepare_instance {
  apt-get -y update
  apt-get -y install nginx
  curl -sSL https://get.docker.com/ | sh
  mkdir /opt
  curl -o /opt/deployer.sh http://169.254.169.254/latest/user-data
  chmod 775 /opt/deployer.sh
}

function download_app {
  curl -o /tmp/current.tar.gz $1
  rm -rf /opt/app
  mkdir -p /opt/app
  tar zxvf /tmp/current.tar.gz -C /opt/app
  rm /tmp/current.tar.gz
}

function build_image {
  docker tag ${IMG_LABEL}:latest ${IMG_LABEL}:prev || echo "No built app"
  docker build -t ${IMG_LABEL}:latest /opt/app
}

function run_container {
  APP_CID=$(docker run -d ${IMG_LABEL}:latest)
  APP_IP=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${APP_CID})
}

function setup_proxy {
  rm /etc/nginx/sites-enabled/*
  cat <<EOT > /etc/nginx/sites-enabled/app.conf
map \$http_upgrade \$connection_upgrade {
  default upgrade;
  ''      close;
}
upstream app.local {
  server ${APP_IP};
}
server {
  listen 80;
  location / {
    proxy_pass http://app.local;
    include /etc/nginx/proxy_params;
    proxy_http_version 1.1;
    proxy_set_header Upgrade \$http_upgrade;
    proxy_set_header Connection \$connection_upgrade;
  }
}
EOT
  service nginx reload
}

function destroy_previous {
  (docker ps -a --before="${APP_CID}" | awk '{ print $1,$2 }' | grep "${IMG_LABEL}" | awk '{print $1 }' | xargs -I {} docker stop {} | xargs -I {} docker rm {}) || echo "No previous container"
  docker rmi ${IMG_LABEL}:prev || echo "No previous image"
}

if [ ! -f /opt/deployer.sh ];
then
  prepare_instance
  download_app ${APP_INIT_URL}
else
  download_app $1
fi

build_image
run_container
setup_proxy
destroy_previous

在弹性魔豆,还有就是听更新请求代理。但是,为简单起见,我们可以把上面的脚本通过SSH部署一个新的web应用程序版本:

In Elastic Beanstalk, there is an agent that listen to update request. But, to make it simple, we can call the above script to deploy a new web-app version via SSH:

ssh ubuntu@ec2-107-123-123-123.compute-1.amazonaws.com 'sudo /opt/deployer.sh https://s3.amazonaws.com/your-bucket-app/myapp-201510122341.tar.gz'

注意的:我用的EC2实例与Ubuntu 14.04

Note: I use EC2 instance with Ubuntu 14.04.

这篇关于HOWTO部署在AWS泊坞窗的容器,而无需使用弹性的豆茎或EC2集装箱服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆