Tag: 亚马逊 ec2

<CoreOS,cloud-config>如何在Docker Private Registry准备好之前等待?

我正在EC2上的CoreOS上尝试Docker。 我想要做的是: 运行Docker专用registry容器 从私人registry中拉出图像后运行其他容器 初始configuration 我的cloud-config.yml是这样的: #cloud-config coreos: units: – name: etcd2.service command: start – name: fleet.service command: start – name: docker.service command: start drop-ins: – name: 50-insecure-registry.conf content: | [Service] Environment=DOCKER_OPTS='–insecure-registry="localhost:5000"' – name: private-docker-registry.service command: start runtime: true content: | [Unit] Description=Docker Private Registry After=docker.service Requires=docker.service Requires=network-online.target After=network-online.target [Service] ExecStartPre=/usr/bin/docker pull registry:latest ExecStart=/usr/bin/docker run […]

AWS ECS领导者命令(django migrate)

我们目前正在使用AWS Elastic Beanstalk部署我们的Django APP。 在那里我们使用容器命令执行django数据库迁移,我们确保我们只使用“leader_only”限制在一个实例上运行迁移。 我们正在考虑将我们的部署迁移到AWS EC2 Container Service 。 但是,我们无法find一种强制迁移的方法,只有在部署新映像时才能在一个容器上运行迁移。 是否可以在AWS EC2容器服务中configurationleader_only命令?

如何理解Amazon ECS群集

我最近尝试使用AWS的任务定义部署Docker容器。 一路上,我遇到了以下问题。 如何将实例添加到集群? 使用Amazon ECS控制台创build新集群时,如何将新的ec2实例添加到新集群。 换句话说,启动新的ec2实例时,需要使用哪种configuration才能将其分配给Amazon ECS下的用户创build的群集。 集群中需要多less个ECS实例,这些因素是什么? 如果在集群中有两个实例(ins1,ins2),并且我的webapp,db容器正在ins1中运行。 在更新运行服务(通过http://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service.html )之后,我可以看到新创build的服务在“ins2”中运行,旧的服务在“ins1”。 我的问题是,我的webapp容器分配给另一个实例后,访问IP地址成为另一个实例IP。 如何防止或者什么解决scheme使得相同的IP地址访问webapp? 不仅IP,更换新实例后的数据如何?

ec2上的Amazon的Docker的最新版本是否被破坏?

截至昨天晚上,我们所有的新docker部署都开始失败,因为亚马逊回购docker中最新版本的docker(docker-1.3.2-1.0.amzn1.x86_64)无法启动。 重现的步骤是: ## Launch instance with default amazon AMI yum install docker-1.3.2-1.0.amzn1.x86_64 service docker restart ### Get the following error in /var/log/docker 2014/11/26 05:14:16 docker daemon: 1.3.2 c78088f/1.3.2; execdriver: native; graphdriver: [8f6d7cfb] +job serveapi(unix:///var/run/docker.sock) [info] Listening for HTTP on unix (/var/run/docker.sock) docker: relocation error: docker: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with […]

如何从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。 我怎样才能看到输出你好世界? 反正哟看到我的容器正确运行?