Ubuntu 18.04 LTS（arm64）に Docker ＆ docker-compose をインストールする方法

# 1. はじめに
今回は、自分自身への備忘録を兼ねて、Raspberry Pi にインストールしたUbuntu 18.04 LTS（arm64）上に Docker ＆ docker-compose をインストールする方法を、お伝えしたいと思います。

- 参考：[Raspberry Pi 3で64ビット版Ubuntu 19.10を起動してみました](https://denor.jp/raspberry-pi-3%E3%81%A764%E3%83%93%E3%83%83%E3%83%88%E7%89%88ubuntu-19-10%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F)
- 参考：[ラズパイ上のUbuntuにDokcer一式をインストール](https://www.officeiko.co.jp/post/tech-raspberry-pi-4-ubuntu-docker/)

# 2. この記事を読んでできること
- Ubuntu 18.04 LTS（arm64）で Docker ＆ docker-compose を使えるようになる。

# 3. 注意事項
- 特になし。

# 4. 必要なもの
- Ubuntu 18.04 LTS（arm64）が動作しているホストOS環境（この記事では Raspberry Pi3B ＋ Ubuntu 18.04 LTS（arm64）を想定）
- SDカード（16GB以上推奨）
- インターネット環境（有線LAN推奨）
- キーボード
- HDMIディスプレイ

# 5. Ubuntu 18.04 LTS（arm64）の入手
- 以下のURLから、OSイメージファイル（[Raspberry Pi 3 (64-bit ARM) preinstalled server image](http://cdimage.ubuntu.com/ubuntu/releases/18.04.4/release/ubuntu-18.04.4-preinstalled-server-arm64+raspi3.img.xz)）をダウンロードする。

```plaintext:ダウンロードサイトURL
http://cdimage.ubuntu.com/ubuntu/releases/18.04.4/release/
```

参考：この記事作成時のファイルバージョン：[ubuntu-18.04.4-preinstalled-server-arm64+raspi3.img.xz](http://cdimage.ubuntu.com/ubuntu/releases/18.04.4/release/ubuntu-18.04.4-preinstalled-server-arm64+raspi3.img.xz)

参考：[ARM-RaspberryPi](https://wiki.ubuntu.com/ARM/RaspberryPi)

# 6. microSDカードのフォーマット
- [SD Formatter for Windows](https://www.sdcard.org/jp/downloads/formatter/index.html)などのソフトを用いて、使用するmicroSDカードをフォーマットする。
- フォーマット形式は「FAT32」を選択することを推奨します。

- 参考：参考画面
![fomatter.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240522/94af63eb-346c-229e-d908-886b65a9339b.png)

# 7. microSDカードへOSイメージの書き込み（所要時間：5分）
- [Etcher](https://www.balena.io/etcher/)などのソフトを用いて、使用するmicroSDカードへOSイメージを書き込む。
- Etcherは、圧縮されたままのOSイメージ（拡張子が.img等）を解凍せずにそのまま扱えておすすめです。

- 参考：Etcher起動時の画面
![etcher_1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240522/4d57f18a-994c-eb48-9ddf-f70545395fe6.png)

# 8. microSDカード の完成
- 完成した microSDカード を、PCからおもむろに抜き取る。

# 9. Ubuntu 18.04 LTS（arm64）の起動
- Raspberry PiにmicroSDカードを挿入し、Ubuntu 18.04 LTS（arm64）を起動する。

```plaintext:デフォルトユーザ名／パスワード
ユーザ名　：ubuntu
パスワード：ubuntu
```

# 10. dockerおよびdocker-composeのインストール

```plaintext:コマンドプロンプト
// 新しいパスワードの設定

// IPアドレスの確認
$ ip a

// Windows10などからSSH接続

// パッケージのアップデート
$ sudo apt update
$ sudo apt -y upgrade

// 空き容量の確認
$ df -h

// ラズパイ用PPAの追加
$ sudo add-apt-repository ppa:ubuntu-raspi2/ppa
ENTER

$ sudo apt-get update

$ sudo groupadd -f --system gpio
$ sudo groupadd -f --system i2c
$ sudo groupadd -f --system input
$ sudo groupadd -f --system spi

// パッケージのアップデート
$ sudo apt update

// 必要パッケージをインストール
$ sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

// Dockerの公式GPG keyを追加
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

// repository( stable ) を追加
$ sudo add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

// パッケージのアップデート
$ sudo apt update

// docker をインストール
$ sudo apt install -y docker-ce

// Dockerステータスの確認
$ sudo systemctl status docker
q

// Dockerプロセスの確認
$ sudo docker ps

// dockerグループの確認
$ cat /etc/group | grep docker
docker:x:996:

// dockerグループの追加
$ sudo gpasswd -a ubuntu docker

// dockerグループの確認
$ cat /etc/group | grep docker
docker:x:996:ubuntu

// ソケットファイルのパーミッションの確認
$ ls -la /var/run/docker.sock

// ソケットファイルのパーミッションを変更
$ sudo chmod 666 /var/run/docker.sock

// Dockerプロセスの確認
$ docker ps

// python3のインストール
$ sudo apt -y install python3-pip

// 必要ライブラリのインストール
$ sudo apt install libffi-dev
$ sudo apt install libssl-dev

// docker-composeの入手
$ sudo pip3 install -U docker-compose

// docker-composeの確認
$  which docker-compose
/usr/local/bin/docker-compose

// dockerのバージョン確認
# docker -v
Docker version 19.03.6, build 369ce74

// docker-composeのバージョン確認
$  docker-compose -v
docker-compose version 1.25.4, build unknown
```

# 11. dockerの動作確認

```plaintext:コマンドプロンプト
// dockerの実行（ハローワールド）
# docker run --rm hello-world
```

# 12. docker-composeの動作確認
- docker-compose.ymlファイルを作成し、ファイル保存する。

```yml:docker-compose.yml
version: "2"

services:
  app:
    image: hello-world

```

- docker-composeを実行する。

```shell:コマンドライン
// docker-compose.ymlファイルが存在することを事前確認
# ls
docker-compose.yml

// docker-composeを実行
# sudo docker-compose up
```

# 13. 参考：Dockerコマンド、docker-composeコマンド
- [（備忘録）Dockerコマンド](https://qiita.com/zono_0/items/7a25d283cd4b09d6ffb0)

# 14. おわりに
いかがでしたでしょうか？意外と簡単にDocker ＆ docker-composeをはじめることができたのではないかなと思います。
今回の記事が、みなさまの学習の参考になれば幸いです。

2020/02/23 TAKAHIRO NISHIZONO

# 15. 追記その1：コマンドでのWiFiの設定

```plaintext:コマンドプロンプト
// NetworkManagerをインストール
$ sudo apt -y install network-manager

// OS再起動
$ sudo shutdown -r now

// IPアドレスの確認
$ ip a

// サービスの確認
$ sudo service NetworkManager status
q

// wifiリストの確認（SSID名を確認する）
$ nmcli device wifi list

// wifiの接続
$ sudo nmcli device wifi connect 'SSID名' password 'WIFIパスワード' ifname wlan0

// IPアドレスの確認
$ ip a

// 補足：テキストユーザインターフェースでのWifi接続設定の場合のコマンド
$ nmtui
```

# 16. 追記その2：コマンドでのホスト名の設定変更

```plaintext:コマンドプロンプト
// preserve_hostnameをtrueに変更
$ sudo vi /etc/cloud/cloud.cfg

＝＝＝
#preserve_hostname: false
preserve_hostname: true
＝＝＝

// ホスト名を設定（デフォルトのubuntu から raspberrypi3 に変更）
$ sudo hostnamectl set-hostname raspberrypi3

// ubuntuのホスト名解決のためだけにsambaを入れる（sambaは使わない）
// これで、WindowsPC側からホスト名で接続できるようになるはず（まれに接続できないこともある）
$ sudo apt-get -y install samba

// OS再起動
$ sudo reboot
```