Reading time: 3 minutes
Hello, today we are going to see how we can create a Docker container that generates Android Builds (APKs) locally using React Native.

First, we are going to generate our docker-compose.yml file as follows:
version: "3.1"
services:
react_native_dev:
build:
context: ./Dockerfile
dockerfile: react_native
restart: unless-stopped
container_name: react_native_dev
environment:
EXPO_CLI_NO_PROMPT: 1
EXPO_TOKEN: "token_expo"
volumes:
- ./app_react:/app
ports:
- "3000:3000"
command: sh -c "npm install && expo start"
networks:
- docker-network
networks:
docker-network:
driver: bridge
To generate the EXPO_TOKEN environment variable, you must follow Expo’s instructions: https://docs.expo.dev/accounts/programmatic-access/
Go to the following link to generate tokens: https://expo.dev/accounts/[account]/settings/access-tokens
Visit Expo.dev, log in with your account, and generate an Access Token:

Select the Personal Access Token option:

Now copy the token content and paste it into the EXPO_TOKEN variable
Once generated, we need to create the Dockerfile folder and the react_native file with the following content:
# Use a Node.js image as the base
FROM node:latest# Install Android SDK and tools
RUN apt-get update && apt-get install -y \
wget \
unzip \
openjdk-11-jdk \
curl \
&& rm -rf /var/lib/apt/lists/*# Install Android SDK
# Environment variables
ENV ANDROID_HOME=/opt/android-sdk-linux
ENV ANDROID_SDK_ROOT=/opt/android-sdk-linux
ENV PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools
ENV ANDROID_VERSION=30
ENV ANDROID_BUILD_TOOLS_VERSION=30.0.3RUN wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip
RUN mkdir -p ${ANDROID_HOME}/cmdline-tools
RUN unzip commandlinetools-linux-9477386_latest.zip -d ${ANDROID_HOME}/cmdline-tools
RUN rm commandlinetools-linux-9477386_latest.zip
RUN mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest
ENV PATH=${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools
RUN yes sdkmanager --licenses
RUN yes sdkmanager --update
RUN yes sdkmanager "platform-tools"
RUN yes sdkmanager "platforms;android-${ANDROID_VERSION}"
RUN yes sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}"
RUN yes sdkmanager "extras;android;m2repository"
RUN yes sdkmanager "extras;google;m2repository"
RUN yes sdkmanager "extras;google;google_play_services"# Set up a working directory
WORKDIR /app# Install JDK
#RUN apt-get update && apt-get install -y openjdk-11-jdk# Configure JAVA_HOME
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
# Install Expo CLI and EAS CLI globally
RUN npm install -g expo-cli && \
npm install -g eas-cli# Expose port 3000 for Expo
EXPOSE 3000# Keep the container running and waiting for commands
CMD ["/
