
こんな感じのことやります。
手順
1.dockerとdocker-composeのインストール
本ページでは割愛します。🙇♂️下記ページでインストール方法を紹介しています。
RaspberryPi4にdockerとdocker-composeをインストールする。
2.Dockerネットワークの作成
※全てroot権限で実行しています。
dockerコンテナと共有して使用したい、ラズパイの物理インターフェースを確認しておきます。
ifconfig
root@raspberrypi:~# ifconfig
~省略~
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
~省略~
root@raspberrypi:~#
私の環境ではeth0を使用します。
このインターフェースにはIPアドレス・サブネットマスク・デフォルトゲートウェイが事前に設定してあります。
Dockerネットワーク作成
docker network create -d macvlan --subnet=192.168.2.0/24 -o parent=eth0 rasnet
ここではrasnetという名前のDockerネットワークを作成します
subnetはラズパイのインターフェースと同じネットワークアドレスを設定する。
parentは先ほど上で確認したインターフェースを指定する。
Dockerネットワーク確認
docker network ls
root@raspberrypi:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
eae38606a114 bridge bridge local
dc9da487ee72 host host local
c5b6aff2ebb7 none null local
ea22f1da8fe0 rasnet macvlan local これ
root@raspberrypi:~#
問題がなければ指定した名前のネットワークが表示されます。
NETWORK IDはランダム生成なのでここでは気にしなくてオッケーです。
3.docker-compose.ymlとDockerfileの作成
作業フォルダ作成&移動
mkdir ubuntu
cd ubuntu
docker-compose.yml作成
vi docker-compose.yml
version: '3'
services:
ubuntu:
build: "./"
tty: true
ports:
- 80:80
- 22:22/tcp
networks:
rasnet:
ipv4_address: 192.168.2.11
privileged: true
command: /sbin/init
networks:
rasnet:
external: true
以下、設定内容の軽い解説
tty: true
コンテナを動作させ続ける設定(これがないとubuntuコンテナが起動直後に落ちてしまう)
ports:
使用ポートの指定
今回は例としてtcp/udpの80番と、SSH用にtcp22番を設定
networks:
rasnet:
ipv4_address: 192.168.2.11
コンテナに設定するIPアドレスの指定
ラズパイのインターフェースと同セグメントかつIPアドレスが被らないように設定
command: /sbin/init
/sbin/initの起動設定
今回はUbuntuコンテナ上のプロセスをsystemdでいじりたいので入れておく
privileged: true
Ubuntuコンテナがあらゆる動作をできるよう権限を与える設定
セキュリティ的にはあまり良くないみたい🤦♀️
Dockerfile作成
vi Dockerfile
#イメージの元となるUbuntuイメージダウンロード
FROM arm32v7/ubuntu:latest
#元のubuntuイメージに追加したいものを入れておく
RUN apt-get update
RUN apt-get install systemd -y
RUN apt-get install iputils-ping net-tools -y
RUN apt-get install openssh-server -y
RUN apt-get install sudo -y
#ユーザ作成 USER=ユーザ名 PASSWORD=パスワード
ARG UID=1001
ARG USER=user
ARG PASSWORD=pass
RUN useradd -m --uid ${UID} --groups sudo ${USER} && \
echo ${USER}:${PASSWORD} | chpasswd
RUN usermod -s /bin/bash ${USER}
Dockerfile docker-compose.yml
ファイル2つが出来上がった状態
4.イメージ&コンテナ作成とSSH接続
先ほど作成した2つのファイルが置いてあるディレクトリ上でdocker-composeコマンドを実行します。
イメージ作成
docker-compose build --no-cache
完了まで2~3分くらいかかるので待機します。
イメージ確認
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu_ubuntu latest e7261655d20e 36 minutes ago 189MB
arm32v7/ubuntu latest b7071f5bf0df 6 days ago 55.3MB
2つのイメージが出来上がっていると思います。
上がsshインストールやユーザ作成を行った直後のイメージ
下が、上の元となったダウンロードしたままのイメージ
コンテナ作成
docker-compose up -d
うまくいけば「done」と表示される。
コンテナ確認
docker ps
root@raspberrypi:~/docker/ubuntu# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
549ab700bd23 ubuntu_ubuntu "/sbin/init" 44 minutes ago Up 44 minutes ubuntu_ubuntu_1
コンテナ完成
SSH接続確認
SSHで接続確認します。

キタ━━━━(゚∀゚)━━━━!!
最初の図と違ってSSHクライアントのIPが30になってるのはご容赦ください。
お疲れさまでした。
ご指摘・ご質問等あればコメント欄にぜひお願いします。🙇♀️