RaspberryPi4上に同セグIP指定のUbuntuコンテナを作成してSSHで接続する。

こんな感じのことやります。

手順

  1. dockerとdocker-composeのインストール
  2. Dockerネットワークの作成
  3. docker-compose.ymlとDockerfileの作成
  4. イメージ&コンテナ作成とSSH接続

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になってるのはご容赦ください。

お疲れさまでした。

ご指摘・ご質問等あればコメント欄にぜひお願いします。🙇‍♀️

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です