Tiempo de lectura: 2 minutosReading 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:
container_name: react_native_dev
command: sh -c "npm install && expo start"
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
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<br>
<p># Install Android SDK and tools<br>
RUN apt-get update && apt-get install -y \<br>
&& rm -rf /var/lib/apt/lists/*</p>
<p># Install Android SDK</p>
<p># Environment variables<br>
ENV ANDROID_HOME=/opt/android-sdk-linux<br>
ENV ANDROID_SDK_ROOT=/opt/android-sdk-linux<br>
ENV PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools<br>
ENV ANDROID_VERSION=30<br>
ENV ANDROID_BUILD_TOOLS_VERSION=30.0.3</p>
<p>RUN wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip<br>
RUN mkdir -p ${ANDROID_HOME}/cmdline-tools<br>
RUN unzip commandlinetools-linux-9477386_latest.zip -d ${ANDROID_HOME}/cmdline-tools<br>
RUN rm commandlinetools-linux-9477386_latest.zip<br>
RUN mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest<br>
ENV PATH=${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools<br>
RUN yes sdkmanager --licenses<br>
RUN yes sdkmanager --update<br>
RUN yes sdkmanager "platform-tools"<br>
RUN yes sdkmanager "platforms;android-${ANDROID_VERSION}"<br>
RUN yes sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}"<br>
RUN yes sdkmanager "extras;android;m2repository"<br>
RUN yes sdkmanager "extras;google;m2repository"<br>
RUN yes sdkmanager "extras;google;google_play_services"</p>
<p># Set up a working directory<br>
#RUN apt-get update && apt-get install -y openjdk-11-jdk</p>
<p># Configure JAVA_HOME<br>
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64<br>
# Install Expo CLI and EAS CLI globally<br>
RUN npm install -g expo-cli && \<br>
npm install -g eas-cli</p>
<p># Expose port 3000 for Expo<br>
<p># Keep the container running and waiting for commands<br>
<div class="saboxplugin-wrap" itemtype="http://schema.org/Person" itemscope="" itemprop="author"><div class="saboxplugin-tab"><div class="saboxplugin-gravatar"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/devcodelight.com/wp-content/uploads/2023/07/cropped-light_logo-5.png?resize=100%2C100&ssl=1" width="100" height="100" alt="" itemprop="image"></div><div class="saboxplugin-authorname"><a href="https://devcodelight.com/en/author/courstube/" class="vcard author" rel="author"><span class="fn">DevCodeLight</span></a></div><div class="saboxplugin-desc"><div itemprop="description"></div></div><div class="clearfix"></div></div></div><div class="post-views content-post post-5631 entry-meta load-static">
<span class="post-views-icon dashicons dashicons-chart-bar"></span> <span class="post-views-label">Post Views:</span> <span class="post-views-count">0</span>
</div> <div class="wpulike wpulike-robeen "><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button" aria-label="Like Button" data-ulike-id="5631" data-ulike-nonce="008c799636" data-ulike-type="post" data-ulike-template="wpulike-robeen" data-ulike-display-likers="0" data-ulike-likers-style="popover" class="wp_ulike_btn wp_ulike_put_image wp_post_btn_5631"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0">0</span> </div></div>
<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Comparte esto:</h3><div class="sd-content"><ul><li class="share-facebook"><a rel="nofollow noopener noreferrer" data-shared="sharing-facebook-5631" class="share-facebook sd-button share-icon" href="https://devcodelight.com/en/crear-un-contenedor-de-expo-eas-con-docker-para-generar-build-android-para-react-native-2/?share=facebook" target="_blank" title="Click to share on Facebook"><span>Facebook</span></a></li><li class="share-x"><a rel="nofollow noopener noreferrer" data-shared="sharing-x-5631" class="share-x sd-button share-icon" href="https://devcodelight.com/en/crear-un-contenedor-de-expo-eas-con-docker-para-generar-build-android-para-react-native-2/?share=x" target="_blank" title="Click to share on X"><span>X</span></a></li><li class="share-end"></li></ul></div></div></div>
<div id="jp-relatedposts" class="jp-relatedposts">
<h3 class="jp-relatedposts-headline"><em>Related</em></h3>
# Use a Node.js image as the base<br>
FROM node:latest<p></p>
<p># Install Android SDK and tools<br>
RUN apt-get update && apt-get install -y \<br>
wget \<br>
unzip \<br>
openjdk-11-jdk \<br>
curl \<br>
&& rm -rf /var/lib/apt/lists/*</p>
<p># Install Android SDK</p>
<p># Environment variables<br>
ENV ANDROID_HOME=/opt/android-sdk-linux<br>
ENV ANDROID_SDK_ROOT=/opt/android-sdk-linux<br>
ENV PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools<br>
ENV ANDROID_VERSION=30<br>
ENV ANDROID_BUILD_TOOLS_VERSION=30.0.3</p>
<p>RUN wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip<br>
RUN mkdir -p ${ANDROID_HOME}/cmdline-tools<br>
RUN unzip commandlinetools-linux-9477386_latest.zip -d ${ANDROID_HOME}/cmdline-tools<br>
RUN rm commandlinetools-linux-9477386_latest.zip<br>
RUN mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest<br>
ENV PATH=${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools<br>
RUN yes sdkmanager --licenses<br>
RUN yes sdkmanager --update<br>
RUN yes sdkmanager "platform-tools"<br>
RUN yes sdkmanager "platforms;android-${ANDROID_VERSION}"<br>
RUN yes sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}"<br>
RUN yes sdkmanager "extras;android;m2repository"<br>
RUN yes sdkmanager "extras;google;m2repository"<br>
RUN yes sdkmanager "extras;google;google_play_services"</p>
<p># Set up a working directory<br>
WORKDIR /app</p>
<p># Install JDK<br>
#RUN apt-get update && apt-get install -y openjdk-11-jdk</p>
<p># Configure JAVA_HOME<br>
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64<br>
# Install Expo CLI and EAS CLI globally<br>
RUN npm install -g expo-cli && \<br>
npm install -g eas-cli</p>
<p># Expose port 3000 for Expo<br>
EXPOSE 3000</p>
<p># Keep the container running and waiting for commands<br>
CMD ["/</p>
<div class="saboxplugin-wrap" itemtype="http://schema.org/Person" itemscope="" itemprop="author"><div class="saboxplugin-tab"><div class="saboxplugin-gravatar"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/devcodelight.com/wp-content/uploads/2023/07/cropped-light_logo-5.png?resize=100%2C100&ssl=1" width="100" height="100" alt="" itemprop="image"></div><div class="saboxplugin-authorname"><a href="https://devcodelight.com/en/author/courstube/" class="vcard author" rel="author"><span class="fn">DevCodeLight</span></a></div><div class="saboxplugin-desc"><div itemprop="description"></div></div><div class="clearfix"></div></div></div><div class="post-views content-post post-5631 entry-meta load-static">
<span class="post-views-icon dashicons dashicons-chart-bar"></span> <span class="post-views-label">Post Views:</span> <span class="post-views-count">0</span>
</div> <div class="wpulike wpulike-robeen "><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button" aria-label="Like Button" data-ulike-id="5631" data-ulike-nonce="008c799636" data-ulike-type="post" data-ulike-template="wpulike-robeen" data-ulike-display-likers="0" data-ulike-likers-style="popover" class="wp_ulike_btn wp_ulike_put_image wp_post_btn_5631"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0">0</span> </div></div>
<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Comparte esto:</h3><div class="sd-content"><ul><li class="share-facebook"><a rel="nofollow noopener noreferrer" data-shared="sharing-facebook-5631" class="share-facebook sd-button share-icon" href="https://devcodelight.com/en/crear-un-contenedor-de-expo-eas-con-docker-para-generar-build-android-para-react-native-2/?share=facebook" target="_blank" title="Click to share on Facebook"><span>Facebook</span></a></li><li class="share-x"><a rel="nofollow noopener noreferrer" data-shared="sharing-x-5631" class="share-x sd-button share-icon" href="https://devcodelight.com/en/crear-un-contenedor-de-expo-eas-con-docker-para-generar-build-android-para-react-native-2/?share=x" target="_blank" title="Click to share on X"><span>X</span></a></li><li class="share-end"></li></ul></div></div></div>
<div id="jp-relatedposts" class="jp-relatedposts">
<h3 class="jp-relatedposts-headline"><em>Related</em></h3>
</div>
# 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.3
RUN 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 ["/
Post Views: 0
Related