[LINUX] Flutter in Docker - Erstellen und Verwenden einer Flutter-Entwicklungsumgebung in einem Docker-Container

1. Zuallererst

Wir zeigen Ihnen, wie Sie eine Flutter-Entwicklungsumgebung in einem Docker-Container erstellen (diesmal Ubuntu 20.04 LTS) und eine ähnliche Umgebung erstellen wie auf einem Host-PC von einem Host-PC mit MacOS- oder Linux-Betriebssystem. Mit diesem Mechanismus können Sie eine Entwicklungsumgebung (Server) remote erstellen und von Ihrem lokalen PC aus darauf zugreifen, um Flutter-Apps zu entwickeln. スクリーンショット 2020-07-30 22.15.09.png

Flattern in der Docker-Übersicht

(Ergänzung) Ich habe es diesmal nicht versucht, aber im Prinzip sollte die Android-Version (Betrieb des Emulators mit Aundroid Studio) im Docker-Container ausgeführt werden können.

image.png

Vorteile der Verwendung des Docker-Containers (Beispiel)

Zielumgebung (Host-PC)

2. Docker-Installation

Ich werde die Installationsmethode von Docker selbst weglassen, aber im Grunde ist es in Ordnung, wenn Sie das Verfahren auf der offiziellen Website befolgen.

3. Erstellen Sie ein Docker-Container-Image

In diesem Abschnitt wird das Verfahren zum Erstellen eines Docker-Container-Images beschrieben. Das Betriebssystem (rootfs) im Docker-Container ist Ubuntu 20.04. Dieses Mal werde ich die Docker-Datei nicht verwenden, sondern alles manuell erklären.

Erhalten des Ubuntu 20.04-Images (rootfs)

$ docker pull ubuntu:20.04

Starten Sie den Docker-Container

Starten Sie den Docker-Container mit dem folgenden Befehl und geben Sie den Container ein. Grundsätzlich können Sie ohne Sicherheit (--privileged) mit denselben Berechtigungen wie das Betriebssystem des Host-PCs zugreifen.

Da die hier angegebenen Parameter auch in der später beschriebenen Docker-Compose-Einstellungsdatei verwendet werden, führen Sie diese zuerst mit diesen Einstellungen aus.

$ docker run -it --name flutter-docker ¥
     --privileged -h flutter -u root -w /root ¥
     --add-host=flutter:127.0.1.1 --net=host ubuntu:20.04

Wenn es kein Problem gibt, ändert sich die Eingabeaufforderung in "#" und die Operation wird auf die Operation im Docker-Container umgeschaltet. Wenn Sie beispielsweise den Befehl "uname" eingeben, werden Sie feststellen, dass Sie sich unter Linux befinden.

# root@flutter:~# uname -a
Linux flutter 4.19.76-linuxkit #1 SMP Tue May 26 11:42:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Installation der notwendigen Werkzeuge

Installieren Sie die erforderlichen Pakete für das Ubuntu-Betriebssystem im Docker-Container. Bei der Installation von "xserver-xorg" werden Sie nach Informationen zum Gebietsschema und zur Tastatur gefragt, aber das ist in Ordnung (USA, wenn sicher).

# apt update
# apt install git unzip clang xserver-xorg pkg-config libgtk-3-dev curl cmake ninja-build

Installation des Chrome-Browsers (falls erforderlich)

# apt install wget gnupg
# sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
# wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
# apt update
# apt-get install google-chrome-stable

Referenz: https://qiita.com/pyon_kiti_jp/items/e6032eb6061a4774aece

Installieren Sie das Flutter SDK

Git klonen Sie das Flutter SDK und platzieren Sie es unter / opt.

# https://github.com/flutter/flutter.git
# mv flutter /opt/

Containerbild speichern

Dies ist das Ende aller Arbeiten im Container. So wird es aus dem Behälter kommen.

# exit

Speichern Sie den erstellten Container als Docker-Image-Datei. Da die hier angegebenen Parameter auch in der später beschriebenen Docker-Compose-Einstellungsdatei verwendet werden, führen Sie diese zuerst mit diesen Einstellungen aus.

$ docker commit flutter-docker flutter-docker/ubuntu:latest

4. Host-PC-Einstellungen (nur für macOS)

Da die GUI-Anwendung im Docker-Container auf dem X11-Protokoll ausgeführt wird, muss der Bildschirm der GUI-Anwendung auf den X11-Server auf der Host-PC-Seite übertragen werden. Im Fall von macOS gibt es XQuartz als X11-Server auf der Host-Seite. Installieren und verwenden Sie ihn daher.

Installieren Sie XQuartz

$ brew cask install xquartz

Starten Sie den Host-PC neu. Stellen Sie nach dem Neustart sicher, dass die Umgebungsvariable "DISPLAY" wie folgt festgelegt ist:

$ echo $DISPLAY
/private/tmp/com.apple.launchd.NagCeWDLYl/org.macosforge.xquartz:0

Ermöglichen Sie den Zugriff vom X11-Client auf den Docker-Container.

$ xhost +$(hostname)
$ xhost + local:root

Starten Sie "XQuartz" über die Befehlszeile oder das LaunchPad. スクリーンショット 2020-07-31 0.41.31.png

5. Host-PC-Einstellungen (nur für Linux)

Im Fall von Linux OS denke ich, dass dies in den meisten Fällen der X11-Standard ist, sodass nur die folgenden Maßnahmen ergriffen werden.

$ xhost + local:root

6. Aufbau der VS-Code-Umgebung

Installieren Sie VS Code und Erweiterungen usw., um den Docker-Container von VS Code zu verwenden.

VS Code Installation

Bitte installieren Sie unter Bezugnahme auf das Folgende.

Installation von VSCode Extensions

Installieren Sie die folgenden drei Erweiterungen.

スクリーンショット 2020-07-30 23.44.14.png スクリーンショット 2020-07-30 20.25.05.png スクリーンショット 2020-07-30 20.25.30.png

7. Erstellen einer Docker Compose-Datei

Um das Flutter SDK im Docker-Container von VS Code zu verwenden, erstellen Sie eine Docker Compose- und die soeben installierte VS Code Extensions-Konfigurationsdatei "Remote Development". Die erstellte Datei befindet sich unter https://github.com/Kurun-pan/flutter-docker. Verwenden Sie sie daher entsprechend dem Host-Betriebssystem (Linux oder macOS).

$ mkdir flutter_docker
$ cd flutter_docker

Erstellen Sie zwei Dateien im aktuellen Verzeichnis (flutter_docker): die Datei "docker-compose.yml" und die Datei ".devcontainer / devcontainer.json". スクリーンショット 2020-07-30 23.50.29.png

Wenn das Host-Betriebssystem macOS ist

Der Punkt war, "host.docker.internal: 0" in der Umgebungsvariablen "DISPLAY" zu setzen, aber es hat nicht funktioniert, daher gibt der Teil "{schreibe deinen Hostnamen !!}" den Hostnamen von macOS an. Bitte. .. Wenn jemand den richtigen Weg kennt, lass es mich wissen.

https://github.com/Kurun-pan/flutter-docker/tree/master/macos

docker-compose.yml


version: "3"
services:
    flutter:
        image: flutter-docker/ubuntu:latest
        working_dir: /root/workspace
        command: sleep infinity
        environment:
            - HOME=/root
            - no_proxy=127.0.0.1,localhost
            #- DISPLAY="host.docker.internal:0"
            - DISPLAY={write your host name!!}:0
        volumes:
            - ~/.gitconfig:/home/root/.gitconfig
            - ./:/root/workspace
            - ~/.Xauthority:/root/.Xauthority
        network_mode: "host"
        extra_hosts:
            - flutter:127.0.1.1

json:.devcontainer/devcontainer.json


{
    "name": "Flutter docker",
    "dockerComposeFile": [
        "../docker-compose.yml",
    ],
    "service": "flutter",
    "remoteUser": "root",
    "remoteEnv": {
        "QT_X11_NO_MITSHM": "1",
        "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/flutter/bin",
    },
    "settings": {
        "terminal.integrated.shell.linux": null
    },
    "runArgs": [
        "--privileged",
        "-P",
    ],
    "extensions": ["dart-code.flutter"],
    "workspaceMount": "source=${localWorkspaceFolder}/workspace,target=/root/workspace,type=bind,consistency=delegated",
    "workspaceFolder": "/root/workspace"
}

Wenn das Host-Betriebssystem Linux ist

Binden Sie unter Linux / dev / dri ein, um DRM (DRI) für Flutter-Apps in Docker-Containern in OpenGL verfügbar zu machen.

https://github.com/Kurun-pan/flutter-docker/tree/master/linux

docker-compose.yml


version: "3"
services:
    flutter:
        image: flutter-docker/ubuntu:latest
        working_dir: /root/workspace
        command: sleep infinity
        environment:
            - HOME=/root
            - no_proxy=127.0.0.1,localhost
        volumes:
            - ~/.gitconfig:/home/root/.gitconfig
            - ./:/root/workspace
            - /tmp/.X11-unix:/tmp/.X11-unix
        devices:
            - /dev/dri:/dev/dri
        network_mode: "host"
        extra_hosts:
            - flutter:127.0.1.1

Erben Sie die Umgebungsvariable "DISPLAY" des Host-Betriebssystems.

json:.devcontainer/devcontainer.json


{
    "name": "Flutter docker",
    "dockerComposeFile": [
        "../docker-compose.yml",
    ],
    "service": "flutter",
    "remoteUser": "root",
    "remoteEnv": {
        "QT_X11_NO_MITSHM": "1",
        "DISPLAY": "${localEnv:DISPLAY}",
        "XAUTHORITY": "/tmp/.X11-unix",
        "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/flutter/bin",
    },
    "settings": {
        "terminal.integrated.shell.linux": null
    },
    "runArgs": [
        "--privileged",
        "-P",
    ],
    "extensions": ["dart-code.flutter"],
    "workspaceMount": "source=${localWorkspaceFolder}/workspace,target=/root/workspace,type=bind,consistency=delegated",
    "workspaceFolder": "/root/workspace"
}

8. Führen Sie Flutter in Docker aus

Start des VS-Codes

Starten Sie VSCode in dem Verzeichnis, in dem "docker-compose.yml" vorhanden ist.

$ code .

VSCode Remote Container öffnen

Klicken Sie auf den Teil > < unten links im Fenster oder öffnen Sie die Befehlspalette mit Shift + Alt + P und wählen Sie Remote-Container: Ordner in Container öffnen .... スクリーンショット 2020-07-31 0.26.14.png

Klicken Sie auf Öffnen. スクリーンショット 2020-07-31 0.26.54.png

Am unteren Rand des VS-Code-Fensters wird ein Terminal geöffnet. Das Ziel dieser Terminaloperation ist das erstellte Docker-Container-Image (Flutter-Docker / Ubuntu: Neueste). スクリーンショット 2020-07-31 0.29.10.png

Erstellen eines Projekts für die Flutter-Beispiel-App

Führen Sie von hier aus den folgenden Befehl im VS-Code-Terminal (Docker-Container) aus, um die Flutter-Beispiel-App auszuführen.

# flutter config --enable-linux-desktop
# flutter config --enable-web
# mkdir sample
# cd sample
# flutter create .
スクリーンショット 2020-07-31 0.31.24.png

Führen Sie die Flutter-Beispiel-App aus

Beispiel-App für Linux Desktop

# flutter run -d linux
スクリーンショット 2020-07-31 0.47.26.png

Zusätzlich zur Ausführung von Befehlen können Sie den Dart-Quellcode mit VSCode öffnen und Apps ausführen oder mithilfe von Haltepunkten mit GUI-Operationen debuggen. スクリーンショット 2020-07-31 1.22.16.png

Beispiel-App für das Web

Bitte warten Sie eine Weile, da dies unterstützt wird. ..

# flutter run -d chrome

Recommended Posts

Flutter in Docker - Erstellen und Verwenden einer Flutter-Entwicklungsumgebung in einem Docker-Container
[Django] Verwenden Sie VS Code + Remote-Container, um schnell eine Entwicklungsumgebung für Django-Container (Docker) zu erstellen.
Verwendung von Docker zum Containerisieren Ihrer Anwendung und Verwenden von Docker Compose zum Ausführen Ihrer Anwendung in einer Entwicklungsumgebung
So führen Sie eine Django-Anwendung auf einem Docker-Container aus (Entwicklungs- und Produktionsumgebung)
Erstellen Sie eine Docker-Umgebung, die PyTorch und JupyterLab verwenden kann
[Django] Erstellen Sie mit PyCharm schnell eine Entwicklungsumgebung für Django-Container (Docker)
Verwenden Sie WebDAV in einer Portable Docker-Umgebung
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
So machen Sie den Containernamen in Docker als Subdomain zugänglich
Erstellen Sie eine Entwicklungsumgebung für die C-Sprache mit einem Container
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Verwenden Sie die Kaggle-API in einem Docker-Container
Erstellen Sie mit Eclipse eine Minecraft-Plug-Entwicklungsumgebung
Erstellen Sie eine Entwicklungsumgebung mit Jupyter und Flask mit Python in Docker (unterstützt sowohl VS Code als auch Code-Server).
Erstellen Sie eine PYNQ-Umgebung auf Ultra96 V2 und melden Sie sich bei Jupyter Notebook an
So erstellen Sie eine Django (Python) -Umgebung auf Docker
Ich möchte einfach eine modellbasierte Entwicklungsumgebung erstellen
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
So erstellen Sie eine Entwicklungsumgebung für TensorFlow (1.0.0) (Mac)
Erstellen Sie einen Docker-Container und speichern Sie PNG vor Altair
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
Erstellen Sie mit Docker eine einfache Fast API-Entwicklungsumgebung
Erstellen Sie mit Docker eine Django-Entwicklungsumgebung! (Docker-compose / Django / postgreSQL / nginx)
Vor- und Nachteile der Konvertierung der Entwicklungsumgebung von Django in Docker
[Memo] Erstellen Sie mit Docker eine Entwicklungsumgebung für Django + Nuxt.js
Erstellen Sie eine Python-Entwicklungsumgebung mit Eclipse (fügen Sie einen HTML-Editor hinzu).
Erstellen Sie eine Python-Umgebung und übertragen Sie Daten auf den Server
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Erstellen Sie mit Docker kostengünstig eine Flask-Entwicklungsumgebung
So löschen Sie einen Docker-Container
Hinweise zum Erstellen einer LAMP-Umgebung mit Vagrant und VirtulBox
Erstellen und testen Sie mit Docker in wenigen Minuten eine OpenCV- und Python-Umgebung
Ich möchte eine Pipfile erstellen und im Docker wiedergeben
Erfahren Sie, wie Sie Docker verwenden, indem Sie eine Umgebung für Django + MySQL erstellen
Lernverlauf zur Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Build Docker / Django / Nginx / MariaDB-Umgebung ~
Ich habe einen Docker-Container erstellt, um JUMAN ++, KNP, Python (für pyKNP) zu verwenden.
Verwenden Sie nach dem Kauf eines neuen Mac Pyenv + Poetry, um eine Python-Umgebung zu erstellen.
Erstellen Sie mit Laragon ganz einfach eine Entwicklungsumgebung
Debuggen eines Python-Programms durch Remoteverbindung mit einem Docker-Container in einer WSL2-Umgebung mit VS-Code
Methode zum Erstellen einer Python-Umgebung in Xcode 6
So erstellen Sie eine Sphinx-Übersetzungsumgebung
Ich wollte ein Jupyter-Notebook mit Docker in einer Pip-Umgebung (Opticspy) verwenden.
Ich möchte eine Python-Umgebung erstellen
Verwendung von PyCharm mit Glue-Entwicklungsendpunkten, die in VPC ausgeführt werden
Erstellen Sie mit Docker eine CentOS Linux 8-Umgebung und starten Sie Apache HTTP Server
Stellen Sie von Python aus eine Verbindung zu postgreSQL her und verwenden Sie gespeicherte Prozeduren in einer Schleife.
[Linux] Erstellen einer Jenkins-Umgebung mit Docker
Verwendung von Tensorflow unter Docker-Umgebung
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Einführung in Docker Erstellen einer Ubuntu-Umgebung in Ubuntu
Verwendung ist und == in Python
Erstellen Sie Linux in einer Windows-Umgebung. Schritte zum Installieren und Migrieren von Laradock
[Linux] Aufbau einer Docker-Umgebung mit Amazon Linux 2
Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung! [Versuch und Irrtum]
Verwenden Sie libsixel, um Sixel in Python auszugeben und das Matplotlib-Diagramm an das Terminal auszugeben.
Erstellen Sie eine Python-Umgebung, um die Theorie und Implementierung von Deep Learning zu erlernen
Erstellen Sie eine TensorFlow-Entwicklungsumgebung auf Amazon EC2 mit Befehlskopie