2017-09-22 2 views
0

Ich versuche, eine funktionierende Docker-Umgebung in AWS mithilfe der ecs-cli-Befehlszeile zu erhalten.ecs-cli hake Erstellen von Containern

Ich habe eine funktionierende lokale Docker Umgebung mit Dockerfiles, Docker-compose.yml, eine .env-Datei und ein entrypoint.sh Skripte. Die Container sind ein Apache-Webserver mit PHP und einer Reihe von Erweiterungen und eine MySQL-Datenbank.

Skeleton Dateistruktur ist wie folgt:

./db <-- mounted by db container for persistence 
./docker 
./docker/database 
./docker/database/Dockerfile 
./docker/database/dump.sql 
./docker/webserver 
./docker/webserver/apache-config.conf 
./docker/webserver/Dockerfile 
./docker/webserver/entrypoint.sh 
./docker-compose.yml 
./web <!-- mounted by web server, contains all public web code 

Hier ist die 2 Docker Dateien:

./docker/database/Dockerfile

FROM mysql:5.6 
ADD dump.sql /docker-entrypoint-initdb.d 

./docker/webserver/Dockerfile

FROM php:5.6-apache 
RUN apt-get update 
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - 
RUN apt-get install -y zlib1g-dev nodejs gdal-bin 
RUN npm install -g topojson 
RUN docker-php-ext-install mysql mysqli pdo pdo_mysql zip 
RUN pecl install dbase 
RUN docker-php-ext-enable dbase 
COPY apache-config.conf /etc/apache2/sites-enabled/000-default.conf 
RUN a2enmod rewrite headers 
RUN service apache2 restart 
COPY entrypoint.sh /entrypoint.sh 
RUN chmod 0755 /entrypoint.sh 
ENTRYPOINT ["/entrypoint.sh", "apache2-foreground"] 

entrypoint.sh schafft einige Verzeichnisse im Web-Verzeichnis für Apache in schreiben:

./docker/webserver/entrypoint.sh #/bin/sh

mkdir /var/www/html/maps 
chown www-data /var/www/html/maps 
chgrp www-data /var/www/html/maps 
exec "[email protected]" 

Hier ist die Docker-compose!. yml

version: '2' 

services: 
    webserver: 
    image: ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-webserver 
    ports: 
     - "8080:80" 
    volumes: 
     - ./web:${APACHE_DOC_ROOT} 
    links: 
     - db 
    environment: 
     - HTTP_ROOT=http://${DOCKER_HOST_IP}:${DOCKER_HOST_PORT}/ 
     - PHP_TMP_DIR=${PHP_TMP_DIR} 
     - APACHE_LOG_DIR=${APACHE_LOG_DIR} 
     - APACHE_DOC_ROOT=${APACHE_DOC_ROOT}/ 
     - SERVER_ADMIN_EMAIL=${SERVER_ADMIN_EMAIL} 
     - MYSQL_USER=${MYSQL_USER} 
     - MYSQL_PASSWORD=${MYSQL_PASSWORD} 
     - MYSQL_DATABASE=${MYSQL_DATABASE} 
    env_file: .env 

    db: 
    user: "1000:50" 
    image: ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-database 
    ports: 
     - "4406:3306" 
    volumes: 
     - ./db:/var/lib/mysql 
    environment: 
     - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} 
     - MYSQL_USER=${MYSQL_USER} 
     - MYSQL_PASSWORD=${MYSQL_PASSWORD} 
     - MYSQL_DATABASE=${MYSQL_DATABASE} 
    env_file: .env 

zu bauen, um die referenzierten Bilder dort I:

  • C AWS IAM Benutzer mit Admin-Berechtigung reated und setzten Schlüssel in ~/.aws/Anmeldeinformationen unter einem Profilnamen, dann Set-up lokalen ENV mit Export AWS_PROFILE = my-Projekt-Profil

  • Dann die Bilder lokal wie folgt aufgebaut :

    docker/webserver $ docker build -t ACCOUNT_NUMBER.dkr.ecr.e-west-1.amazonaws.com/project/project-webserver.

    docker/datenbank $ docker build -t ACCOUNT_NUMBER.dkr.ecr.e-west-1.amazonaws.com/project/project-database.

  • Got Docker angemeldet in ECR (die Docker Login Befehl echo'd laufen std-out):

    $ aws ecr get-Login --no-include-E-Mail

  • Erstellt die repos :

    $ aws ecr create-Repository --repository-name Projekt/Projekt-Webserver

    $ aws ecr create-Repository --repository-name Projekt/Projekt-Datenbank

  • Pushed die Bilder:

    $ Docker Push ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-webserver

    $ Push-Docker ACCOUNT_NUMBER.dkr.ecr.eu- West-1.amazonaws.com/Projekt/Projekt-Datenbank

  • Karo sie sind da:

    aws $ ecr beschreiben Bilder --repository-name Projekt/Projekt-Webserver

    $ aws ecr beschreiben Bilder --repository -name projekt/projektdatenbank

Alles sieht gut aus.

  • ein EC2-Schlüsselpaar in der Region: Erstellt

    $ ecs-cli configure --region eu-west-1 --cluster Projekt $ cat ~/.ecs/config

  • versucht, sie auf ECS läuft:

    $ ecs-cli --keypair Projekt --capability-iam --size 1 --instance-Typ bis t2.micro --force

Aber wenn ich öffnen Port 22 in der Sicherheitsgruppe der resultierenden EC2-Instanz und SSH in ich die Mittelbehälter laufen sehen, aber keine anderen:

[[email protected] ~]$ docker ps -a 
CONTAINER ID  IMAGE       COMMAND    CREATED    STATUS    PORTS    NAMES 
d011f1402c26  amazon/amazon-ecs-agent:latest "/agent"   8 minutes ago  Up 8 minutes       ecs-agent 

ich nichts Schlechtes in den Protokollen sehen für den Agenten

[EC2-user @ ip-10-0-1-102 ~] docker logs ecs-agent

2017-09-22T13:32:55Z [INFO] Loading configuration 
2017-09-22T13:32:55Z [INFO] Loading state! module="statemanager" 
2017-09-22T13:32:55Z [INFO] Event stream ContainerChange start listening... 
2017-09-22T13:32:55Z [INFO] Registering Instance with ECS 
2017-09-22T13:32:55Z [INFO] Registered! module="api client" 
2017-09-22T13:32:55Z [INFO] Registration completed successfully. I am running as 'arn:aws:ecs:eu-west-1:248221388880:container-instance/ba24ead4-21a5-4bc7-ba9f-4d3ba0f29c6b' in cluster 'gastrak' 
2017-09-22T13:32:55Z [INFO] Saving state! module="statemanager" 
2017-09-22T13:32:55Z [INFO] Beginning Polling for updates 
2017-09-22T13:32:55Z [INFO] Event stream DeregisterContainerInstance start listening... 
2017-09-22T13:32:55Z [INFO] Initializing stats engine 
2017-09-22T13:32:55Z [INFO] NO_PROXY set:169.254.169.254,169.254.170.2,/var/run/docker.sock 
2017-09-22T13:33:05Z [INFO] Saving state! module="statemanager" 
2017-09-22T13:44:50Z [INFO] Connection closed for a valid reason: websocket: close 1000 (normal): ConnectionExpired: Reconnect to continue 

ich glaube, ich brauche, um herauszufinden, warum diese Behälter nicht sind initalising $ , aber wo sehe ich hin und, noch besser, was muss ich als nächstes tun um das zur Arbeit zu bringen?

Antwort

0

Falls jemand anderes hier läuft aufs Geratewohl, die fehlenden Beschwörungen $ ecs-cli compose create waren, die eine ECS Aufgabendefinition aus Ihrer compose Datei erstellt (vorausgesetzt, es ist kompatibel ...)

und $ecs-cli compose run , die bauen und Führen Sie die Container auf dem Remote-EC2-Computer aus.

SSH'ing an die Remote-Maschine und ein "Docker ps -a" sollte zeigen, die Container laufen. Oder "docker logs [container_name]", um zu sehen, was schief gelaufen ist ...

Verwandte Themen