Tag: 亚马逊 ec2

如何从Docker Hub私人回购在EC2 ECS上部署Docker容器?

我在一个私人Docker Hub存储库中有一个镜像,我试图在Amazon的Elastic Container Service上部署这个镜像。 似乎有一个很好的Web控制台从公共存储库运行一个容器,但没有私人的。 我已经阅读并尝试了解这方面的文档 ,但我不明白与部署容器有什么关系,因为它声明“Amazon ECS容器代理允许容器实例连接到您的集群”。 作为使用Web控制台的替代方法,我看到提到了设置任务定义。 这听起来像是Web控制台的手动版本。 我怀疑我最好的select是用这种方法,可能在这里的脚本的帮助下。 我在ECS上运行现有映像的最简单方法是托pipe在私有存储库中?

如何自定义Elastic Beanstalk上的docker run命令?

这是事情,我需要告诉Docker不要集装箱的networking,因为它需要连接到一个VPN(企业专用DB)内的MongoDB。 有一个Docker命令,让我做到这一点:– –net=host 。 在这里引用。 所以,例如,当我的本地机器上运行容器,我会做这样的事情: docker run –rm -it –net=host [image-name]:[version] bash -il 而这个命令将会诀窍。 由此,我可以连接到“私人”的MongoDB。 所以,我的问题是:有没有一种方法定制Elastic Beanstalk上单个Docker环境的–net=host docker run命令,以便我可以添加–net=host ? 我已经尝试使用container_commands到config.yml文件来添加该指令,但我不认为这是我所需要的,这里是一个片段: container_commands: 00-test_command: command: bundle exec thin –net=host 01-networking-fix: command: "docker run –rm -it –net=host [image-name]:[version] bash -il"

Selenium网格与不同主机上的Docker容器

我喜欢在AWS上使用正式的Docker镜像来设置Selenium Grid,可以在这里findhttps://github.com/SeleniumHQ/docker-selenium 集线器和节点应驻留在不同的机器/docker主机上。 我使用大使容器,如下所述: https : //docs.docker.com/articles/ambassador_pattern_linking/ (集线器) – >(selenium大使) – networking – >(selenium – 大使) – >(节点) 我创build了两个EC2实例并执行以下命令: 在中心机器上: $ docker run -d –name selenium-hub selenium/hub:2.47.1 $ docker run -d –link selenium-hub:selenium-hub –name selenium_ambassador -p 4444:4444 svendowideit/ambassador 在节点机器上: $ docker run -d –name selenium_ambassador –expose 4444 -e SELENIUM_PORT_4444_TCP=tcp://<public-AWS-EC2-IP>:4444 svendowideit/ambassador $ docker run -d –link […]

更新AWS ECS服务任务的最佳实践

我目前正在尝试设置一个简单的configuration项来重build我的项目,创build一个新的Docker镜像,将新镜像推送到Amazon的ecr仓库,用最新的docker镜像创build一个现有任务定义的新版本,更新使用任务定义的新版本运行服务,最后停止运行旧版本的现有任务,并启动运行新版本的任务。 除了开始任务的新版本,一切工作正常。 从bash脚本中,我调用的最终命令是: aws ecs update-service –cluster "$CLUSTER" –service "$SERVICE" –task-definition "$TASK_DEFINITION":"$REVISION" 这会导致以下事件错误: (service rj-api-service) was unable to place a task because no container instance met all of its requirements. The closest matching (container-instance bbbc23d5-1a09-45e7-b344-e68cc408e683) is already using a port required by your task. 这是有道理的,因为我正在replace的容器与新的容器完全相同,并将在同一个端口上运行,它只包含我的应用程序的最新版本。 我印象中, update-service命令会停止现有的任务,并启动新的任务,但它看起来像是首先启动新的任务,如果成功则停止旧的任务。 处理这个问题的最佳做法是什么? 我应该先停止旧的任务吗? 我应该先删除脚本中的服务,然后重新创build每个更新的整个服务? 目前我只需要运行任务的一个实例,但是如果我需要这个能够自动扩展到多个实例的话,我不想把自己放在一边。 任何build议最好的方式来解决这个问题?

使用Ansible进行持续部署和AWS自动扩展(+ Docker?)

我的组织的网站是一个运行在AWS前端Web服务器+一些后台处理服务器上的Django应用程序。 我们目前正在使用Ansible: 系统configuration(从裸露的OS映像) 频繁的手动触发代码部署。 相同的Ansible操作手册能够从头开始configuration本地Vagrant dev VM或生产EC2实例。 我们现在要在EC2中实现自动缩放,这就需要一些“把服务器当作牛,而不是宠物”的理念。 第一个先决条件是从一个静态pipe理的Ansible库存移动到一个dynamic的,基于EC2 API的库。 接下来的一个大问题是如何在这个新的世界里,在一夜暴富的情况下来回摆动。 我能想到的选项是: 为每个部署创build一个新的完全部署的AMI ,创build一个新的AS启动configuration并用此更新AS组。 听起来非常非常繁琐,但也是非常可靠的,因为清洁的石板方法,并将确保任何系统更改代码所需的将在这里。 而且,在实例启动时不需要额外的步骤,所以启动和运行更快。 使用不经常更改的基本AMI ,在启动时自动从git获取最新的应用程序代码,启动web服务器。 一旦启动,只需按照需要手动部署,就像以前一样。 但是如果新代码依赖于系统configuration(新包,权限等)的更改呢? 看起来你必须开始考虑代码版本和系统/ AMI版本之间的依赖关系,而“只是做一个完全可靠的运行”的方法更集成,更可靠。 这不仅仅是在实践中潜在的头痛吗? 使用Docker? 我有一个强大的预感,它可以是有用的,但我不知道它是如何适合我们的图片。 我们是一个相对独立的Django前端应用程序,只有RabbitMQ + memcache作为服务,我们永远不会在同一个主机上运行。 那么使用包含系统包+最新代码的Ansible构buildDocker镜像有什么好处,而不是让Ansible直接在EC2实例上执行? 你怎么做呢 ? 任何见解/最佳实践? 谢谢 !

从Docker容器获取控制台输出

我build立一个图像与python instaled和一个python应用程序。 我的Python应用程序是一个世界,只是在屏幕上打印“Hello World”。 Dockerfile: FROM python:2-onbuild CMD ["python", "./helloworld.py"] 在控制台我执行: docker run xxx/zzz 我可以看到Hello World输出。 现在我尝试使用ECS的任务执行相同的应用程序。 我已经把它拉到Docker Hub。 我怎样才能看到输出你好世界? 反正哟看到我的容器正确运行?

Docker:更改存放泊坞窗卷的文件夹

在我的Ubuntu EC2我使用docker容器托pipe一个应用程序。 db数据和upload数据被存储在使用这个命令创buildCaseBook-data-db和CaseBook-data-uploads中: docker volume create –name=CaseBook-data-db docker volume create –name=CaseBook-data-uploads 通过docker-compose文件附加卷: version: '2' services: mongo: container_name: "CaseBook-db" restart: always image: mongo:3.2.7 ports: – "27017" volumes: – data_db:/data/db labels: – "ENVIRONMENT_TYPE=meteor" app: container_name: "CaseBook-app" restart: always image: "meteor/casebook" build: . depends_on: – mongo environment: – MONGO_URL=mongodb://mongo:27017/CaseBook ports: – "80:3000" volumes: – data_uploads:/Meteor-CaseBook-Container/.uploads labels: – "ENVIRONMENT_TYPE=meteor" […]

我如何将自动调节组连接到我的ecs集群?

在ECS的所有教程中,您需要创build一个群集,然后创build一个自动调整群组,以产生实例。 不pipe怎么样,在所有这些教程中,这些实例奇迹般地显示在集群中,但是没有人提供连接自动调节组和集群的提示。 我的自动缩放组按照预期产生实例,但是他们只是不显示在我的ecs集群上,他们持有我的docker定义。 我错过了什么连接?

Docker与AMI的区别

在AWS的情况下: AMI用于打包软件,可以部署在EC2上。 Docker也可以用来打包软件,也可以部署到EC2。 两者之间有什么区别,我如何select它们?

Amazon ECS中的最低健康百分比和最高百分比是多less?

我已经有了Docker和EC2的经验。 但我是新来的ECS。 有人可以帮助我了解这两个参数实际上做了什么,它们的区别和用法。 官方文件说: 最低健康百分比代表在部署期间必须保持RUNNING状态的服务任务数量的下限,以所需任务数量的百分比(四舍五入到最接近的整数)为单位。 此参数使您可以部署而不使用其他群集容量。 例如,如果您的服务具有所需数量的四个任务并且最低健康百分比为50%,则调度程序可能会停止两个现有任务,以在启动两个新任务之前释放群集容量。 不使用负载平衡器的服务的任务在运行状态下被认为是健康的; 如果使用负载平衡器的服务的任务处于RUNNING状态,并且负载平衡器将其托pipe的容器实例报告为健康状态,则认为它们是正常的。 最低健康百分比的默认值在控制台中为50%,AWS CLI,AWS开发工具包和API为100%。 最大百分比参数表示在部署期间允许处于RUNNING或PENDING状态的服务任务数量的上限,以所需任务数量(向下舍入为最接近的整数)的百分比表示。 通过此参数可以定义部署批量大小。 例如,如果您的服务具有所需数量的四个任务并且最大百分比值为200%,那么调度程序可能会在停止四个较早的任务之前启动四个新任务(前提是需要执行此操作的群集资源)。 最大百分比的默认值是200%。 我仍然不清楚这两个参数。 如果我的服务具有最低的健康百分比,如果我的服务具有所需数量的4个任务并且最低健康百分比为25%,则调度程序将启动/停止多less个现有/新的任务? 如果我的服务有最大数量的4个任务并且最大百分比值为50%,那么调度程序将启动/停止多less个现有的/新的任务? 如果我的服务只有一个任务正在运行,那么如何设置这些参数来停止现有任务并运行新任务。