---
title: AWS Docker Activity
author: Niall Kader
description: Describes how to participate in the AWS Docker Activity
published: 2/10/26
---
# AWS Docker Activity
Before getting started, look in the **docker-compose.yml** and make sure that the **backend** container includes and environment variable that sets the PORT:
```yml
backend:
  depends_on:
    - mysqldb
  networks:
    - project-x-network
  build:
    dockerfile: ./Dockerfile 
    context: .
  restart: unless-stopped
  ports:
    - 8888:8888
  environment:
    - DB_HOST=mysqldb
    - DB_USER=root
    - DB_PASSWORD=
    - DB_NAME=project_x
    - DB_PORT=3306
    - PORT=8888  <<<<<<<<<<<<<<< MAKE SURE THIS IS HERE (AND INDENTED PROPERLY)
```

Log into the AWS console and make sure you are in the **us-east-1** region (N.Virginia)

## Create a security group:
- Go to the **EC2** dashboard
- Click **Security Groups** in the left nav 
- Click **Create Security Group**
- Name it **docker-sg**
- For the Description, enter **Docker server secruity group**
- Add the following **inbound rules**:
  - Allow **SSH** traffic from **Anywhere** (set the Source dropdown to **Anywhere-IPv4**)
  - Allow **HTTP** traffic from **Anywhere**
  - Allow **HTTPS** traffic from **Anywhere**
  - Allow **Custom TCP** traffic, set the Port Range to **8888** from **Anywhere** (this is the port that exposes the node container)
- Add the following **outbound rule**
  - Allow **All Traffic** and set the Destination dropdown to **Anywhere-IPv4**
- Click **Create Security Group**

## Launch an Ubuntu EC2 instance:
- Click on **Instances** in the left nav
- Name it **docker-server**
- Choose Ubuntu 24.04
- Create a new key pair (name id **docker-key**)
- Click **Select an existing security group** and then select the **docker-sg** that we created in the previous step
- Click **Launch Instance**

Note the public IP address of the instance, you'll need it in the next step.

## Install Docker and Docker Compose
- Put the **docker-key** file in the project folder (you should ignore it)
Open a  GitBash terminal in the project folder and use the **docker-key** to log into the instance by entering this command (use your instance's public IP):
```sh
ssh -i docker-key.pem ubuntu@YOUR-PUBLIC-IP-ADDRESS-GOES-HERE
```
- Enter **yes** when prompt to trus the key
- Run the following commands to install Docker:
```sh
# Update your server
sudo apt update && sudo apt upgrade -y

# Install Docker
sudo apt install docker.io -y

# Start Docker
sudo systemctl start docker

# Enable it to start automatically
sudo systemctl enable docker

# Allow your user run Docker without typing 'sudo' every time
sudo usermod -aG docker $USER

# Check the version to confirm the install
docker --version

# Download Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# Make it executable
sudo chmod +x /usr/local/bin/docker-compose

# Check the version to confirm the install
docker-compose --version
```
## Install the Nginx Weberver
In another activity, we may set up Nginx as a reverse proxy so that you can run multiple
docker compose apps on the same server.
```sh
# install it:
sudo apt install nginx -y

# check the version
nginx -v

# make sure it's running
systemctl status nginx

# You can press 'q' to return to the terminal
```
You should now be able to open a browser tab and enter the public IP of your instance
to see the Nginx welcome page, **but make sure you are not using HTTPS**.
Uset **HTTP** because we have not installed an SSL certificate on the server and it does not support HTTPS.

## Copy your project to the instance
While still logged into the EC2 instance, run this command to create a folder
for the api project file:
```sh
mkdir web4-api
```
Now enter **exit** to log out of the EC2 instance

Run this command to copy the project files folder to the EC2 instance (use the public IP of the instance):
```sh
scp -i docker-key.pem -r ./* ubuntu@YOUR-PUBLIC-IP-ADDRESS-GOES-HERE:~/web4-api/
```
## Run the containers
Log back into the EC2 instance and verify that the project files are there:
```sh
ssh -i docker-key.pem ubuntu@YOUR-PUBLIC-IP-ADDRESS-GOES-HERE

cd web4-api
ls
```
Run this command to start the containers:
```sh
docker-compose up -d
```
Now you should be able to visit the api in the browser by entering your instances public
IP and setting the port to **8888** (remember that we configured the security group to allow inbound TCP traffic on this port from any source)

Here are some docker commands you could try out while you're logged into your instance:
```sh
# shows running container info, include each container's id
docker ps

# log into a container
docker exec -it CONTAINERID sh

# view the logs for a container
docker logs CONTAINERID

# stop the containers
docker-compose stop

# remove the containers
docker-compose down

# view the images (include the image ID)
docker images

# remove an image (all containers made from the image must be removed first)
docker rmi IMAGEID
```

