Docker is a platform that delivers software in containers and usually uses OS-level virtualization.
The Need
Of course, the first question to pop up is the need. Why do we need Docker for Flutter Apps? Well, here it is, as Flutter Developers, we know the hardship of setting up Flutter SDK to Android SDK, Java, and whatnot. With Docker, we can say goodbye to all these installation processes and just grab the Dockerfile to build, test, execute and even deploy. You even don't need to worry about scaling, as Docker does it all for you.
Getting Started
Let's begin by creating a Dockerfile. Here, we will be using Docker to run integration and smoke testing on your Flutter app.
FROM ubuntu:20.10 as builder
RUN apt update && apt install -y curl git unzip xz-utils zip libglu1-mesa openjdk-8-jdk wget
RUN useradd -ms /bin/bash user
USER user
WORKDIR /home/user
#Installing Android SDK
RUN mkdir -p Android/sdk
ENV ANDROID_SDK_ROOT /home/user/Android/sdk
RUN mkdir -p .android && touch .android/repositories.cfg
RUN wget -O sdk-tools.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
RUN unzip sdk-tools.zip && rm sdk-tools.zip
RUN mv tools Android/sdk/tools
RUN cd Android/sdk/tools/bin && yes | ./sdkmanager --licenses
RUN cd Android/sdk/tools/bin && ./sdkmanager "build-tools;29.0.2" "patcher;v4" "platform-tools" "platforms;android-29" "sources;android-29"
ENV PATH "$PATH:/home/user/Android/sdk/platform-tools"
#Installing Flutter SDK
RUN git clone https://github.com/flutter/flutter.git
ENV PATH "$PATH:/home/user/flutter/bin"
RUN flutter channel dev
RUN flutter upgrade
RUN flutter doctor
Run this Dockerfile in your system using the command docker build -t flutterdockerfile .
This will begin your Dockerfile and start installing all the required tools for the perfect Flutter Development.
Now go ahead and push your Flutter app to your git repository and make sure you set up testing in your widget_test.dart
file.
Once you are done pushing the Flutter app, add few more lines to the Dockerfile.
RUN git clone GIT_REPO_URL
RUN cd FILE_NAME && flutter test
Replace GIT_REPO_URL with your Flutter git repo URL and FILE_NAME will be the name of your repo.
This will now begin test on your Flutter application.
Alternative Method
Pull the Docker image by running
docker pull ameysunu/flutterdocker
in your terminal.Now run
docker images
and get the IMAGE ID for the container.With the obtained IMAGE ID, run
docker run -i -t IMAGE ID
, and you will be in the container.Clone the Flutter app from your git repository and run
flutter test
for smoke testing
I'm also linking this amazing post on DEV for Flutter Dockerization with Android Emulator as well.
Top comments (8)
Almost worked, just had to set time zone, as mentioned in the comment by @anshul and also needed to use Ubuntu 20.04 because 20.10 is deprecated and doesn't install (fails due to packages not existing).
Modified dockerfile:
Is it possible to run the app in the container while the emulator is installed in the local computer?
No, not exactly. You can connect a physical android device via WiFi and then debug on it via the container.
Ok, thanks
Could you explain how it would be?
This link could be of use to you:
stackoverflow.com/questions/489395...
Thank you.
Hi, Thank you for the solution.
Just wnat to add that I ran into an issue where the script stuck on Geolocation. It did not let me enter the options for the same. So after researching, I found 2 solutions.
First, you can use ubuntu:18.04;
Second, you can install tzdata and use TZ=in the Dockerfile(2nd line).
For reference: grigorkh.medium.com/fix-tzdata-han...