Allow AWS to authenticate with a Dockerhub private repository
by John Vincent
Posted on June 5, 2021
AWS needs a .dockercfg
file to allow AWS to authenticate with a Dockerhub private repository.
This is part of a series of discussions regarding Deploying TaskMuncher, a React and Node application, to a Multi-Container Docker Environment at AWS using Dockerhub and Travis CI
For more details, please see Overview of Create Multi-Container Docker TaskMuncher Application at AWS
Please review AWS Production Architecture.
Create .dockercfg file
As I am using a Mac this file is problematic to create.
My chosen solution is to create a Linux docker container and create the dockercfg
file from Linux.
Makefile
For Makefile details, please see Configuring Makefiles to build and run Docker Images using Docker, Docker Compose and Dockerfile
cd <repo-root-dir>
mkdir -p config/dockercfg
Let's use the simple pattern I use throughout this application.
Create Makefile
dockercfg-dev-build:
docker build -f ./config/dockercfg/Dockerfile \
-t taskmuncher-dockercfg-dev-image:latest \
.
dockercfg-dev-sh:
docker run --rm --name taskmuncher-dockercfg-dev \
-it taskmuncher-dockercfg-dev-image \
sh
dockercfg-dev-run:
docker run \
--rm \
--name taskmuncher-dockercfg-dev \
-it \
taskmuncher-dockercfg-dev-image:latest
where:
dockercfg-dev-build
builds the imagedockercfg-dev-sh
allows me to run ash
in the imagedockercfg-dev-run
runs the image
Dockerfile
Create file ./config/dockercfg/Dockerfile
# Set the base image to Ubuntu 20.04
FROM ubuntu:20.04
# Update the repository sources list
RUN apt-get update
RUN apt-get install -y curl apt-transport-https ca-certificates gnupg-agent software-properties-common
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
#
RUN apt-get update
RUN apt-get install -y docker-ce docker-ce-cli containerd.io
# use /app for our application
WORKDIR "/app"
# copy start file
COPY config/dockercfg/start-command ./start-command
# copy example cfg file
COPY config/dockercfg/examplecfg.txt ./examplecfg.txt
# copy docker password file
COPY config/dockercfg/my_password.txt ./my_password.txt
CMD ["./start-command"]
start-command
Create file ./config/dockercfg/start-command
#!/bin/sh
#
echo "Starting dockercfg:start-command"
cat /etc/os-release
docker -v
cd /app
USERNAME="<your-docker-id>"
cat ./my_password.txt | docker login --username $USERNAME --password-stdin
pwd
ls -la
echo "\nStart of generated dockercfg file\n"
cat /root/.docker/config.json
echo "\nEnd of generated dockercfg file\n"
echo "\nStart of example dockercfg file\n"
cat ./examplecfg.txt
echo "\nEnd of example dockercfg file\n"
echo "*** Build your own .dockercfg file from the above ***\n"
echo "Completed dockercfg:start-command"
Docker Password file
Create file ./config/dockercfg/my_password.txt
<your-docker-password>
Example .dockercfg file
Create file ./config/dockercfg/examplecfg.txt
{
"https://index.docker.io/v1/": {
"auth": "__auth__"
}
}
Create .dockercfg file
Create file ./config/.dockercfg
{
"https://index.docker.io/v1/": {
"auth": "__auth__"
}
}
make dockercfg-dev-build
to build the imagemake dockercfg-dev-run
to create an authorization file in the container.
Notice the generated dockercfg file.
* Copy the `"auth"` value to `"__auth__"`
./config/.dockercfg
is now ready to be used by AWS.