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?