1.Dockerインストール
Raspberry Pi3上にDockerをインストールします。
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
起動テスト:Versionを確認し表示されれば正常にインストールできています。
pi@raspberrypi:~ $ sudo usermod -aG docker pi
pi@raspberrypi:~ $ docker version
Client:
Version: 18.06.3-ce
API version: 1.38
Go version: go1.10.3
Git commit: d7080c1
Built: Wed Feb 20 02:34:35 2019
OS/Arch: linux/arm
Experimental: false
Server:
Engine:
Version: 18.06.3-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: d7080c1
Built: Wed Feb 20 02:30:23 2019
OS/Arch: linux/arm
Experimental: false
(注)一般ユーザーでdocker versionを始めとしてdockerコマンドを実行できないことがあります。
その場合、一般ユーザーに権限を付加する必要があります。その方法はこちらをご覧ください。
2. Rasbian Image取得
下記のImage取得作業ができない場合は、一度logoutを行い、再度loginを行い再実行する。
pi@raspberrypi:~ $ sudo docker pull resin/rpi-raspbian //rasbianを使う場合はこちらを使う。
pi@raspberrypi:~ $ docker pull ubuntu:18.04 //ubuntuを使う場合はこちらを使う
RasbianのImageが取得できたかどうかの確認はdocker image lsで実施する。
pi@raspberrypi:~ $ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
resin/rpi-raspbian latest 28f1ee4d4d5a 8 months ago 128MB
RasbianのImageの削除はdocker rmi [イメージID]で行う。
pi@raspberrypi:~ $ docker rmi d7ac96770fef
Deleted: sha256:d7ac96770fefd605cf39c955951443dc2b0b8563cdad57db51821690a6be565a
3. Image取得からコンテナを作るコマンド
使用例
・Imageからコンテナをつくる。ポート90とポート3000を空ける場合の書き方
docker run -it --name rasp0 --publish 90:90 --publish 3000:3000 resin/rpi-raspbian:latest bash
・Imageからコンテナをつくる。ポート4000を空ける場合の書き方
docker run -it --name radiko --publish 4000:4000 ubuntu:18.04 bash
・コンテナを起動させる
docker start -ai rasp0
5. ホストとコンテナのファイル共有
ホストをファイル共有を行うコンテナを作る。複数ポートを空けたい時は、--publish 91:91 --publish 3000:3000とする。
「-m 4g」はコンテナに4Gのメモリを割り当てるという意味になる。
[ホーム] /hoem/pi/dcshare と[コンテナ内] /homeでファイルを共有する方法
構文
docker run -m 4g -v [共有を行うホームのディレクトリ]:[共有を行うコンテナのディレクトリ] -it --public xx:yy [イメージ] bash
docker run -m 4g -v /home/pi/dcshare:/home -it --publish 91:91 --publish 3000:3000 resin/rpi-raspbian:latest bash
実際に割り当てられたかどうかはfreeコマンドで確認できる。
root@b5f28ebc9bee:/# free
total used free shared buff/cache available
Mem: 4039632 163352 929732 281480 2946548 3600908
Swap: 1946040 0 1946040
4. 各種アプリのインストール
下記の作業はdocker上で使用する場合は、コンテナの中に入って行うこと。
4.1 Node.jsとnpmのインストール
こちらを参照してください。
5. container操作
pi@raspberrypi:~ $ docker container ls -a //すべてのコンテナを表示する
pi@raspberrypi:~ $ docker stop ebf7914c15d5 //IDを指定してコンテナを停止する
pi@raspberrypi:~ $ docker container rm ebf7914c15d5 //IDを指定してコンテナを削除する
pi@raspberrypi:~ $ docker rename [container_oldname] [container_newname] //コンテナの名前を変更する
pi@raspberrypi:~ $ docker start [コンテナ名] // 指定したコンテナをスタートする
pi@raspberrypi:~ $ docker exec -it [コンテナ名] bash // 指定したコンテナに入る
pi@raspberrypi:~ $ docker unpause CONTAINER //一時停止したコンテナを再開させる。
6. containerのネットワーク調査
pi@raspberrypi:~ $ docker container inspect --format '{{ .NetworkSettings.IPAddress }}' [container名] //コンテナに割り当てられたIPアドレスを取得する
pi@raspberrypi:~ $ docker container inspect [container名] //containerのネットワーク情報を取得する。
pi@raspberrypi:~ $ docker network ls //dockerネットワーク内の構成要素を取得する。
pi@raspberrypi:~ $ docker network connect [ネットワーク名] [コンテナ名] //指定したコンテナをネットワークに接続する
・docker container inspect [container名] containerのネットワーク情報を取得する。当該コンテナは、ネットワーク「bridge」と「my_app_net」に所属していることが分かる。
・docker container inspect [container名] //containerのネットワーク情報を取得する。
補足
PS C:\Users\fdfpy> docker network ls
NETWORK ID NAME DRIVER SCOPE
3f0b5fcd495c bridge bridge local
a08ced067d17 host host local
32c8ce9d2e91 none null local
7. Vue-cliでローカルサーバーを立ち上げ
こちらに従いVue-cliをインストールする。
gitのインストールが必要。インストール方法はこちらを参照してください。
Vue-cliをインストールしたディレクトリのアクセス権限が制限されている場合、下記のコマンドでアクセス権限を広げる。
pi@raspberrypi:~ $ sudo chmod o+rw [ディレクトリ名] -R //誰でもアクセスできるようにした。
コンテナ内にVue-Cliで立ち上げたローカルserverにアクセスしたい場合、config/index.jsのhost: '0.0.0.0'に変更する。(localhostではアクセスできない)
port: 91(例)
とする。
##注意
例えばhttp://xxx.xxx.xxx.xxx:91を入力するとVue.jsで構成したローカルサーバーにアクセスができ、Vue.jsのデモ画面が閲覧できる。
一度container内でローカルサーバーを立ち上げる→Ctrl +Z で強制終了した場合、指定したportが使用されたままになってしまい、再度ローカルサーバを立ち上げる場面にて「address already in used」と出力されてエラーになる。この問題を避けるには指定したportをkillで消去しなければいけない。
root@ed8e72dc832e:/home# apt-get install lsof / /lsofインストール
root@ed8e72dc832e:/home# lsof -i:90 //port 90を使用しているプロセスを表示する
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 1077 root 21u IPv4 994397 0t0 TCP localhost:91 (LISTEN)
root@ed8e72dc832e:/home# kill -9 1077 //プロセス番号 1077を削除する
windowsの場合(powershellでコマンドを実行すること)
C:\Users\fdfpy> netstat -nao|findstr "91"
プロトコル ローカル アドレス 外部アドレス 状態 PID
TCP 0.0.0.0:91 0.0.0.0:0 LISTENING 2196
C:\Users\fdfpy> taskkill /f /pid 2196
成功: PID 2196 のプロセスは強制終了されました。
node.jsでローカルサーバーを立ち上げたときにホストからアクセスできない場合の対応はこちら
8. コンテナからイメージファイルを作成する。
構文
docker commit [コンテナ名] [イメージ名]:[タグ]
pi@raspberrypi:~ $ docker commit ed8e72dc832e custom-rasp:rasp
sha256:e6e896468bece61e92ff30cb440efcfc3a56eed3bb986b47f162c9901ec3c01b
pi@raspberrypi:~ $ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
custom-rasp rasp e6e896468bec 6 minutes ago 601MB
<none> <none> d7ac96770fef About an hour ago 601MB
<none> <none> 3646b21d0ac3 About an hour ago 601MB
nginx latest 96fa93c111fd 2 weeks ago 97.6MB
resin/rpi-raspbian latest 28f1ee4d4d5a 8 months ago 128MB
docker/compose 1.9.0 78c3b8586e4a 2 years ago 59.5MB
9. イメージファイルを別のマシンに移す
こちらをご覧ください。
10. Docker hubにイメージをアップロードする
10-1 イメージファイルを決められた形式の名前に変更する
Docker Hubにイメージをアップロードする場合、Imageファイル名を指定した形式で決めないといけないです。
すでにImageファイル名がある場合、下記のコマンドでImageファイル名を変更する。
docker tag [従来のImageファイル名] [Docker Hubアカウント名]/[従来のImageファイル名]:latest
pi@raspberrypi:~ $ docker tag 3130485e78a3 fdfpy/3130485e78a3:latest
pi@raspberrypi:~ $ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
fdfpy/3130485e78a3 latest 3130485e78a3 27 minutes ago 1.68GB ←名前を変更した
stockget 20200410 3130485e78a3 27 minutes ago 1.68GB ←すでにあるImage
stockget 20200316 732b01dc576f 3 weeks ago 1.66GB
stockapri 20200224 e7b9ee411bf3 6 weeks ago 1.32GB
stockget v0 e18cee2f2da6 3 months ago 1.11GB
ubuntu 18.04 154a1aa86195 3 months ago 46.7MB
resin/rpi-raspbian latest 28f1ee4d4d5a 14 months ago 128MB
10-2 Docker Hubにログインする
pi@raspberrypi:~ $ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: fdfpy
Password:
WARNING! Your password will be stored unencrypted in /home/pi/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
10-3 Docker Imageファイルをアップロードする
pi@raspberrypi:~ $ docker push fdfpy/3130485e78a3:latest
The push refers to repository [docker.io/fdfpy/3130485e78a3]
f7dce5f67e14: Pushed
aaaaca953bab: Pushed
77f7899a8a08: Mounted from library/ubuntu
e22dd39d4c8f: Mounted from library/ubuntu
c193d85f5937: Mounted from library/ubuntu
1f1b075df34b: Mounted from library/ubuntu
latest: digest: sha256:cf651e8654168b43f9879df364bec2a02965045053d0d6ca4d6631d418864ae3 size: 1578
11 その他
bad marshal data (unknown type code)が出たら「find /usr -name '*.pyc' -delete」を実行したら正常に動作した