Skip to content

automate install docker on ec2 instance #8

automate install docker on ec2 instance

automate install docker on ec2 instance #8

Workflow file for this run

name: Build-Publish-Deploy Docker container
on:
push:
branches:
- main
# workflow_run:
# workflows: ["Python package"]
# types:
# - completed
env:
DOCKERHUB_REPO: cicd
DOCKERHUB_TAG: app_streamlit
jobs:
build-and-push-docker-image:
name: Build Docker image and push to repositories
runs-on: ubuntu-latest
steps:
# Part 1: Rebuilding the container image on DockerHub
- name: Checkout
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Install Docker Compose
run: |
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
run: |
docker-compose build
docker tag ${{ env.DOCKERHUB_TAG }}:latest ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_REPO }}:latest
docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_REPO }}:latest
# Part 2: Deploying the container image to the EC2 instance
- name: Set up SSH
run: |
echo "${{ secrets.AWS_EC2_KEY }}" > ec2-key.pem
chmod 400 "ec2-key.pem"
- name: Deploy to EC2
run: |
ssh -o StrictHostKeyChecking=no -i ec2-key.pem -t ${{ secrets.AWS_EC2_USERNAME }}@${{ secrets.AWS_EC2_HOST }} << 'EOF'
# Install Docker if not already installed
if ! command -v docker &> /dev/null
then
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
fi
# Add the user to the docker group
sudo usermod -aG docker $USER
# Log in to Docker
echo "${{ secrets.DOCKERHUB_TOKEN }}" | sudo docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
# Free up disk space
docker system prune -a -f
# Pull the Docker image and run the container
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_REPO }}:latest
docker stop ${{ env.DOCKERHUB_REPO }}-container || true
docker rm ${{ env.DOCKERHUB_REPO }}-container || true
docker run --name ${{ env.DOCKERHUB_REPO }}-container -d -p 8501:8501 ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_REPO }}:latest
EOF