自宅サーバがなくなって から、なんとなく物足りなくなってきたので、RaspberryPIにDockerを入れてうんちゃかする所までのメモ
環境
SDカードを初期化してRaspbianを入れる Download Raspbian for Raspberry Pi
RaspbianのバージョンがDebian9系に上がってたのでいったんSDカードを初期化。こちらの記事 を参考に、Win32DiskImagerというのを使ってWindowsマシンで作業しました
セットアップ: 日本人設定
(2021.02.17追記) SSH接続に関しては新しい記事も書いています → Raspberry PIにモニタ無しでSSHするメモ buster版 | 7me
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 // 必要そうな物入れる $ sudo apt-get update $ sudo apt-get install -y vim git locales // その他個人的に入れた物 $ sudo apt-get install -y automake libncurses5 libncurses5-dev libncursesw5 libncursesw5-dev libreadline-dev pkg-config fbterm ttf-sazanami-gothic ngrok-server // キーマップが異なるので日本仕様に(適当なメーカを選んで、途中で「OADG 109A」という文字列を含む選択肢が見えたらそれを選びます) $ sudo dpkg-reconfigure keyboard-configuration // 言語設定 $ sudo localedef -f UTF-8 -i ja_JP ja_JP $ sudo localectl set-locale LANG=ja_JP.utf8 // 時刻設定 $ sudo timedatectl set-timezone Asia/Tokyo // 1回リブート $ sudo reboot
セットアップ: 無線LAN設定 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 // パスフレーズの暗号化 $ sudo wpa_passphrase [SSID] [パスフレーズ] network={ ssid="[SSID]" #psk="[パスフレーズ]" psk=[暗号化されたパスフレーズ] } // 表示された内容を元に、以下のファイルを編集 $ sudo vim /etc/wpa_supplicant/wpa_supplicant.conf country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="[SSID]" #psk="[パスフレーズ]" psk=[暗号化されたパスフレーズ] key_mgmt=WPA-PSK pairwise=CCMP group=CCMP priority=2 // networkを複数設定した場合は、priorityの大きい設定から優先で接続 }
1 2 3 4 5 // interfaces.dにwlan0ファイルを作成 $ cat /etc/network/interfaces.d/wlan0 allow-hotplug wlan0 iface wlan0 inet manual wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
1 2 3 4 5 // 1回リスタート $ sudo systemctl restart networking $ ip addr (wlan0にIPが振られてればOK)
セットアップ: SSH 特に外に公開するわけでもないので、普通にパスワード認証で設定
1 2 3 $ cat /etc/ssh//sshd_config | grep Password PasswordAuthentication yes PermitEmptyPasswords no
1 2 3 4 // 自動起動になってなかったので $ sudo systemctl enable ssh $ sudo systemctl start ssh
インストール: docker Get Docker CE for Debian | Docker Documentation
最初、なんとなしに手順通り進めていたら行き詰ったので、よく見返したら以下の記述を見落としていました
Raspbian users cannot use this method! For Raspbian, installing using the repository is not yet supported. You must instead use the convenience script.
という事なので、以下の手順でget-docker.sh
を使います
Get Docker CE for Debian | Docker Documentation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 $ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh // ユーザ「pi」を「docker」グループに $ sudo usermod -aG docker pi // 1回ログインし直す $ exit // dockerグループに所属しているか確認 $ id uid=1000(pi) gid=1000(pi) groups=1000(pi),996(docker),997(gpio),998(i2c),999(spi) $ docker version Client: Version: 18.01.0-ce API version: 1.35 Go version: go1.9.2 Git commit: 03596f5 Built: Wed Jan 10 20:25:15 2018 OS/Arch: linux/arm Experimental: false Orchestrator: swarm Server: Engine: Version: 18.01.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: 03596f5 Built: Wed Jan 10 20:21:22 2018 OS/Arch: linux/arm Experimental: false
インストール: docker-compose いつも通り、Releases · docker/compose から持ってきたらエラーになりました
1 2 $ docker-compose -bash: docker-compose: バイナリファイルを実行できません: 実行形式エラー
Raspbianが32bitOSという所に起因している模様
1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ lscpu Architecture: armv7l Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1 Model: 5 Model name: ARMv7 Processor rev 5 (v7l) CPU max MHz: 900.0000 CPU min MHz: 600.0000 BogoMIPS: 57.60 Flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
こちらの記事 を参考に、自前でビルドしました(※ビルドには2時間ぐらい かかりました)
1 2 3 4 5 6 7 8 9 10 11 12 $ git clone https://github.com/docker/compose.git $ cd compose/ $ docker build -t docker-compose:armhf -f Dockerfile.armhf . $ docker run --rm --entrypoint="script/build/linux-entrypoint" -v $(pwd)/dist:/code/dist -v $(pwd)/.git:/code/.git "docker-compose:armhf" $ cd dist $ sudo cp docker-compose-Linux-armv7l /usr/local/sbin/docker-compose $ docker-compose version docker-compose version 1.19.0dev, build 520fad3 docker-py version: 2.7.0 CPython version: 2.7.13 OpenSSL version: OpenSSL 1.0.1t 3 May 2016
マウント: USBメモリ Amazon | 64GB SanDisk サンディスク USBメモリー 親指サイズの小型設計 Ultra Fit USB3.0対応
Dockerのデフォルトが/var/lib/docker
になってるので、↑のUSBメモリを/mnt/sandisk/
にマウントして、Dockerがそこを使うように設定します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ lsusb Bus 001 Device 005: ID 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS] Bus 001 Device 004: ID 0781:5583 SanDisk Corp. Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub $ sudo fdisk -l Disk /dev/sda: 59.6 GiB, 64023789568 bytes, 125046464 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x1c633a3b // パーティションを切る $ sudo fdisk /dev/sda // フォーマット $ sudo mkfs.ext4 /dev/sda1
fstabまわりは、何か問題 がありそうな感じだったので、単純な@reboot
に書くようにしました。Dockerの起動順序に影響しないか心配でしたが、特に問題なさそう
1 2 3 4 5 6 7 8 9 $ sudo crontab -l | grep mount @reboot mount -t ext4 /dev/sda1 /mnt/sandisk/ // 1回リブート $ sudo reboot // 確認 $ df -h | grep sda1 /dev/sda1 59G 6.4G 50G 12% /mnt/sandisk
設定: DockerがUSBメモリの領域を使うようにする 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 $ sudo systemctl stop docker // 「-g /mnt/sandisk/docker」をExecStartに加える $ sudo cat /lib/systemd/system/docker.service | grep ExecStart ExecStart=/usr/bin/dockerd -H fd:// -g /mnt/sandisk/docker // ディレクトリ作成 $ sudo mkdir -p /mnt/sandisk/docker // 設定反映して起動 $ sudo systemctl daemon-reload $ sudo systemctl start docker // 確認 $ sudo ls -l /mnt/sandisk/docker/ 合計 84 drwx------ 2 root root 4096 1月 27 14:51 builder drwx--x--x 3 root root 4096 1月 27 14:51 containerd drwx------ 12 root root 4096 1月 27 17:48 containers drwx------ 3 root root 4096 1月 27 14:51 image drwxr-x--- 3 root root 4096 1月 27 14:51 network drwx------ 321 root root 36864 1月 27 17:48 overlay2 drwx------ 4 root root 4096 1月 27 14:51 plugins drwx------ 2 root root 4096 1月 27 14:54 runtimes drwx------ 2 root root 4096 1月 27 14:51 swarm drwx------ 2 root root 4096 1月 27 17:45 tmp drwx------ 2 root root 4096 1月 27 14:51 trust drwx------ 3 root root 4096 1月 27 17:48 volumes
以上です。特に何やるかは決めてないけどやっぱlinuxいじりは楽しい