Docker on AWS with Elastic CONTAINER Service and ECR


Step1:
Configuring of the cluster
#ecs-cli configure –cluster myCluster –region us-east-1

Step2:
Starting the cluster
#ecs-cli up --keypair ubuntu_mum --capability-iam --size 3 --instance-type t2.micro

INFO[0002] Created cluster                               cluster=myCluster region=us-east-1
INFO[0003] Waiting for your cluster resources to be created...
INFO[0004] Cloudformation stack status                   stackStatus="CREATE_IN_PROGRESS"
INFO[0066] Cloudformation stack status                   stackStatus="CREATE_IN_PROGRESS"
INFO[0129] Cloudformation stack status                   stackStatus="CREATE_IN_PROGRESS"
Cluster creation succeeded.
VPC created: vpc-4bd2bd33
Security Group created: sg-11980264
Subnet created: subnet-42fd9526
Subnet created: subnet-51e1457e

Step3:
We need to create a project (anything which is simple to access any application)
Or

Once got the code from the above github, we need to get the login details of ECR

#aws ecr get-login --region us-east-1
root@ip-172-31-27-168:/opt/ecsproj/php-docker-apache-example# aws ecr get-login --region us-east-1
docker login -u AWS -p eyJwYXlsb2FkIjoiMEtFdXBCeHEyMDBjVnBBallHK3ZJeWdHazhSdnA3endvTFBHTnZhcjJ0ai8za2NOUzlodEdMRGxpc2Y4ckdlVzFhQTJ3RnhpQlZYbzUvSTdwM2xDMHBmQitGSWI3TlQ0d3hJaVFBYzNkbzVxUllUa2I1V3lpMlZUb1RpemFuaWEvY215Mm9sUVBqeVVDaGdxOVB0K1ByellDSHJkWmt2LzczT2JXZ2wwYk9ZSWwrbXpUbjQxK3FsUHM0RkRBVGUzQkgxTFBkZzJ3elFDYWgxRU9xQTVSekU4bjJLRnFhS1BVenpISGlEem5zYVpjZnIvdXd1U3lwZzB0K0cxT09CaWRCZWFOazdLR1NZL2NGcVBlU1k2VVp1ZUlJdk5oVS83M1Z2OGZ3aTdLbHFtYWlkWEVMYVppNlpzYW9LSWVwY1dMQUdtTkdDWHVzSitzVU9pZllmbHhNYThkV3lBZWdrTWVieXhzNS9qSUUwMGd5YmNqOVMxQUsxVXZvSkFvaEx2WlZBZmZ4UXFXRTlseFVXYkwwbFR2VkFESTMwVE9oT01PcWp5OXk1NitReHhWVzc1TmZzSzlUWE9JR29VdFRnWjZMNCs2UVh5ekZDMWcreWNvSzZmZHk1WG9NajRJb2dlT3BMUDRpaUtFdEdJdlZsZ1BvKzNXYnpoZmlybmJEWGRCWUY0R0x1NGREM3VpalEwdzRNaUN6SmdodHNITHkxeStKK1Qra2E0RnNTdVBVdmFRdFFZQTFDRWJIVk9DOHBTZzI0UnVDc084ZUNZbzRiclhkWm1YaUJ4S0UyL21Zb3RrWlZKb0xMaGhtdVAyNEduTk5sNjM3L3VRUERTeWRhYy9IQXRoekhobEVaazNLbGd0TVpQVndIUGlPeDd6dnZVWlhOdEx1RDhlMlRKQ1RzcElEZTUydFVCS1F2RThFWUhwOGtWZGFzU0I5YWNmdHd5dFNWa05NZ0N0WkV0OU81aEpFZ3ZsdmpTUDNOVld1TEFMMjlMUUJkR3l6QVFHcEFYT09NamF0UEJMcTV1N3RFd2xSSTJhU1Z1TGJEQ3hFUHRRYXZpRU95aG9xOXNkS01zNUM4ZXdzVFBWODBXdEFYRnNMN2JyeDlPcHBORzl5TUhBZlhlbERya1hYQ1JFc0F6eWdrYVRJbjg4UTZ1ZC96M0ZnOHl2SHVGSzRKbkVwQ3lBbytxT3pwNjVsSHM1N2JTaDUrOU5uakxlcVZmWTZnS0FDT3piZDVtbzlwMFNXSHdRdk1LZU5pT0o2TCtxODFCSHVvczdsU3dIMDlYeFIvOTI3enVlajh5UTRUSGhrZ1hlTkpEa1lhbEc0bmtGbjIzM3lLemw5V200ekkrL3pPSFBFVytadnM5NnphdmFTem1oakdZeHZTL01GZEl0U1h3ZzcyOURmMnlrRUFERWV3NlFIMXpwTjQ2RVBodnRUaTdDbUZTQTRUcWU5cHBKLzJ4bUVrOCtxeC9ML2xZNktDc010dVdtbnZmIiwiZGF0YWtleSI6IkFRRUJBSGh3bTBZYUlTSmVSdEptNW4xRzZ1cWVla1h1b1hYUGU1VUZjZTlScTgvMTR3QUFBSDR3ZkFZSktvWklodmNOQVFjR29HOHdiUUlCQURCb0Jna3Foa2lHOXcwQkJ3RXdIZ1lKWUlaSUFXVURCQUV1TUJFRURQOFdKWDNZRittTmZLL2JMZ0lCRUlBN04zcVZnSXBQS1ROWkJkUmN3QTJvSE5WK1NVMUVWd3ZkVGxabVlYaHBkTGdadVhseWY0S2UrSWtPdDZoVjBuakdrbjIxb0QrV2VlTjBGdms9IiwidmVyc2lvbiI6IjIiLCJ0eXBlIjoiREFUQV9LRVkiLCJleHBpcmF0aW9uIjoxNTEyMTczMDE5fQ== https://742226119129.dkr.ecr.us-east-1.amazonaws.com

Step4:
Now using the above login code, need to login.

Step5:
Check for the repositories
# aws ecr describe-repositories –region us-east-1
root@ip-172-31-27-168:/opt/ecsproj/php-docker-apache-example# aws ecr describe-repositories --region us-east-1
{
    "repositories": []
}

Step6:
Now create a new repository
# aws ecr create-repository –repository-name php-simple-app –region us-east-1

root@ip-172-31-27-168:/opt/ecsproj/ecs-demo-php-simple-app# aws ecr describe-repositories --region us-east-1
{
    "repositories": []
}
root@ip-172-31-27-168:/opt/ecsproj/ecs-demo-php-simple-app# aws ecr create-repository  --repository-name php-simple-app --region us-east-1
{
    "repository": {
        "registryId": "742226119129",
        "createdAt": 1512134205.0,
        "repositoryUri": "742226119129.dkr.ecr.us-east-1.amazonaws.com/php-simple-app",
        "repositoryName": "php-simple-app",
        "repositoryArn": "arn:aws:ecr:us-east-1:742226119129:repository/php-simple-app"
    }
}


Step7:
Now We need to build the docker image using the dockerfile
# docker build –t php-simple-app .

Step8:
Check the created docker images
# docker images
root@ip-172-31-27-168:/opt/ecsproj/php-docker-apache-example# docker images
REPOSITORY                TAG                  IMAGE ID            CREATED             SIZE
php-simple-app            latest               f9754a166640        47 seconds ago      409MB

Step9:
Need to create a docker tag, to push the same into the AWS ECR
# docker tag php-simple-app 742226119129.dkr.ecr.us-east-1.amazonaws.com/php-simple-app:v1
# docker images
REPOSITORY                                                    TAG                  IMAGE ID            CREATED             SIZE
742226119129.dkr.ecr.us-east-1.amazonaws.com/php-simple-app   v1                   f9754a166640        4 minutes ago       409MB
php-simple-app                                                latest               f9754a166640        4 minutes ago       409MB

Step10:
Now, We need to push the same into ECR
# docker push 742226119129.dkr.ecr.us-east-1.amazonaws.com/php-simple-app:v1

Step11:
Now we need to create a docker-compose.yml file for running the servces in ECS using the created docker image.

root@ip-172-31-27-168:/opt/ecsproj/php-demo# cat docker-compose.yml
php-demo:
  image: 742226119129.dkr.ecr.us-east-1.amazonaws.com/php-simple-app:ssp
  cpu_shares: 100
  mem_limit: 1342177728
  ports:
   - "80:80"
  entrypoint:
    - "/usr/sbin/apache2"
    - "-D"
    - "FOREGROUND"

Note:
In the above docker-compose file, All the values will be kept as per the ec2 instances running.


Now run the docker compose as service
# ecs-cli compose service up

Check the services status:
# ecs-cli ps
Name                                           State    Ports                  TaskDefinition
95fe2cb7-1394-41b1-adba-ed16fd0e5bba/php-demo RUNNING  52.90.4.28:80->80/tcp  php-demo:2

To Access the application:

Comments

Popular posts from this blog

GitHub Administration