Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

Crear un contenedor de Expo (EAS) con Docker para generar Build Android para React Native

Tiempo de lectura: 2 minutos

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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# 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<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 ["/

0

Leave a Comment