LoginSignup
1
1

More than 1 year has passed since last update.

Dockerコマンド

Last updated at Posted at 2019-10-14

1.Dockerインストール

Raspberry Pi3上にDockerをインストールします。

/home/pi
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

起動テスト:Versionを確認し表示されれば正常にインストールできています。

/home/pi
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を行い再実行する。

/home/pi
pi@raspberrypi:~ $ sudo docker pull resin/rpi-raspbian  //rasbianを使う場合はこちらを使う。
pi@raspberrypi:~ $ docker pull ubuntu:18.04 //ubuntuを使う場合はこちらを使う

RasbianのImageが取得できたかどうかの確認はdocker image lsで実施する。

/home/pi
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]で行う。

/home/pi
pi@raspberrypi:~ $ docker rmi d7ac96770fef
Deleted: sha256:d7ac96770fefd605cf39c955951443dc2b0b8563cdad57db51821690a6be565a

3. Image取得からコンテナを作るコマンド

・フォーマット
1.JPG

使用例
・Imageからコンテナをつくる。ポート90とポート3000を空ける場合の書き方

/home/pi
docker run -it --name rasp0 --publish 90:90 --publish 3000:3000 resin/rpi-raspbian:latest bash

・Imageからコンテナをつくる。ポート4000を空ける場合の書き方

/home/pi
docker run -it --name radiko --publish 4000:4000 ubuntu:18.04 bash

・コンテナを起動させる

/home/pi
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操作

/home/pi
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のネットワーク調査

/home/pi
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」に所属していることが分かる。
2.JPG

・docker container inspect [container名] //containerのネットワーク情報を取得する。
3.JPG

補足
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(例)
とする。
4.JPG

##注意

例えば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」を実行したら正常に動作した

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1