Lab setup data from the Pluralsight course on:
Using Docker with AWS Elastic Beanstalk
The Complete Obsolete Guide to Generative AI (from Manning) is a lighthearted look at programming with AI, as well as a rock-solid resource for getting the most out of these insanely powerful services. Let it be your guide to analyzing massive data sources, summarize pages and pages of text, and scour the live internet.
Dockerfile Review
Create a simple index.html file and the following dockerfile:
FROM ubuntu:latest MAINTAINER D Clinton info@bootstrap-it.com RUN apt-get update RUN apt-get install -y apache2 ADD index.html /var/www/html/ CMD /usr/sbin/apache2ctl -D FOREGROUND EXPOSE 80 ============================================== nano dockerfile docker build -t myserver . docker images docker run -d myserver docker ps docker network inspect bridge curl 172.17.0.2
Docker Swarm and Microservices
In my setup:
192.168.1.17 is the manager
192.168.1.14 is the node
[on manager server:] docker swarm init [on node server:] docker swarm join \ [...] [on manager server:] docker node ls docker info docker service create -p 80:80 --name webserver nginx docker service ls docker service ps webserver docker service scale webserver=5 docker service ps webserver docker network ls docker network inspect docker_gwbridge "IPv4Address": "172.18.0.3/16" curl 172.18.0.3
The Elastic Beanstalk Toolset
From local terminal – make sure Docker Engine, curl, and Python3 are already installed.
curl -O https://bootstrap.pypa.io/get-pip.py python3 get-pip.py --user [[alternative: sudo apt install python3-pip]] pip --version pip install awsebcli --upgrade --user eb mkdir myapp cd myapp eb init eb list
Docker in a Beanstalk World
eb platform show
nano Dockerfile
----------------------
# Use the AWS Elastic Beanstalk Python 3.4 image
FROM amazon/aws-eb-python:3.4.2-onbuild-3.5.1
# Exposes port 8080
EXPOSE 8080
# Install PostgreSQL dependencies
RUN apt-get update && \
apt-get install -y postgresql libpq-dev && \
rm -rf /var/lib/apt/lists/*
----------------------
eb create testenv
Dockerrun.aws.json Version 1
mkdir mysingle
cd mysingle
eb init
nano index.html
nano Dockerrun.aws.json
eb local run
eb create mysingle
eb ssh mysingle
cd /var/app/current
ls
cat Dockerfile
eb status
eb terminate
================
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "httpd",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "80"
}
],
"Volumes": [
{
"HostDirectory": "/var/app/current",
"ContainerDirectory": "/usr/local/apache2/htdocs"
}
],
"Logging": "/var/log/myapp"
}
================
================
Authentication code:
"Authentication": {
"Bucket": "my-bucket",
"Key": "mydockercfg"
},
================
Dockerrun.aws.json Version 2
{
"AWSEBDockerrunVersion": 2,
"volumes": [
{
"name": "php-app",
"host": {
"sourcePath": "/var/app/current/php-app"
}
},
{
"name": "nginx-proxy-conf",
"host": {
"sourcePath": "/var/app/current/proxy/conf.d"
}
}
],
"containerDefinitions": [
{
"name": "php-app",
"image": "php:fpm",
"environment": [
{
"name": "Container",
"value": "PHP"
}
],
"essential": true,
"memory": 128,
"mountPoints": [
{
"sourceVolume": "php-app",
"containerPath": "/var/www/html",
"readOnly": true
}
]
},
{
"name": "nginx-proxy",
"image": "nginx",
"essential": true,
"memory": 128,
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
"links": [
"php-app"
],
"mountPoints": [
{
"sourceVolume": "php-app",
"containerPath": "/var/www/html",
"readOnly": true
},
{
"sourceVolume": "nginx-proxy-conf",
"containerPath": "/etc/nginx/conf.d",
"readOnly": true
},
{
"sourceVolume": "awseb-logs-nginx-proxy",
"containerPath": "/var/log/nginx"
}
]
}
]
}
Preparing a Beanstalk Environment
docker login
ls -a
cd .docker
ls
cat config.json
cp config.json dockerconfig
nano dockerconfig
[remove outside auths block (including {})]
mv dockerconfig ../
cd ..
pip install --upgrade --user awscli
aws configure
add credentials
aws s3 ls
aws s3 mb s3://mycreds2324
aws s3 cp dockerconfig s3://mycreds2324
auth snippet:
"AWSEBDockerrunVersion": 2,
"authentication":
"bucket": "mycreds2324",
"key": "dockerconfig
Launch the Multi-container Project
less Dockerrun.aws.json
eb local run
eb create wordpress-app
eb ssh
sudo gpasswd -a ec2-user docker
sudo docker network inspect bridge
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [
{
"name": "mariadb",
"image": "mariadb:latest",
"essential": true,
"memory": 128,
"portMappings": [
{
"hostPort": 3306,
"containerPort": 3306
}
],
"environment": [
{
"name": "MYSQL_ROOT_PASSWORD",
"value": "password"
},
{
"name": "MYSQL_DATABASE",
"value": "wordpress"
}
]
},
{
"name": "wordpress",
"image": "wordpress",
"essential": true,
"memory": 128,
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
"links": [
"mariadb"
],
"environment": [
{
"name": "MYSQL_ROOT_PASSWORD",
"value": "password"
}
]
}
]
}


