Code in this repository has been extracted from deprecated Cloud integrations. It is not intended to become a Docker product, but to be (maybe?) adopted by community and moved to another github organization.
This CLI tool makes it easy to run Docker Compose applications on ECS
Starting with a standard Compose file - with some restrictions:
services: jenkins: image: jenkins/jenkins:lts ports: - 8080:8080
run compose-ecs up
and watch CloudFormation creating resources matching the Compose application model:
$ compose-ecs up [+] Running 10/12 ⠴ demo CreateInProgress User Initiated 145.6s ⠿ LogGroup CreateComplete 2.0s ⠿ JenkinsTCP8080TargetGroup CreateComplete 17.0s ⠿ CloudMap CreateComplete 46.1s ⠿ DefaultNetwork CreateComplete 6.1s ⠴ LoadBalancer CreateComplete 142.6s ⠿ Cluster CreateComplete 5.1s ⠿ JenkinsTaskExecutionRole CreateComplete 19.1s ⠿ Default8080Ingress CreateComplete 1.0s ⠿ DefaultNetworkIngress CreateComplete 1.0s ⠿ JenkinsTaskDefinition CreateComplete 1.0s ⠿ JenkinsServiceDiscoveryEntry CreateComplete 1.0s ⠋ JenkinsService CreateInProgress Resource creation Initiated 6.0s
In case of a deployment error, check the CloudFormation console for first failure event(s) and reason
Access service logs using compose-ecs logs
like you would do with docker compose:
$compose-ecs logs jenkins | Running from: /usr/share/jenkins/jenkins.war jenkins | webroot: /var/jenkins_home/war ... jenkins | 2023-04-21 09:47:38.075+0000 [id=29] INFO jenkins.install.SetupWizard#init: jenkins | ************************************************************* jenkins | ************************************************************* jenkins | ************************************************************* jenkins | Jenkins initial setup is required. An admin user has been created and a password generated. jenkins | Please use the following password to proceed to installation: jenkins | 47e2e8c8e9e74e5f85d99b56e794e95d jenkins | This may also be found at: /var/jenkins_home/secrets/initialAdminPassword jenkins | ************************************************************* jenkins | ************************************************************* jenkins | *************************************************************
Use compose-ecs ps
to retrieve public URL for exposed service:
$ compose-ecs ps NAME COMMAND SERVICE STATUS PORTS task/demo/97db280b80d1407abe2c7e74de8944e5 "" jenkins Running demo-LoadBa-1V9BXV1VRS6IP-f595d8e2cf1df3d6.elb.eu-west-3.amazonaws.com:8080:8080->8080/tcp
Enjoy service running on AWS ... and eventually run compose-ecs down
to cleanup all resources:
$ compose-ecs down [+] Running 2/4 ⠋ demo DeleteInProgress User Initiated 45.1s ⠋ JenkinsService DeleteInProgress 44.1s ⠿ DefaultNetworkIngress DeleteComplete 0.0s ⠿ Default8080Ingress DeleteComplete 0.0s ...
If you want to review or tweak the applied CloudFormation template, run compose-ecs convert
:
$ compose-ecs convert (...) LoadBalancer: Properties: LoadBalancerAttributes: - Key: load_balancing.cross_zone.enabled Value: "true" Scheme: internet-facing Subnets: - subnet-xxx - subnet-yyy - subnet-zzz Tags: - Key: com.docker.compose.project Value: demo Type: network Type: AWS::ElasticLoadBalancingV2::LoadBalancer LogGroup: Properties: LogGroupName: /docker-compose/demo Type: AWS::Logs::LogGroup
Please create issues to leave feedback.