先の例ではWind River Linux Distroのfull imageを利用しました。LATを使うことにより、Wind River Linux Distroのminimal imageをベースとしながらも、コンテナを実行できるDockerを備えた最小構成のLinuxディストリビューションを作成することも可能です。Linux Assembly Tools(LAT)の詳細な利用方法は、WIND RIVER LINUX DISTRO DEVELOPER'S GUIDE, LTS 22をご覧ください。
Linux Assembly Tools(LAT)の詳細な利用方法
「WIND RIVER LINUX DISTRO DEVELOPER'S GUIDE, LTS 22(日本語版)」
図2:Wind River LinuxのLATを使って、コンテナを実行できる最小構成のLinuxディストリビューションを作成する
まず、ホストPCにSDKをセットアップして、LATをインストールします。次にappsdk examplesyamlコマンドを実行し、最小構成のLinuxディストリビューションを作成するためのyaml設定ファイル「core-image-minimal-bcm-2xxx-rpi4.yaml」を入手します。その後、LinuxディストリビューションにDockerをインストールするために、yaml設定ファイルのpackagesにdockerを追記します。最後に、appsdk genimageコマンドを実行しLinuxディストリビューションを作成します。作成されたLinuxディストリビューションでコンテナを実行することができます。
ホストPC上での操作
# appsdk exampleyamls
$ mkdir mkimg
$ cd mkimg
$ appsdk exampleyamls
$ vi exampleyamls/core-image-minimal-bcm-2xxx-rpi4.yaml
name: core-image-minimal
machine: bcm-2xxx-rpi4
image_type:
- ostree-repo
- ustart
…
packages:
- alsa-utils
- ca-certificates
- crda
- glib-networking
…
- docker
$ appsdk genimage exampleyamls/core-image-minimal-bcm-2xxx-rpi4.yaml
$ cd deploy
$ qemu-img create -f raw ./img 8G
$ zcat core-image-minimal-bcm-2xxx-rpi4.ustart.img.gz | sudo dd of=./img conv=notrunc
$ sudo su
# qemu-system-aarch64 -machine virt -cpu cortex-a57 -netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=br0,mac=00:16:3e:3f:a3:9c -m 512 -bios qemu-u-boot-bcm-2xxx-rpi4.bin -device virtio-gpu-pci -serial stdio -device qemu-xhci -device usb-tablet -device usb-kbd -drive id=disk0,file=./img,if=none,format=raw -device virtio-blk-device,drive=disk0
Wind River Linux上での操作
bcm-2xxx-rpi4 login: root
root@bcm-2xxx-rpi4:~#
# ip addr
1: lo: ...
2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:16:3e:3f:a3:9c brd ff:ff:ff:ff:ff:ff
inet 192.168.100.16/24 brd 192.168.100.255 scope global dynamic noprefixroute eth0
valid_lft 604660sec preferred_lft 529060sec
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
# docker network create -d macvlan --subnet=192.168.100.0/24 --gateway=192.168.100.1 -o parent=eth0 corplan
fc835b57c368c2a1c0c24ca60511230ef3ca68ed0e9a5b71a77d320ed09ecd52
# docker network ls
NETWORK ID NAME DRIVER SCOPE
971273bb535b bridge bridge local
fc835b57c368 corplan macvlan local
24ad33065d23 host host local
b72bf599a528 none null local
# docker pull windriver/wrlx-image
# docker run -d -it --network corplan --ip 192.168.100.101 --name wrlexec windriver/wrlx-image /bin/bash
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d4a35aea5ab windriver/wrlx-image "/bin/bash" 12 seconds ago Up 3 seconds
# docker attach 5d4a35aea5ab
コンテナ上での操作
sh-5.1# ip addr
1: lo: mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: sit0@NONE: mtu 1480 qdisc noop qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
5: eth0@sit0: mtu 1500 qdisc noqueue
link/ether 02:42:c0:a8:64:65 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.101/24 brd 192.168.100.255 scope global eth0
valid_lft forever preferred_lft forever
「Ctrl+P」「Ctrl+Q」でDockerコンテナからログアウトする
Wind River Linux上での操作
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d4a35aea5ab windriver/wrlx-image "/bin/bash" About a minute ago Up About a minute
# docker stop 5d4a35aea5ab
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d4a35aea5ab windriver/wrlx-image "/bin/bash" 2 minutes ago Exited (137) 6 seconds ago wrlexec
# docker rm wrlexec
# docker rmi windriver/wrlx-image