From 83f837fa5969cf40a28cda44e6ed59eeff3f1f71 Mon Sep 17 00:00:00 2001 From: Mats Pfeiffer Date: Tue, 1 Dec 2020 11:54:51 +0100 Subject: [PATCH 1/6] Test stage builds --- Dockerfile.android | 3 +++ Dockerfile.flutter | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 Dockerfile.android create mode 100644 Dockerfile.flutter diff --git a/Dockerfile.android b/Dockerfile.android new file mode 100644 index 0000000..570bfb7 --- /dev/null +++ b/Dockerfile.android @@ -0,0 +1,3 @@ +ARG VERSION=latest +FROM flutter:$VERSION + diff --git a/Dockerfile.flutter b/Dockerfile.flutter new file mode 100644 index 0000000..ae43684 --- /dev/null +++ b/Dockerfile.flutter @@ -0,0 +1,25 @@ +FROM ubuntu:20.04 AS flutter + +# build args should be filled at buildtime +ENV FLUTTER_CHANNEL="stable" +ENV FLUTTER_VERSION="1.22.4" +ENV FLUTTER_URL="https://storage.googleapis.com/flutter_infra/releases/$FLUTTER_CHANNEL/linux/flutter_linux_$FLUTTER_VERSION-$FLUTTER_CHANNEL.tar.xz" +ENV FLUTTER_HOME="/opt/flutter" +ENV PATH="$FLUTTER_HOME/bin:$PATH" + +# install core dependencies +ENV DEBIAN_FRONTEND="noninteractive" +RUN apt-get update \ + && apt-get install --yes curl unzip sed git bash xz-utils \ + && rm -rf /var/lib/{apt,dpkg,cache,log} + +# flutter +RUN curl -o flutter.tar.xz $FLUTTER_URL \ + && mkdir -p $FLUTTER_HOME \ + && tar xf flutter.tar.xz -C /opt \ + && rm flutter.tar.xz \ + && flutter config --no-analytics \ + && flutter precache \ + && yes "y" | flutter doctor --android-licenses \ + && flutter doctor \ + && flutter update-packages \ No newline at end of file From 25e4748a120e78f370271e771446cde074d5552a Mon Sep 17 00:00:00 2001 From: Mats Pfeiffer Date: Sat, 9 Jan 2021 10:37:18 +0100 Subject: [PATCH 2/6] Add base image --- Dockerfile.base | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Dockerfile.base diff --git a/Dockerfile.base b/Dockerfile.base new file mode 100644 index 0000000..0954698 --- /dev/null +++ b/Dockerfile.base @@ -0,0 +1,65 @@ +FROM ubuntu:20.04 + +# ENV UID=1000 +# ENV GID=1000 +# ENV USER="developer" +# ENV JAVA_VERSION="8" +# ENV ANDROID_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip" +# ENV ANDROID_VERSION="29" +# ENV ANDROID_BUILD_TOOLS_VERSION="29.0.3" +# ENV ANDROID_ARCHITECTURE="x86_64" +# ENV ANDROID_SDK_ROOT="/home/$USER/android" +ARG FLUTTER_CHANNEL +ARG FLUTTER_VERSION +ENV FLUTTER_URL="https://storage.googleapis.com/flutter_infra/releases/$FLUTTER_CHANNEL/linux/flutter_linux_$FLUTTER_VERSION-$FLUTTER_CHANNEL.tar.xz" +ENV FLUTTER_HOME="/opt/flutter" +ENV FLUTTER_WEB_PORT="8090" +ENV FLUTTER_DEBUG_PORT="42000" +# ENV FLUTTER_EMULATOR_NAME="flutter_emulator" +ENV PATH="$FLUTTER_HOME/bin:$PATH" + +# install all dependencies +ENV DEBIAN_FRONTEND="noninteractive" +RUN apt-get update \ + && apt-get install --yes --no-install-recommends curl unzip sed git bash xz-utils ca-certificates \ + && rm -rf /var/lib/{apt,dpkg,cache,log} + +# create user +# RUN groupadd --gid $GID $USER \ +# && useradd -s /bin/bash --uid $UID --gid $GID -m $USER + +# USER $USER +# WORKDIR /opt + +# # android sdk +# RUN mkdir -p $ANDROID_SDK_ROOT \ +# && mkdir -p /home/$USER/.android \ +# && touch /home/$USER/.android/repositories.cfg \ +# && curl -o android_tools.zip $ANDROID_TOOLS_URL \ +# && unzip -qq -d "$ANDROID_SDK_ROOT" android_tools.zip \ +# && rm android_tools.zip \ +# && mkdir -p $ANDROID_SDK_ROOT/cmdline-tools \ +# && mv $ANDROID_SDK_ROOT/tools $ANDROID_SDK_ROOT/cmdline-tools/tools \ +# && yes "y" | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" \ +# && yes "y" | sdkmanager "platforms;android-$ANDROID_VERSION" \ +# && yes "y" | sdkmanager "platform-tools" \ +# && yes "y" | sdkmanager "emulator" \ +# && yes "y" | sdkmanager "system-images;android-$ANDROID_VERSION;google_apis_playstore;$ANDROID_ARCHITECTURE" + +# flutter +RUN curl -o flutter.tar.xz $FLUTTER_URL \ + && mkdir -p $FLUTTER_HOME \ + && tar xf flutter.tar.xz -C /opt \ + && rm flutter.tar.xz \ + && flutter config --no-analytics \ + && flutter precache \ + && yes "y" | flutter doctor --android-licenses \ + && flutter doctor \ + # && flutter emulators --create \ + && flutter update-packages + +# COPY chown.sh /usr/local/bin/ +# COPY flutter-android-emulator.sh /usr/local/bin/flutter-android-emulator +# ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ] + +CMD ["flutter"] From e8996b32f69f138403513a860d4a389e61996d75 Mon Sep 17 00:00:00 2001 From: Mats Pfeiffer Date: Sat, 9 Jan 2021 21:25:49 +0100 Subject: [PATCH 3/6] Reduced to base and android image --- Dockerfile.android | 41 +++++++++++++++++++++++++++-- Dockerfile.base | 49 +++++----------------------------- Dockerfile.flutter | 25 ------------------ beta/Dockerfile | 65 ---------------------------------------------- dev/Dockerfile | 65 ---------------------------------------------- entrypoint.sh | 1 - flutter-web.sh | 6 ----- stable/Dockerfile | 64 --------------------------------------------- 8 files changed, 46 insertions(+), 270 deletions(-) delete mode 100644 Dockerfile.flutter delete mode 100644 beta/Dockerfile delete mode 100644 dev/Dockerfile delete mode 100755 flutter-web.sh delete mode 100644 stable/Dockerfile diff --git a/Dockerfile.android b/Dockerfile.android index 570bfb7..fd5bfe7 100644 --- a/Dockerfile.android +++ b/Dockerfile.android @@ -1,3 +1,40 @@ -ARG VERSION=latest -FROM flutter:$VERSION +ARG TAG +FROM matspfeiffer/flutter:$TAG + +ENV JAVA_VERSION="8" +ENV ANDROID_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip" +ENV ANDROID_VERSION="29" +ENV ANDROID_BUILD_TOOLS_VERSION="29.0.3" +ENV ANDROID_ARCHITECTURE="x86_64" +ENV ANDROID_SDK_ROOT="/opt/android" +ENV FLUTTER_EMULATOR_NAME="flutter_emulator" +ENV PATH="$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/platforms:$PATH" + +# install all dependencies +ENV DEBIAN_FRONTEND="noninteractive" +RUN apt-get update \ + && apt-get install --yes --no-install-recommends openjdk-$JAVA_VERSION-jdk libglvnd0 xauth x11-xserver-utils libpulse0 libxcomposite1 libgl1-mesa-glx \ + && rm -rf /var/lib/{apt,dpkg,cache,log} + +# android sdk +RUN mkdir -p $ANDROID_SDK_ROOT \ + && mkdir -p /root/.android \ + && touch /root/.android/repositories.cfg \ + && curl -o android_tools.zip $ANDROID_TOOLS_URL \ + && unzip -qq -d "$ANDROID_SDK_ROOT" android_tools.zip \ + && rm android_tools.zip \ + && mkdir -p $ANDROID_SDK_ROOT/cmdline-tools/latest \ + && mv $ANDROID_SDK_ROOT/cmdline-tools/bin $ANDROID_SDK_ROOT/cmdline-tools/latest/bin \ + && mv $ANDROID_SDK_ROOT/cmdline-tools/lib $ANDROID_SDK_ROOT/cmdline-tools/latest/lib \ + && yes "y" | sdkmanager "extras;google;m2repository" "extras;android;m2repository" \ + && yes "y" | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" \ + && yes "y" | sdkmanager "platforms;android-$ANDROID_VERSION" \ + && yes "y" | sdkmanager "platform-tools" \ + && yes "y" | sdkmanager "system-images;android-$ANDROID_VERSION;google_apis_playstore;$ANDROID_ARCHITECTURE" + +RUN flutter emulators --create + +COPY flutter-android-emulator.sh /usr/local/bin/flutter-android-emulator +ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ] + diff --git a/Dockerfile.base b/Dockerfile.base index 0954698..f51517b 100644 --- a/Dockerfile.base +++ b/Dockerfile.base @@ -1,21 +1,11 @@ FROM ubuntu:20.04 -# ENV UID=1000 -# ENV GID=1000 -# ENV USER="developer" -# ENV JAVA_VERSION="8" -# ENV ANDROID_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip" -# ENV ANDROID_VERSION="29" -# ENV ANDROID_BUILD_TOOLS_VERSION="29.0.3" -# ENV ANDROID_ARCHITECTURE="x86_64" -# ENV ANDROID_SDK_ROOT="/home/$USER/android" ARG FLUTTER_CHANNEL ARG FLUTTER_VERSION +ENV UID=1000 +ENV GID=1000 ENV FLUTTER_URL="https://storage.googleapis.com/flutter_infra/releases/$FLUTTER_CHANNEL/linux/flutter_linux_$FLUTTER_VERSION-$FLUTTER_CHANNEL.tar.xz" ENV FLUTTER_HOME="/opt/flutter" -ENV FLUTTER_WEB_PORT="8090" -ENV FLUTTER_DEBUG_PORT="42000" -# ENV FLUTTER_EMULATOR_NAME="flutter_emulator" ENV PATH="$FLUTTER_HOME/bin:$PATH" # install all dependencies @@ -24,42 +14,17 @@ RUN apt-get update \ && apt-get install --yes --no-install-recommends curl unzip sed git bash xz-utils ca-certificates \ && rm -rf /var/lib/{apt,dpkg,cache,log} -# create user -# RUN groupadd --gid $GID $USER \ -# && useradd -s /bin/bash --uid $UID --gid $GID -m $USER - -# USER $USER -# WORKDIR /opt - -# # android sdk -# RUN mkdir -p $ANDROID_SDK_ROOT \ -# && mkdir -p /home/$USER/.android \ -# && touch /home/$USER/.android/repositories.cfg \ -# && curl -o android_tools.zip $ANDROID_TOOLS_URL \ -# && unzip -qq -d "$ANDROID_SDK_ROOT" android_tools.zip \ -# && rm android_tools.zip \ -# && mkdir -p $ANDROID_SDK_ROOT/cmdline-tools \ -# && mv $ANDROID_SDK_ROOT/tools $ANDROID_SDK_ROOT/cmdline-tools/tools \ -# && yes "y" | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" \ -# && yes "y" | sdkmanager "platforms;android-$ANDROID_VERSION" \ -# && yes "y" | sdkmanager "platform-tools" \ -# && yes "y" | sdkmanager "emulator" \ -# && yes "y" | sdkmanager "system-images;android-$ANDROID_VERSION;google_apis_playstore;$ANDROID_ARCHITECTURE" # flutter RUN curl -o flutter.tar.xz $FLUTTER_URL \ && mkdir -p $FLUTTER_HOME \ && tar xf flutter.tar.xz -C /opt \ && rm flutter.tar.xz \ - && flutter config --no-analytics \ + && flutter config --no-analytics --enable-web \ && flutter precache \ - && yes "y" | flutter doctor --android-licenses \ - && flutter doctor \ - # && flutter emulators --create \ - && flutter update-packages + && yes "y" | flutter doctor --android-licenses -# COPY chown.sh /usr/local/bin/ -# COPY flutter-android-emulator.sh /usr/local/bin/flutter-android-emulator -# ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ] +COPY chown.sh /usr/local/bin/ +COPY entrypoint.sh /usr/local/bin/ +ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ] -CMD ["flutter"] diff --git a/Dockerfile.flutter b/Dockerfile.flutter deleted file mode 100644 index ae43684..0000000 --- a/Dockerfile.flutter +++ /dev/null @@ -1,25 +0,0 @@ -FROM ubuntu:20.04 AS flutter - -# build args should be filled at buildtime -ENV FLUTTER_CHANNEL="stable" -ENV FLUTTER_VERSION="1.22.4" -ENV FLUTTER_URL="https://storage.googleapis.com/flutter_infra/releases/$FLUTTER_CHANNEL/linux/flutter_linux_$FLUTTER_VERSION-$FLUTTER_CHANNEL.tar.xz" -ENV FLUTTER_HOME="/opt/flutter" -ENV PATH="$FLUTTER_HOME/bin:$PATH" - -# install core dependencies -ENV DEBIAN_FRONTEND="noninteractive" -RUN apt-get update \ - && apt-get install --yes curl unzip sed git bash xz-utils \ - && rm -rf /var/lib/{apt,dpkg,cache,log} - -# flutter -RUN curl -o flutter.tar.xz $FLUTTER_URL \ - && mkdir -p $FLUTTER_HOME \ - && tar xf flutter.tar.xz -C /opt \ - && rm flutter.tar.xz \ - && flutter config --no-analytics \ - && flutter precache \ - && yes "y" | flutter doctor --android-licenses \ - && flutter doctor \ - && flutter update-packages \ No newline at end of file diff --git a/beta/Dockerfile b/beta/Dockerfile deleted file mode 100644 index 3494ca0..0000000 --- a/beta/Dockerfile +++ /dev/null @@ -1,65 +0,0 @@ -FROM ubuntu:20.04 - -ENV UID=1000 -ENV GID=1000 -ENV USER="developer" -ENV JAVA_VERSION="8" -ENV ANDROID_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-6200805_latest.zip" -ENV ANDROID_VERSION="29" -ENV ANDROID_BUILD_TOOLS_VERSION="29.0.3" -ENV ANDROID_ARCHITECTURE="x86_64" -ENV ANDROID_SDK_ROOT="/home/$USER/android" -ENV FLUTTER_CHANNEL="beta" -ENV FLUTTER_VERSION="1.24.0-10.2.pre" -ENV FLUTTER_URL="https://storage.googleapis.com/flutter_infra/releases/$FLUTTER_CHANNEL/linux/flutter_linux_$FLUTTER_VERSION-$FLUTTER_CHANNEL.tar.xz" -ENV FLUTTER_HOME="/home/$USER/flutter" -ENV FLUTTER_WEB_PORT="8090" -ENV FLUTTER_DEBUG_PORT="42000" -ENV FLUTTER_EMULATOR_NAME="flutter_emulator" -ENV PATH="$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/platforms:$FLUTTER_HOME/bin:$PATH" - -# install all dependencies -ENV DEBIAN_FRONTEND="noninteractive" -RUN apt-get update \ - && apt-get install --yes --no-install-recommends openjdk-$JAVA_VERSION-jdk curl unzip sed git bash xz-utils libglvnd0 ssh xauth x11-xserver-utils libpulse0 libxcomposite1 libgl1-mesa-glx \ - && rm -rf /var/lib/{apt,dpkg,cache,log} - -# create user -RUN groupadd --gid $GID $USER \ - && useradd -s /bin/bash --uid $UID --gid $GID -m $USER - -USER $USER -WORKDIR /home/$USER - -# android sdk -RUN mkdir -p $ANDROID_SDK_ROOT \ - && mkdir -p /home/$USER/.android \ - && touch /home/$USER/.android/repositories.cfg \ - && curl -o android_tools.zip $ANDROID_TOOLS_URL \ - && unzip -qq -d "$ANDROID_SDK_ROOT" android_tools.zip \ - && rm android_tools.zip \ - && mkdir -p $ANDROID_SDK_ROOT/cmdline-tools \ - && mv $ANDROID_SDK_ROOT/tools $ANDROID_SDK_ROOT/cmdline-tools/tools \ - && yes "y" | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" \ - && yes "y" | sdkmanager "platforms;android-$ANDROID_VERSION" \ - && yes "y" | sdkmanager "platform-tools" \ - && yes "y" | sdkmanager "emulator" \ - && yes "y" | sdkmanager "system-images;android-$ANDROID_VERSION;google_apis_playstore;$ANDROID_ARCHITECTURE" - -# flutter -RUN curl -o flutter.tar.xz $FLUTTER_URL \ - && mkdir -p $FLUTTER_HOME \ - && tar xf flutter.tar.xz -C /home/$USER \ - && rm flutter.tar.xz \ - && flutter config --no-analytics --enable-web \ - && flutter precache \ - && yes "y" | flutter doctor --android-licenses \ - && flutter doctor \ - && flutter emulators --create \ - && flutter update-packages - -COPY entrypoint.sh /usr/local/bin/ -COPY chown.sh /usr/local/bin/ -COPY flutter-android-emulator.sh /usr/local/bin/flutter-android-emulator -COPY flutter-web.sh /usr/local/bin/flutter-web -ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ] diff --git a/dev/Dockerfile b/dev/Dockerfile deleted file mode 100644 index 5193210..0000000 --- a/dev/Dockerfile +++ /dev/null @@ -1,65 +0,0 @@ -FROM ubuntu:20.04 - -ENV UID=1000 -ENV GID=1000 -ENV USER="developer" -ENV JAVA_VERSION="8" -ENV ANDROID_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-6200805_latest.zip" -ENV ANDROID_VERSION="29" -ENV ANDROID_BUILD_TOOLS_VERSION="29.0.3" -ENV ANDROID_ARCHITECTURE="x86_64" -ENV ANDROID_SDK_ROOT="/home/$USER/android" -ENV FLUTTER_CHANNEL="dev" -ENV FLUTTER_VERSION="1.24.0-10.2.pre" -ENV FLUTTER_URL="https://storage.googleapis.com/flutter_infra/releases/$FLUTTER_CHANNEL/linux/flutter_linux_$FLUTTER_VERSION-$FLUTTER_CHANNEL.tar.xz" -ENV FLUTTER_HOME="/home/$USER/flutter" -ENV FLUTTER_WEB_PORT="8090" -ENV FLUTTER_DEBUG_PORT="42000" -ENV FLUTTER_EMULATOR_NAME="flutter_emulator" -ENV PATH="$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/platforms:$FLUTTER_HOME/bin:$PATH" - -# install all dependencies -ENV DEBIAN_FRONTEND="noninteractive" -RUN apt-get update \ - && apt-get install --yes --no-install-recommends openjdk-$JAVA_VERSION-jdk curl unzip sed git bash xz-utils libglvnd0 ssh xauth x11-xserver-utils libpulse0 libxcomposite1 libgl1-mesa-glx \ - && rm -rf /var/lib/{apt,dpkg,cache,log} - -# create user -RUN groupadd --gid $GID $USER \ - && useradd -s /bin/bash --uid $UID --gid $GID -m $USER - -USER $USER -WORKDIR /home/$USER - -# android sdk -RUN mkdir -p $ANDROID_SDK_ROOT \ - && mkdir -p /home/$USER/.android \ - && touch /home/$USER/.android/repositories.cfg \ - && curl -o android_tools.zip $ANDROID_TOOLS_URL \ - && unzip -qq -d "$ANDROID_SDK_ROOT" android_tools.zip \ - && rm android_tools.zip \ - && mkdir -p $ANDROID_SDK_ROOT/cmdline-tools \ - && mv $ANDROID_SDK_ROOT/tools $ANDROID_SDK_ROOT/cmdline-tools/tools \ - && yes "y" | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" \ - && yes "y" | sdkmanager "platforms;android-$ANDROID_VERSION" \ - && yes "y" | sdkmanager "platform-tools" \ - && yes "y" | sdkmanager "emulator" \ - && yes "y" | sdkmanager "system-images;android-$ANDROID_VERSION;google_apis_playstore;$ANDROID_ARCHITECTURE" - -# flutter -RUN curl -o flutter.tar.xz $FLUTTER_URL \ - && mkdir -p $FLUTTER_HOME \ - && tar xf flutter.tar.xz -C /home/$USER \ - && rm flutter.tar.xz \ - && flutter config --no-analytics --enable-web \ - && flutter precache \ - && yes "y" | flutter doctor --android-licenses \ - && flutter doctor \ - && flutter emulators --create \ - && flutter update-packages - -COPY entrypoint.sh /usr/local/bin/ -COPY chown.sh /usr/local/bin/ -COPY flutter-android-emulator.sh /usr/local/bin/flutter-android-emulator -COPY flutter-web.sh /usr/local/bin/flutter-web -ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ] diff --git a/entrypoint.sh b/entrypoint.sh index 31ab082..848ebeb 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -3,7 +3,6 @@ # execute flutter with arguments flutter --no-version-check "$@" - /bin/bash /usr/local/bin/chown.sh exit diff --git a/flutter-web.sh b/flutter-web.sh deleted file mode 100755 index d1edd6d..0000000 --- a/flutter-web.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -flutter run -d web-server --web-port $FLUTTER_WEB_PORT --web-hostname 0.0.0.0 --observatory-port $FLUTTER_DEBUG_PORT -/bin/bash /usr/local/bin/chown.sh - -exit diff --git a/stable/Dockerfile b/stable/Dockerfile deleted file mode 100644 index abe849e..0000000 --- a/stable/Dockerfile +++ /dev/null @@ -1,64 +0,0 @@ -FROM ubuntu:20.04 - -ENV UID=1000 -ENV GID=1000 -ENV USER="developer" -ENV JAVA_VERSION="8" -ENV ANDROID_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip" -ENV ANDROID_VERSION="29" -ENV ANDROID_BUILD_TOOLS_VERSION="29.0.3" -ENV ANDROID_ARCHITECTURE="x86_64" -ENV ANDROID_SDK_ROOT="/home/$USER/android" -ENV FLUTTER_CHANNEL="stable" -ENV FLUTTER_VERSION="1.22.4" -ENV FLUTTER_URL="https://storage.googleapis.com/flutter_infra/releases/$FLUTTER_CHANNEL/linux/flutter_linux_$FLUTTER_VERSION-$FLUTTER_CHANNEL.tar.xz" -ENV FLUTTER_HOME="/home/$USER/flutter" -ENV FLUTTER_WEB_PORT="8090" -ENV FLUTTER_DEBUG_PORT="42000" -ENV FLUTTER_EMULATOR_NAME="flutter_emulator" -ENV PATH="$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/platforms:$FLUTTER_HOME/bin:$PATH" - -# install all dependencies -ENV DEBIAN_FRONTEND="noninteractive" -RUN apt-get update \ - && apt-get install --yes --no-install-recommends openjdk-$JAVA_VERSION-jdk curl unzip sed git bash xz-utils libglvnd0 ssh xauth x11-xserver-utils libpulse0 libxcomposite1 libgl1-mesa-glx \ - && rm -rf /var/lib/{apt,dpkg,cache,log} - -# create user -RUN groupadd --gid $GID $USER \ - && useradd -s /bin/bash --uid $UID --gid $GID -m $USER - -USER $USER -WORKDIR /home/$USER - -# android sdk -RUN mkdir -p $ANDROID_SDK_ROOT \ - && mkdir -p /home/$USER/.android \ - && touch /home/$USER/.android/repositories.cfg \ - && curl -o android_tools.zip $ANDROID_TOOLS_URL \ - && unzip -qq -d "$ANDROID_SDK_ROOT" android_tools.zip \ - && rm android_tools.zip \ - && mkdir -p $ANDROID_SDK_ROOT/cmdline-tools \ - && mv $ANDROID_SDK_ROOT/tools $ANDROID_SDK_ROOT/cmdline-tools/tools \ - && yes "y" | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" \ - && yes "y" | sdkmanager "platforms;android-$ANDROID_VERSION" \ - && yes "y" | sdkmanager "platform-tools" \ - && yes "y" | sdkmanager "emulator" \ - && yes "y" | sdkmanager "system-images;android-$ANDROID_VERSION;google_apis_playstore;$ANDROID_ARCHITECTURE" - -# flutter -RUN curl -o flutter.tar.xz $FLUTTER_URL \ - && mkdir -p $FLUTTER_HOME \ - && tar xf flutter.tar.xz -C /home/$USER \ - && rm flutter.tar.xz \ - && flutter config --no-analytics \ - && flutter precache \ - && yes "y" | flutter doctor --android-licenses \ - && flutter doctor \ - && flutter emulators --create \ - && flutter update-packages - -COPY entrypoint.sh /usr/local/bin/ -COPY chown.sh /usr/local/bin/ -COPY flutter-android-emulator.sh /usr/local/bin/flutter-android-emulator -ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ] From 3d166f5e3fe96b203cb70c4b22747ccb2986af8c Mon Sep 17 00:00:00 2001 From: Mats Pfeiffer Date: Sat, 9 Jan 2021 21:47:13 +0100 Subject: [PATCH 4/6] Merge commands --- Dockerfile.android | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Dockerfile.android b/Dockerfile.android index fd5bfe7..cb4b8ea 100644 --- a/Dockerfile.android +++ b/Dockerfile.android @@ -16,7 +16,7 @@ RUN apt-get update \ && apt-get install --yes --no-install-recommends openjdk-$JAVA_VERSION-jdk libglvnd0 xauth x11-xserver-utils libpulse0 libxcomposite1 libgl1-mesa-glx \ && rm -rf /var/lib/{apt,dpkg,cache,log} -# android sdk +# android sdk & emulator setup RUN mkdir -p $ANDROID_SDK_ROOT \ && mkdir -p /root/.android \ && touch /root/.android/repositories.cfg \ @@ -26,15 +26,14 @@ RUN mkdir -p $ANDROID_SDK_ROOT \ && mkdir -p $ANDROID_SDK_ROOT/cmdline-tools/latest \ && mv $ANDROID_SDK_ROOT/cmdline-tools/bin $ANDROID_SDK_ROOT/cmdline-tools/latest/bin \ && mv $ANDROID_SDK_ROOT/cmdline-tools/lib $ANDROID_SDK_ROOT/cmdline-tools/latest/lib \ + && yes "y" | sdkmanager --update \ && yes "y" | sdkmanager "extras;google;m2repository" "extras;android;m2repository" \ && yes "y" | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" \ && yes "y" | sdkmanager "platforms;android-$ANDROID_VERSION" \ && yes "y" | sdkmanager "platform-tools" \ - && yes "y" | sdkmanager "system-images;android-$ANDROID_VERSION;google_apis_playstore;$ANDROID_ARCHITECTURE" - -RUN flutter emulators --create + && yes "y" | sdkmanager "system-images;android-$ANDROID_VERSION;google_apis_playstore;$ANDROID_ARCHITECTURE" \ + && flutter emulators --create COPY flutter-android-emulator.sh /usr/local/bin/flutter-android-emulator ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ] - From d7f7c46630f80498f7a44307b44b7ae7cc8d7475 Mon Sep 17 00:00:00 2001 From: Mats Pfeiffer Date: Sat, 9 Jan 2021 22:11:16 +0100 Subject: [PATCH 5/6] Remove chown.sh --- Dockerfile.base | 3 --- chown.sh | 5 ----- entrypoint.sh | 2 -- 3 files changed, 10 deletions(-) delete mode 100755 chown.sh diff --git a/Dockerfile.base b/Dockerfile.base index f51517b..84cfe9f 100644 --- a/Dockerfile.base +++ b/Dockerfile.base @@ -2,8 +2,6 @@ FROM ubuntu:20.04 ARG FLUTTER_CHANNEL ARG FLUTTER_VERSION -ENV UID=1000 -ENV GID=1000 ENV FLUTTER_URL="https://storage.googleapis.com/flutter_infra/releases/$FLUTTER_CHANNEL/linux/flutter_linux_$FLUTTER_VERSION-$FLUTTER_CHANNEL.tar.xz" ENV FLUTTER_HOME="/opt/flutter" ENV PATH="$FLUTTER_HOME/bin:$PATH" @@ -24,7 +22,6 @@ RUN curl -o flutter.tar.xz $FLUTTER_URL \ && flutter precache \ && yes "y" | flutter doctor --android-licenses -COPY chown.sh /usr/local/bin/ COPY entrypoint.sh /usr/local/bin/ ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ] diff --git a/chown.sh b/chown.sh deleted file mode 100755 index 1182205..0000000 --- a/chown.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -chown $UID:$GID -R $(pwd) - -exit diff --git a/entrypoint.sh b/entrypoint.sh index 848ebeb..7b51bf3 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -3,6 +3,4 @@ # execute flutter with arguments flutter --no-version-check "$@" -/bin/bash /usr/local/bin/chown.sh - exit From 4218b645a1cf932e314c5407e867c2184fc2ff2e Mon Sep 17 00:00:00 2001 From: Mats Pfeiffer Date: Sat, 9 Jan 2021 22:29:14 +0100 Subject: [PATCH 6/6] Adjust README --- README.md | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 95495be..4fe7159 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,30 @@ # docker-flutter -With this docker image you don't need to install the Flutter and Android SDK on your developer machine. Everything is ready to use inclusive an emulator device (Pixel with Android 9). With a shell alias you won't recognize a difference between the image and a local installation. If you are using VSCode you can also use this image as your devcontainer. +With this container images you don't need to install the Flutter and Android SDK on your developer machine. +Everything is ready to use inclusive an emulator device (Pixel with Android 9). With a shell alias you won't recognize +a difference between the image and a local installation. If you are using VSCode you can also use this image as your devcontainer. + +## Recommendations + +To have no file permission issues between your project and the container you should run the container rootless: + +1. [Docker rootless](https://docs.docker.com/engine/security/rootless/#rootless-docker-in-docker) +2. [Podman rootless @arch](https://wiki.archlinux.org/index.php/Podman#Rootless_Podman) ## Supported tags -- [`latest`](https://github.com/matsp/docker-flutter/blob/master/stable/Dockerfile) -- [`beta`](https://github.com/matsp/docker-flutter/tree/master/beta) -- [`dev`](https://github.com/matsp/docker-flutter/tree/master/dev) +- [`latest`](https://github.com/matsp/docker-flutter/blob/master/Dockerfile.base) +- [`stable`](https://github.com/matsp/docker-flutter/blob/master/Dockerfile.base) +- [`beta`](https://github.com/matsp/docker-flutter/tree/master/Dockerfile.base) +- [`dev`](https://github.com/matsp/docker-flutter/tree/master/Dockerfile.base) +- [`stable-android`](https://github.com/matsp/docker-flutter/tree/master/Dockerfile.android) +- [`beta-android`](https://github.com/matsp/docker-flutter/tree/master/Dockerfile.android) +- [`dev-android`](https://github.com/matsp/docker-flutter/tree/master/Dockerfile.android) ## Entrypoints - `flutter` (default) - `flutter-android-emulator` -- `flutter-web` (beta only) _Dependencies_ @@ -23,17 +35,15 @@ When you want to run the `flutter-android-emulator` entrypoint your host must su Executing e.g. `flutter help` in the current directory (appended arguments are passed to flutter in the container): ```shell -docker run --rm -e UID=$(id -u) -e GID=$(id -g) --workdir /project -v "$PWD":/project matspfeiffer/flutter help +docker run --rm -w /project -v "$PWD":/project matspfeiffer/flutter help ``` -When you don't set the `UID` and `GID` the files will be owned by `G-/UID=1000`. - ### flutter (connected usb device) Connecting to a device connected via usb is possible via: ```shell -docker run --rm -e UID=$(id -u) -e GID=$(id -g) --workdir /project -v "$PWD":/project --device=/dev/bus -v /dev/bus/usb:/dev/bus/usb matspfeiffer/flutter devices +docker run --rm -w /project -v "$PWD":/project --device=/dev/bus -v /dev/bus/usb:/dev/bus/usb matspfeiffer/flutter:stable-android devices ``` ### flutter-android-emulator @@ -41,15 +51,13 @@ docker run --rm -e UID=$(id -u) -e GID=$(id -g) --workdir /project -v "$PWD":/pr To achieve the best performance we will mount the X11 directory, DRI and KVM device of the host to get full hardware acceleration: ```shell -xhost local:$USER && docker run --rm -ti -e UID=$(id -u) -e GID=$(id -g) -p 42000:42000 --workdir /project --device /dev/kvm --device /dev/dri:/dev/dri -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY -v "$PWD":/project --entrypoint flutter-android-emulator matspfeiffer/flutter +xhost local:$USER && docker run -ti --rm -w /project --device /dev/kvm --device /dev/dri:/dev/dri -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY -v "$PWD":/project --entrypoint flutter-android-emulator matspfeiffer/flutter:stable-android ``` ### flutter-web (beta only) -You app will be served on localhost:8090: - ```shell -docker run --rm -ti -e UID=$(id -u) -e GID=$(id -g) -p 42000:42000 -p 8090:8090 --workdir /project -v "$PWD":/project --entrypoint flutter-web matspfeiffer/flutter:beta +docker run --rm -ti -p 42000:42000 -p 8090:8090 -w /project -v "$PWD":/project matspfeiffer/flutter:beta run -d web-server --web-port 8090 --web-hostname 0.0.0.0 --observatory-port 42000 ``` ## VSCode devcontainer @@ -65,7 +73,7 @@ Add this `.devcontainer/devcontainer.json` to your VSCode project: ```json { "name": "Flutter", - "image": "matspfeiffer/flutter", + "image": "matspfeiffer/flutter:stable-android", "extensions": ["dart-code.dart-code", "dart-code.flutter"], "runArgs": [ "--device", @@ -89,12 +97,12 @@ Add this `.devcontainer/devcontainer.json` to your VSCode project: ```json { "name": "Flutter", - "image": "matspfeiffer/flutter", + "image": "matspfeiffer/flutter:stable-android", "extensions": ["dart-code.dart-code", "dart-code.flutter"] } ``` -Start your local android emulator. Afterwards reconnect execute the following command to make it accessable via network: +Start your local android emulator. Afterwards execute the following command to make it accessable via network: ```shell adb tcpip 5555