Rockchip · AI & Linux Hub

Linux und Boot

Rockchip Linux-Docker-Bereitstellung und SDK-Builds

Rockchip Linux-Docker-Bereitstellung und SDK-Builds — V1.0.4

· ArmSoM Editorial · Rockchip source documentation · 7 Min. Lesezeit

ArmSoM-Plattformreferenz anhand der bereitgestellten chinesischen und englischen Rockchip-Quellen. Konkrete Platine, SoC, SDK/BSP, Kernel und Peripherie einzeln abgleichen; keine allgemeine Unterstützung aller ArmSoM-Platinen. Quellbeispiele und Messwerte sind keine ArmSoM-Tests. Keine Befehle oder Hardwaretests ausgeführt.

Die Quelltabelle nennt ALL/ALL; Docker benötigt dennoch die beschriebenen Kernelfunktionen und Distributionskonfiguration.

Beide Originale V1.0.4, alle 7 Kapitel erhalten, keine separaten Abbildungen. Löschen, Privileged-Modus, Host-Mounts und Image-Pushes sind nicht ausgeführte Quellbeispiele. safe.directory "*" deaktiviert diese Eigentümer-Vertrauensprüfung für alle Repositories, überträgt aber kein Dateieigentum; §7.2 erklärt dies falsch und bleibt mit Hinweis erhalten. Konkrete vertrauenswürdige Pfade statt unbedacht des Wildcards prüfen. docker login -p legt das Passwort in Argumenten offen; historische Mirrors sind ungeprüft. Die Quellaussage zum Änderungsverlust beim Verlassen vermischt Container-Schreibschicht und Image: Verlassen allein löscht die Schicht nicht.

1. Übersicht

Docker ist eine quelloffene Container-Engine für Anwendungen. Anwendungen und Abhängigkeiten werden als leichter, portabler Linux-Container gebündelt. Laut Quelle erleichtert dies die effiziente Ressourcennutzung, eine einheitliche Laufzeitumgebung, kontinuierliche Veröffentlichung und Bereitstellung sowie spätere Portierung, Wartung und Erweiterung. Die folgende Tabelle enthält Prüfungen der Quelle, keine ArmSoM-Tests.

Betriebssystemversion Docker-Version Image laden Firmware-Build
ubuntu 22.04 24.0.5 bestanden bestanden
ubuntu 21.10 20.10.12 bestanden bestanden
ubuntu 21.04 20.10.7 bestanden bestanden
ubuntu 18.04 20.10.7 bestanden bestanden
fedora35 20.10.12 bestanden NR (nicht ausgeführt)

2. Installation

2.1 Debian-basierte Distributionen: Debian, Ubuntu

sudo apt-get install docker.io

2.2 Red-Hat-basierte Distributionen: Redhat, Fedora, CentOS

sudo yum install docker
sudo dnf install docker

3. Verwendung

3.1 Image aus einer Dockerfile erstellen

# $name:$tag Image name: tag name
# Dockfile is built based on the context, the built directory must contain Dockerfile
# $dockerfile specifies the Dockerfile name, it is PATH/Dockerfile by default
# $dockerfile_dir Dockerfile is located at PATH
sudo docker build -f $dockerfile -t $name:$tag $dockerfile_dir

3.2 Image oder Container löschen

# $imageID
sudo docker rmi $imageID

# $containerID
sudo docker rm $containerID

3.3 Image oder Container umbenennen

# $imageID: Image ID
# $name:$tag: image name:tag name
sudo docker tag $imageID $name:$tag

# $containerID container ID
# $name container name
sudo docker rename $containerID $name

3.4 Images und Container anzeigen

sudo docker image ls

sudo docker container ls

3.5 Docker-Umgebung starten

# Run Docker environment
# --privileged: privileged mode
# -it: means enabling interactive mode, /bin/bash: means interactive mode
# -v $host_dir:$docker_dir: maps the host directory into Docker
# -p $host_port:$docker_port: maps the host port into Docker
# -u $docker_user: specifies to use the user in Docker to log in
# -w $cwd_dir: switches to the path inside the container
# -d --detach: set background running mode

# Run the specified image
sudo docker run --privileged -it -u $docker_user -v $host_dir:$docker_dir $imageID /bin/bash

# Run the specified container
sudo docker exec -it -w $cwd_dir $containerID /bin/bash

3.6 Images verwalten

# Login to dockerhub account
sudo docker login -u $username -p $password

# Pull the dockerhub image
sudo docker image pull $imageID

# Push image to dockerhub
sudo docker image push $username/$imagename

# Export local image (tar archive file)
sudo docker image save $name:$tag -o ${dockerimage.tar}

# Import local image (tar archive file)
sudo docker image load -i ${dockerimage.tar}

# Change the local immage and commit
# -m commit information
# -a the author of the commit
# $containerID: the container ID which is changed
# $new_name:$new_tag: commited image name tag
sudo docker commit -m $commit_message -a $author $containerID $new_name:$new_tag

4. SDK mit Docker bauen

4.1 Docker-Image erstellen

4.1.1 Anhand einer Dockerfile bauen

# Refer to the Dockerfile provided by this document
# Suppose Dockerfile is in /home/docker/Dockerfile
cd /home/docker
sudo docker build -t docker_rk:latest .

4.1.2 Bereitgestelltes Image verwenden

Das fertige Image ist über den Quellverweis docker im Linkabschnitt verfügbar.

4.2 SDK mithilfe von Docker bauen

# Suppose the SDK is located at /home/user/sdk
# Maps the SDK to the Docker image and enter the image
sudo docker run --privileged -it -u rk -v /home/user/sdk:/home/rk/sdk docker_rk:latest /bin/bash

# Switch to the path in Docker, the compilation method can be check through build.sh -h
cd /home/rk/sdk
./build.sh -h

4.3 Docker-Image aktualisieren

# After exiting the Docker image, all modifications except the mapping directory will not be saved. If you want to save the corresponding modifications, the Docker image needs to be updated
# Supports the container instantiated by this image is rk@ecbbcdc7e5ca:/$
# Follow the command below to update the Docker image
sudo docker commit -m "update" ecbbcdc7e5ca docker_rk:latest

5. Docker auf der Rockchip-Plattform ausführen

5.1 Kernelkonfiguration

Der Kernel benötigt cgroups, namespace, netfilter, overlayfs und weitere erforderliche Funktionen. Prüfen, ob die Konfiguration die Docker-Anforderungen erfüllt. Den Host mit /usr/share/docker.io/contrib/check-config.sh prüfen; falls das Skript fehlt, check-config.sh über den Quellverweis beziehen. Die Quelle bietet außerdem eine allgemeine Docker-Konfiguration, die folgender Befehl aktiviert:

make ARCH=arm64 rockchip_linux_defconfig rockchip_linux_docker.config

5.2 Buildroot-Konfiguration

Docker-bezogene Buildroot-Optionen sind standardmäßig deaktiviert. Bei Bedarf folgende Optionen einschalten:

BR2_PACKAGE_CGROUPFS_MOUNT=y
BR2_PACKAGE_DOCKER_ENGINE=y
BR2_PACKAGE_DOCKER_ENGINE_EXPERIMENTAL=y
BR2_PACKAGE_DOCKER_ENGINE_STATIC_CLIENT=y
BR2_PACKAGE_DOCKER_ENGINE_DRIVER_BTRFS=y
BR2_PACKAGE_DOCKER_ENGINE_DRIVER_DEVICEMAPPER=y
BR2_PACKAGE_DOCKER_ENGINE_DRIVER_VFS=y

5.3 Debian-Konfiguration

Docker lässt sich direkt unter Debian installieren. In der beschriebenen Quellumgebung verwendet Debian standardmäßig iptables-nft, Docker dagegen iptables-legacy. Deshalb empfiehlt die Quelle den Wechsel auf legacy; die Rückschaltung auf nft ist ebenfalls angegeben:

# Using iptables-legacy
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

# Using iptables-nft
update-alternatives --set iptables /usr/sbin/iptables-nft
update-alternatives --set ip6tables /usr/sbin/ip6tables-nft

6. Dockerfile-Referenz

FROM ubuntu:22.04
RUN \
# use mirror sources
echo "deb http://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse" \
> /etc/apt/sources.list \
# install packages
&& DEBIAN_FRONTEND=noninteractive apt-get update -y \
&& DEBIAN_FRONTEND=noninteractive apt-get upgrade -y \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
bc binfmt-support bison bsdmainutils build-essential chrpath cmake cpio curl device-tree-compiler diffstat \
expat expect fdisk file flex gawk git iputils-ping libegl1-mesa libelf-dev libgmp-dev libgucharmap-2-90-dev \
liblz4-tool libmpc-dev libncurses-dev libsdl1.2-dev libssl-dev locales live-build mesa-common-dev net-tools \
patchelf python2 python2-dev python3 python-is-python3 python3-git python3-jinja2 python3-pexpect python3-pip \
python3-pyelftools python3-subunit qemu-user-static repo rsync ssh strace swig vim socat sudo texinfo time tree \
unzip wget \
# add user in docker
&& useradd -c 'rk user' -m -d /home/rk -s /bin/bash rk && usermod -a -G sudo rk \
&& sed -i -e '/\%sudo\tALL=(ALL:ALL) ALL/ c \%sudo ALL=(ALL) NOPASSWD: ALL' /etc/sudoers \
&& echo "docker image build complete"
# delete useless package and cache if need
#&& apt-get autoclean && apt-get autoremove && rm -rf /var/lib/apt/lists/*

7. Häufige Fragen

7.1 Error Pulling Image Configuration: Get Https:……Read: Connection Reset by Peer

Das aktuelle Netzwerk erreicht das offizielle Docker-Image-Repository nicht. Die Quelle schlägt die folgende Konfiguration eines chinesischen Docker-Mirrors vor. Die Verfügbarkeit dieses historischen Mirrors wurde hier nicht geprüft.

# Add the following content to /etc/docker/daemon.json
{
   "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}

7.2 Error.GitError: …… rev-parse: fatal: detected dubious ownership in repository at

Das Repository gehört üblicherweise dem Host-Benutzer, der es heruntergeladen hat. Beim Bauen in Docker führt der abweichende Eigentümer im Container zum Fehler. Die Quelle beschreibt den folgenden Befehl als Rechteübertragung für alle Repositories und warnt, dass bei Übertragung des Eigentums an den Containerbenutzer der Host-Benutzer seine Rechte verliert. Diese Quellenbeschreibung bleibt nachvollziehbar erhalten, ist technisch aber unzutreffend: safe.directory ändert keinen Eigentümer; siehe Hinweis am Artikelanfang.

git config --global --add safe.directory "*"

Quellverweise

ArmSoM Docs

https://git-scm.com/docs/git-config#Documentation/git-config.txt-safedirectory

https://console.zbox.filez.com/l/boc1y7

https://github.com/moby/moby/blob/master/contrib/check-config.sh

Dieses Thema entdecken → · Lernpfade →