Dockerをどっかーらどうやって使えばいいんでしょう。NPO TOPPERS/FMP on RaspberryPi with Macintosh編 ５つの関門。「名古屋のIoTは名古屋のOSで」。docker (37) 

# 第1章　Dockerをどっかーらどうやって使えばいいんでしょう。

<この項は書きかけです。順次追記します。>
## 1.1 Raspberry Pi
ここでは、Raspberry Pi3を使っています。RaspbianのSDカードがあれば、そこにフォルダを作り、Raspbianを退避させてTOPPERS/HRPをコピーして使います。

第一段階：クロスコンパイル
第二段階：シリアルでモニタ
USB-シリアルピンのケーブルがあればモニタで確認できます。
https://www.amazon.co.jp/dp/B01KZWJRRE/
海外だったので２箇所に１０本づつ発注。到着日時が同時だったのには驚き。
http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41

第三段階：デバッガでデバッグ（追記予定）

Raspberry Pi2, Raspberry Piを使ったTOPPERS/SSPの動かし方は、
https://github.com/alvstakahashi

## 1.2 TOPPERS/FMP 
https://www.toppers.jp/fmp-e-download.html
のRaspberry PI版を Macintoshで生成するための方法です。
TOPPERSはオープンソースのリアルタイムカーネルを提供しています。
FMPはFlexible Multiprocessor Profileの略で、マルチコアに対応したカーネルです。

## 1.3 「名古屋のIoTは名古屋のOSで」
この資料は2017年TOPPERS開発者会議において名古屋大学の本田晋也さんが行った演習を基に作成しています。
Raspberry PIをraspbian以外でも使う実験を行います。
名古屋大学で設計されたTOPPERS/FMP, 杉本明加さんと名古屋市工業研究所で実装したTOPPERS/SSPなど名古屋のOSを試します。

2017年12月開催の「名古屋のIoTは名古屋のOSで」セミナで、名古屋市工業研究所の斉藤直希が用意したものに基づいています。
ここではMacintoshで説明します。Windowsでも、同じようにDockerを利用することができます。下記を参考に実行してみてください。

## 1.4 Docker
Dockerは、コマンドラインの仮想環境を作るソフトです。
Linuxではサーバ機能を使い、Windows, MacintoshではDesktop機能を使います。サーバ、仮想環境ともUbuntuが代表的です。ServerはUbuntuだけでなくDebian系のLinux始め、多くのLinuxで動作するLinux(ubuntu)のコマンド環境を提供してくれます。

MacintoshではDockerのDesktop機能であるdockerアプリを導入します。Dockerアプリの導入・起動は、下の「５つの関門」参照。
第一章はdockerを導入ずみを前提にしています。実行してみて、うまくいかなかったら、第二章の「５つの関門」をお読みください。

## 1.5 注意点
Macintoshでdockerを使う場合にわかりにくいところは、dockerを起動したコマンドプロンプトの状態とdockerの状態が似ていることです。
そのままさっきとあまり違いがなく、すでにdockerの中にいる状態になる。

Macintoshのコマンドと、dockerの内部とでは"＄"の前に付いている文字列が代わっているはずです。
ここでは、固有名詞を避けるためにコマンドプロンプトを省略しています。
以下、dockerの中の入力促進記号(prompt)は"＄＄"と表記します。お使いの画面には$しか現れていません。

## 1.6 コマンド実行(Macintosh)
Macintoshのコマンド（プロンプト）で

```
$ docker pull kaizenjapan/dockertoppersfmprpi64_fmp:kaizenjapan
```
＄は入力促進記号(prompt)です。この文字を入れる必要はありません。
セミナで実行したdockerで一部修正したものを保存(push)したものを取り出す(pull)する作業です。

### dockerコマンドのログ（例）
実行のログ（例）のはじめの部分はこちら。

```
kaizenjapan: Pulling from kaizenjapan/dockertoppersfmprpi64_fmp
8f7c85c2269a: Pull complete 
9e72e494a6dd: Pull complete 
3009ec50c887: Pull complete 
9d5ffccbec91: Pull complete 
e872a2642ce1: Pull complete 
30b8a79ef712: Pull complete 
dd62d57c37c5: Pull complete
```
続きは
https://researchmap.jp/joxehp3dn-2000107/#_2000107
こんな感じなら大丈夫。
あるいは、一度pullしたことがあると

```
$ docker pull kaizenjapan/dockertoppersfmprpi64_fmp:kaizenjapan
kaizenjapan: Pulling from kaizenjapan/dockertoppersfmprpi64_fmp
Digest: sha256:52e9f56dd33306e177ec8ed5cba8995a7ff3204a713855cec32601f723f23f5c
Status: Image is up to date for kaizenjapan/dockertoppersfmprpi64_fmp:kaizenjapan
```

### dockerのfmpコンパイル用イメージがうまくできているかの確認。

```
$ docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
kaizenjapan/dockertoppersfmprpi64_fmp   kaizenjapan         b329efb0b44b        23 hours ago        1.24GB
```
逆に言えば、前docker pullしたことがあれば、docker imagesを実行してみれば、docker pullする必要はない。


## 1.7docker起動（２つ目のdockerコマンド）

```
$ docker run -it kaizenjapan/dockertoppersfmprpi64_fmp:kaizenjapan /bin/bash
```
コマンドの結果、コマンドのプロンプトが「administrator@e40a06773578:~$」と変わっていれば大丈夫。
下記の警告は、すでにdockerで走っている状態。

```
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
```
aptなどは sudo を先につけて実行するとよいことが分かります。
プロンプトが少し変わってることに注目してください。"Machine"という機器名のMacに"user"という名前でMacログインしていたとしたら

````
# Macintosh
Machine:~ user$
# docker:ubuntu
user@846978ad203c:~$ 
````
プロンプトで見分けにくければ、Docker内部にいるかどうかを確かめるには、例えば、

```
$ ps -ax
  PID TTY      STAT   TIME COMMAND
    1 pts/0    Ss+    0:00 /bin/bash
   17 pts/1    Ss     0:00 bash --login
 5004 pts/1    R+     0:00 ps -ax
```
こんな感じです。Macintoshでは、いっぱいプロセスが走っているはず、、、。


## 1.8 docker内でコマンド実行
起動したdockerの中で

```README.md 
$$ cd workdir
$$ sudo ../scripts/build_fmp.sh
# http://bit.ly/2nRx6nN by Satito naoki
```
＄＄は入力促進記号(prompt)です。この文字を入れる必要はありません。'#'の行は註釈(comment)です。コマンド列の入力手順の説明が書かれています。

### logの例です。

```
--2018-02-07 16:38:21--  https://releases.linaro.org/components/toolchain/binaries/7.1-2017.08/aarch64-elf/gcc-linaro-7.1.1-2017.08-x86_64_aarch64-elf.tar.xz
releases.linaro.org (releases.linaro.org) をDNSに問いあわせています... 52.77.230.32
releases.linaro.org (releases.linaro.org)|52.77.230.32|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 FOUND
場所: https://publishing-ap-linaro-org.s3.amazonaws.com/releases/components/toolchain/binaries/7.1-2017.08/aarch64-elf/gcc-linaro-7.1.1-2017.08-x86_64_aarch64-elf.tar.xz?

* snip *

../arch/arm64_gcc/common/core_def.csv sample1.cfg
check complete
aarch64-elf-objcopy -O binary -S fmp fmp.bin
```
fmp.binができていればOK.

### docker内のコマンドのログ（docker軌道からの一連のlog）
エラーが出たりして、実行結果が違うかもしれないと比較するためのlogファイルはこちら
https://researchmap.jp/mulbu8wxa-45645/?action=multidatabase_action_main_filedownload&download_flag=1&upload_id=152852&metadata_id=25961

## 1.9 ファイルのコピー

置くモノ : 
fmp.bin , 
config.txt(RPi64Toppers直下) ,
start.elf , bootcode.bin（https://github.com/raspberrypi/firmware/tree/master/boot　からダウンロード）

### Raspbianのmicro SDカードを利用する場合
backupフォルダを作り、ルートディレクトリにあるファイルを全てbackupフォルダに移動して
上記４ファイルだけにすればTOPPERS/FMPが起動します。
FMPフォルダを作り、4ファイルをFMPフォルダに移動し、backupフォルダの中身をルートに戻せば、Raspbianが起動します。


## 1.10 USB serial 接続
Raspberry PiでTOPPERS(TRON系OS)
http://domisan.sakura.ne.jp/article/rp_toppers/rp_toppers.html

当方の場合は、黒(gnd:6), 白(8)、緑(10)

## 1.11 minicomの導入・起動
Mac OS X Mountain Lion で RaspberryPi とシリアル接続する
http://cat-s-tail.blogspot.jp/2013/10/Mac-OS-X-Mountain-Lion-RaspberryPi-serial.html

```
brew install minicom
```

## 1.12 起動
micro SDカードを刺して、電源を入れる

```
TOPPERS/FMP Kernel Release 1.4.0 for RPI-ARM64(BCM283X(Cortex-A53)) (Feb  7 2018, 09:25:47)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory         
                            Toyohashi Univ. of Technology, JAPAN             
Copyright (C) 2004-2015 by Embedded and Real-Time Systems Laboratory         
            Graduate School of Information Science, Nagoya Univ., JAPAN
                                        
Processor 4 start.                      
Processor 3 start.                      
local_inirtn exinf = 4, counter = 1     
Processor 1 start.                      
local_inirtn exinf = 3, counter = 2
local_inirtn exinf = 1, counter = 3
Processor 2 start.
local_inirtn exinf = 2, counter = 4
Server task 3 starts.
Server task 4 starts.
Server task 2 starts.
CPU exception handler1 (p_excinf = 0002e560).
sns_loc = 0 sns_dsp = 1 sns_tex = 1
xsns_dpn = 1 xsns_xpn = 1
Sample program ends with exception.
local_terrtn exinf = 1, counter = 5
local_terrtn exinf = 4, counter = 7
local_terrtn exinf = 3, counter = 7
local_terrtn exinf = 2, counter = 6
global_terrtn exinf = 0, counter = 8
```
やったー、動いた。

# 第二章　TOPPERS/FMP on Raspberry Pi with Macintosh編 ５つの関門

TOPPERS/FMPをMacintoshでコンパイルするのにいくつかの関門がある。

# 2.1 関門1 クロスコンパイラのコンパイル
最大の関門はクロスコンパイラのコンパイル。この関門を潜るために、dockerを使う。

Macintoshでは、大文字小文字の識別、ファイル名の長さがの制約がLinuxと異なる。そのためLinuxでうまく行くことがMac OSXではうまくいかないことがある。
設定をいじるより、docker/ubuntuで操作する方が簡単。

## docker for TOPPERS/FMP
ビルドするためのDockerプロジェクト．by Saito Naoki
https://github.com/nmiri-nagoya-nsaito/docker-toppers-fmp-rpi64

## 準備1 Xcodeとコマンドラインツールの導入

XcodeはApple Storeから無償で導入できます。
「Xcode」検索

コマンドラインツールは、Xcode導入後、

```Mac
$ xcode-select --install
```

## 準備2 brewの導入 

```Mac 
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

## 準備3 git, wget, nkf導入

```mac
$ brew install git
$ brew install wget
$ brew install nkf
```
## 準備4　dockerアプリ導入
Macintoshにdockerアプリを導入

```mac
$ brew cask install docker
```
https://www.docker.com/get-docker

## 準備5　dockerアプリ起動
アプリケーションフォルダのDockerアプリをダブルクリック。

アプリが起動していないと、コマンドラインで次のエラーが出る。

```
$ docker ps -a
bash: docker: command not found
```
dockerの中でも上記のエラーが出る。
dockerのわかりにくいところは、dockerを起動したコマンドプロンプトで、
そのままさっきとあまり違いがなく、すでにdockerの中にいる状態になること（大事なことなので２度書きました）。

## dockerの起動状態の確認（プロセス編）
dockerが起動しているかどうかは、dockerアイコンが起動アプリ一覧の中にあるか、または次のコマンドを叩くとわかる。

```Mac
$ ps -ax | grep docker
```
## 実行
gitコマンドを投入

```README.md 
$ git clone https://github.com/nmiri-nagoya-nsaito/docker-toppers-fmp-rpi64.git
# http://bit.ly/2nRx6nN by Satito naoki
```
続いて次のコマンドを

``` README.md 
$ cd docker-toppers-fmp-rpi64
$ ./start_shell.sh
# http://bit.ly/2nRx6nN by Satito naoki
```
目的のdockerがすでに起動していれば、buildしない設定になっているらしい。

```start_shell.sh 
...
if [ "x$(docker-compose ps -q ${SERVICE})" = "x" ]; then
  docker-compose build ${SERVICE}
fi
...
# http://bit.ly/2nRx6nN by Satito naoki
```
##　うまくいったらdockerの内部で次のコマンドを実行。

```README.md 
$$ cd workdir
$$ ../scripts/build_fmp.sh
# http://bit.ly/2nRx6nN by Satito naoki
```
うまくいけば、configuratorのコンパイル、設定をし、カーネルをコンパイルする。

# 2.2 関門2 configuratorの導入
TOPPERSのカーネルのコンパイルで、configuratorの導入で迷うこと、困ることがしばしば。

## configuratorのコンパイル
configuratorは、ホストOS(今回はubuntu)のコンパイラでコンパイルする。クロスコンパイラではない。

## configuratorの置き場所
configuratorは、任意の場所においておいて、ln -sでシンボリックリンクを作るのが良さげ。
先ほどのスクリプトで、

```
../scripts/build_fmp.sh: 22 行: cd: RPi64Toppers/fmp/cfg/cfg: そのようなファイルやディレクトリはありません
```
というエラーが出る。cfgというフォルダが二重に必要。今回は、そのどちらも作成されていない。

```scripts/build_fmp.sh 
...
cd RPi64Toppers/fmp/cfg/cfg
ln -s ../../../../cfg-1.9.6/cfg/cfg cfg
cd ../../
...
# http://bit.ly/2nRx6nN by Satito naoki
```
となっている。これは一括実行するスクリプトファイルであるため入力促進記号は表示していない。

```改訂版
...
cd RPi64Toppers/fmp/
mkdir cfg
cd cfg
mkdir cfg
cd cfg
ln -s ../../../../cfg-1.9.6/cfg/cfg cfg
cd ../../
...
```

に変更した。これでうまく通った。手でコマンドを一つづつ打っても（コピペしても）良い。

## configuratorの呼び出し方
シンボリックリンクが貼ってあることと、Pathが通っていることが大事。

dockerの処理の途中でエラーになって、Pathがうまく通っていない状態になったことがある。

```scripts/build_fmp.sh 
...
echo 'export PATH=$HOME/workdir/aarch64-elf-gcc/bin:$PATH' > ~/.bash_profile
source ~/.bash_profile
...
# http://bit.ly/2nRx6nN by Satito naoki
```
の各行を順にコピペして実行したらうまく行った。原因は不明。

なお、dockerとmacとのファイル共有の仕方をスクリプトで実現している。

# 2.3 関門3 カーネルのコンパイル
intelのCPU上で、Raspberry PiのARMのCPU用のコンパイルをするには、クロスコンパイラでコンパイルします。関門１がうまく行っていれば大丈夫。

最初からソースコードを書き換えずに、最初は、あるものがそのままで動くかどうかを確かめてから、少しづつ動かすとよい。あちこち一遍に作ると、何がうまく行かない原因かを特定しづらい。

# 2.4 関門4 どっかーでエラーが起きた時の対処方法

## dockerが起動しているかどうか(docker ps編）
docker以外のコマンドプロンプトから実行。

```
$ docker ps -a
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS               NAMES
2a02eaf04fef        dockertoppersfmprpi64_fmp   "/bin/bash"         37 minutes ago      Up 37 minutes                           dockertoppersfmprpi64_fmp_1
```

## コマンドがない
'command'がない場合と、PATHがきれてない場合がある。

```
$ find / -name 'command' name -print
```
でコマンドを探そう。

### Macintosh側に必要な'command'の場合は次のいずれか。

```
$ brew install 'command'
$ brew cask install 'command'
```

### Docker内のUbuntuで"command"名のコマンドがない場合は、

```
$$ apt-get install command
$$ sudo apt-get install command
```

## PATHがきれてない

```
$$ echo 'export PATH=$HOME/workdir/aarch64-elf-gcc/bin:$PATH' > ~/.bash_profile
$$ source ~/.bash_profile
```
といった感じで、~/.bash_profileに設定を追加しよう。

## 一度失敗すると
一度失敗すると、フォルダはすでに存在している。そのため、

```
mkdir: cannot create directory 'aarch64-elf-gcc': File exists
```
というエラーが出て進まないことがある。

mkdirをif文で囲むか、mkdirのないrebuildのようなスクリプトを作るか。
ただ、どこまでmkdirがうまく行ったかで、条件が違うのなら、mkdir をif文で囲むのが良さそう。
## 文字の間違い
焦っていると、打ち間違いが増えて、余計にややこしくなる。
Pathの設定、ファイル名、フォルダ名など、間違えて作ってしまうと、
ややこしや。

Dockerのよいところは、それまでのものを捨て去って、一からまた始めるのが容易にだということ。

#2.5 関門5 通信がうまくいっていない場合

## 通信エラー

```
$$ ../scripts/build_fmp.sh 
--2018-02-07 08:45:58--  https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-elf/gcc-linaro-7.1.1-2017.08-x86_64_aarch64-elf.tar.xz
releases.linaro.org (releases.linaro.org) をDNSに問いあわせています... 52.77.230.32
releases.linaro.org (releases.linaro.org)|52.77.230.32|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 404 NOT FOUND
2018-02-07 08:45:59 エラー 404: NOT FOUND。
```

dockerで最初の導入、実行はうまく行った。wgetコマンドで急に通信エラー。
原因は調査中。他の機材でやったら出なかったのでひとまず放置。

### wiresharkでの確認

Wiresharkでパケットを取得すると良い。

#### Macintosh

```Mac
$ brew cask install wireshark
```
#### 参照
MacintoshにWiresharkを導入する５つの壁
https://qiita.com/kaizen_nagoya/items/69eb2d357a125f5368e1

### docker/ubuntu

```
$$ sudo apt-get install wireshark
```
コマンドラインでのTsharkとしてご利用ください。
#### 参照　tsharkコマンドの使い方
https://qiita.com/hana_shin/items/0d997d9d9dd435727edf

# 第三章 対処したものをdockerにあげる
せっかくうまく行ったら、dockerに変更したものをあげるとよい。
元がgitにあるのであれば、gitを更新するのがよい。

ただし、いろいろな確認をするために、自分用のdocker hubにあげて、いろんな人に試してもらうのもよい。

## 3.1 dockerの状況

```
$ docker ps -a
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                          PORTS               NAMES
d16cdf58b5e5        dockertoppersfmprpi64_fmp   "/bin/bash"              About an hour ago   Exited (0) About a minute ago                       dockertoppersfmprpi64_fmp_1
8d864084ea72        ubuntu:xenial               "/bin/bash"              2 weeks ago         Exited (255) 2 weeks ago                            epic_lichterman
```

##3.2  Docker HUBのID設定
https://cloud.docker.com/

メールアドレス、パスワードを設定する。

メールが来る。

メールの中にURLをダブルクリックする。

```
(This link will expire in 2 days.)
```
２日は有効らしい。

## 3.3 Docker Image の保存

```
$ docker commit dockertoppersfmprpi64_fmp_1 dockertoppersfmprpi64_fmp:kaizenjapan
```
## Docker HUBへの登録

```
$ docker push kaizenjapan/dockertoppersfmprpi64_fmp:kaizenjapan
The push refers to repository [docker.io/kaizenjapan/dockertoppersfmprpi64_fmp]
0824ca26fac8: Pushed 
a293d97b521d: Pushed 
b7bc844f348e: Pushed 
3da3c8eae2d4: Pushed 
4fe000695a8c: Pushed 
7b2fcb653ca7: Pushed 
60104d5eb99b: Pushed 
85e35c87a208: Pushed 
9f8d765fe04e: Pushed 
8600ee70176b: Pushed 
2bbb3cec611d: Pushed 
d2bb1fc88136: Pushed 
a6a01ad8b53f: Pushed 
833649a3e04c: Pushed 
kaizenjapan: digest: sha256:52e9f56dd33306e177ec8ed5cba8995a7ff3204a713855cec32601f723f23f5c size: 3241
```
## 3.4 Docker HUBからの利用

```
$ docker pull kaizenjapan/dockertoppersfmprpi64_fmp:kaizenjapan

$ docker run -it kaizenjapan/dockertoppersfmprpi64_fmp:kaizenjapan /bin/bash
```
dockerの中で

```
$$ cd workdir
$$ sudo ../scripts/build_fmp.sh
```
この節は、最初に出てきたものと同じです。

# 4 振り返り
## 4.1 わかったこと
 Macintoshのintelセルフコンパイラ（X-code：brewでの導入に使う場合がある）、gccのintelセルフコンパイラ、gccのarmクロスコンパイラの３種類のコンパイラを使う可能性がある。
 dockerを使うことで、クロスコンパイラの環境をMacの環境と分離できる
 失敗したら丸ごと容易に捨てられる
 dockerのわかりにくいところは、dockerを起動したコマンドプロンプトとdockerのコマンドプロンプトとあまり違いがなく、dockerの中にいるのかどうかが分かりにくいこと。（大事なことなので3度書きました）。

## 4.2 わからなかったこと
クロスコンパイラのコンパイルの課題
configuratorの内容
デバッグの仕方

## 4.3 よかったこと
やったー。動いた。

## 4.4  あらためたいこと
gitへの改訂版の登録。元のファイルはgitに登録されている。
デバッグの資料の作成

# 5 資料
## 5.1 名古屋のIoTは名古屋のOSで
saito naokiのgit等は「名古屋のIoTは名古屋のOSで」セミナで提供したものです。
https://researchmap.jp/jo39c0wgq-2000107/
https://researchmap.jp/josk89af0-1778110/?block_id=1778110&active_action=journal_view_main_detail&post_id=65395&comment_flag=1

次回は2018年2月22日（土）午後1時から＠名古屋市工業研究所（地下鉄六番町下車１分）

Dockerどっかー使い方おかしかったんでしょうか。TOPPERS/SSP on RaspberryPi with Macintosh編：５つの関門
https://qiita.com/kaizen_nagoya/items/cbf40186ae4da48ec4c7

## 5.2 Windows
docker for windowsのInstallerをダウンロード
https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe

ダブルクリックして実行。
http://blog.saboh.net/windows10proaddgroup/

## 5.3 関連情報(related information)
JTAGの接続方法 ​https://www.evernote.com/shard/s32/sh/2d01955e-b8b6-45e5-a779-3681b6ddeec9/52c678c97c6a78ff
JTAGの使い方 ​https://qiita.com/toshinaga/items/146bcb00db235258162f
FMPの実行方法 ​https://qiita.com/toshinaga/items/672c41a1f390922d5bae
ベアメタル情報 ​https://qiita.com/toshinaga/items/8999d3fcda8e2c3e2667

RPi3用 TOPPERS/FMP
https://github.com/YujiToshinaga/RPi64Toppers

## 5.4 参照資料(reference)
Raspberry PIのSDカードをRaspbian, TOPPERS/FMP, TOPPERS/SSP起動用に利用する
https://qiita.com/kaizen_nagoya/items/814cccdaa59dc09196e3

Dockerコンテナをイメージに保存する
https://qiita.com/momoham/items/df4c5e97fe630cccc1e5

Dockerの作業済みコンテナからイメージを作って移植を楽にする
https://qiita.com/tubone/items/a3bad04abf4c700cae3d

Dockerでcommitしてみる
https://qiita.com/mats116/items/712575dc50513dfdf0a2

DockerImageをDockerHubに登録の仕方
https://qiita.com/kon_yu/items/7c40f4dfbd1cce006ce7

GitHub 入門
https://qiita.com/ay3/items/8d758ebde41d256a32dc

Docker 虎の巻 at GitHub
https://gist.github.com/tcnksm/7700047

機械学習名古屋 勉強会用の Dockerイメージ 解説
https://qiita.com/antimon2/items/07890addf534f2e0b779#_reference-9d9783bf9ca2df932b9c

ゼロから作るDeep Learningの学習環境をDockerで作った　at Hatena blog
http://yuki10.hatenablog.com/entry/2017/01/11/020924

だいたい10分でざっくり押さえるDockerの基本 at web professional
https://www.webprofessional.jp/how-to-build-an-image-with-the-dockerfile/

Dockerhubへの初プッシュ
https://qiita.com/moru3/items/32931813db81d891effb

Dockerコンテナのリポジトリ管理　DockerHubへログイン、イメージの取得〜更新、コミットまで。
https://qiita.com/kooohei/items/1e007fe650c6aa7eaac4

Docker Hubのイメージを利用する時の注意点と判断材料
https://qiita.com/satotka/items/5ece24499bcddd9f13b0

Docker Registry Hub にイメージをpushしたい
https://qiita.com/suin/items/20d735823e158196983e


DockerのImageからDockerfileを取り出せるか？
https://qiita.com/PharaohKJ/items/7fa708a19391c80629fe

### AArch64
OSのタスク切り替え処理とAArch64(ARM64)の関数呼び出し規約
https://qiita.com/tkato/items/82f095a8f8c55be07cb5

### 自己資料(self reference)

## 用語集
Docker https://ja.wikipedia.org/wiki/Docker
　　OSを導入(install)作業をせずに利用できる仮想化(virtual)OS.代表的にはubuntuを利用する。
ubuntu
　　Debian系のLinux配布(distribution)
Macintosh
　　Mac OSXが動作するPC
TOPPERS
http://toppers.jp
FMP:Flexible Multiprocessor Profile

SSP:Smallest Set Profile kernel

qiita
http://qiita.com

Github
http://github.com

Raspberry Pi
https://www.raspberrypi.org

Wireshark
https://www.wireshark.org

gcc
https://gcc.gnu.org

入力促進(command prompt)

記録(log)

コンパイル

## コマンド一覧
### システムコマンド
docker
https://www.docker.com
wget
https://www.gnu.org/software/wget/
git
https://github.com
ruby
https://www.ruby-lang.org/ja/
brew: mac
https://brew.sh/index_ja.html
apt-get: debian/ubuntu/raspbian
https://wiki.debian.org/apt-get

### シェルコマンド
ps
process status。プロセスの状態を表示するコマンド。
ln
リンク。別名で連携するコマンド。
cd
change directory。ディレクトリを移動するコマンド
mkdir
ディレクトリを作成するコマンド
echo
文字を出力するコマンド。
source
シェルスクリプトを実行するコマンド
find
https://ja.wikipedia.org/wiki/Find
grep
https://ja.wikipedia.org/wiki/Grep
sudo
https://ja.wikipedia.org/wiki/Sudo

<この項は書きかけです。順次追記します。>
This article is not completed. I will add some words and/or centences in order.
Este artículo no está completo. Agregaré algunas palabras en orden.
# Qiita Calendar 2024
祝休日・謹賀新年 2025年の目標
https://qiita.com/kaizen_nagoya/items/dfa34827932f99c59bbc

Qiita 1年間をまとめた「振り返りページ」＠2024
https://qiita.com/kaizen_nagoya/items/ed6be239119c99b15828

2024 参加・主催Calendarと投稿記事一覧 Qiita(248)
https://qiita.com/kaizen_nagoya/items/d80b8fbac2496df7827f

主催Calendar2024分析 Qiita(254)
https://qiita.com/kaizen_nagoya/items/15807336d583076f70bc

Calendar 統計
https://qiita.com/kaizen_nagoya/items/e315558dcea8ee3fe43e

LLM 関連 Calendar 2024 
https://qiita.com/kaizen_nagoya/items/c36033cf66862d5496fa

Large Language Model Related Calendar 
https://qiita.com/kaizen_nagoya/items/3beb0bc3fb71e3ae6d66

博士論文 Calendar 2024 を開催します。 
https://qiita.com/kaizen_nagoya/items/51601357efbcaf1057d0

博士論文(0)関連記事一覧
https://qiita.com/kaizen_nagoya/items/8f223a760e607b705e78

# 関連資料
' @kazuo_reve 私が効果を確認した「小川メソッド」
https://qiita.com/kazuo_reve/items/a3ea1d9171deeccc04da

' @kazuo_reve 新人の方によく展開している有益な情報
https://qiita.com/kazuo_reve/items/d1a3f0ee48e24bba38f1

' @kazuo_reve Vモデルについて勘違いしていたと思ったこと
https://qiita.com/kazuo_reve/items/46fddb094563bd9b2e1e

# 自己記事一覧
Qiitaで逆リンクを表示しなくなったような気がする。時々、スマフォで表示するとあらわっることがあり、完全に削除したのではなさそう。

４月以降、せっせとリンクリストを作り、統計を取って確率を説明しようとしている。
2025年２月末を目標にしている。

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

仮説（0）一覧（目標100現在40）
https://qiita.com/kaizen_nagoya/items/f000506fe1837b3590df

Qiita(0)Qiita関連記事一覧（自分）
https://qiita.com/kaizen_nagoya/items/58db5fbf036b28e9dfa6

Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

C++ Support(0)　
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding(0) Rules, C, Secure, MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

Ethernet 記事一覧　Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48) 
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網（Wi-Fi）空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

プログラムちょい替え（0）一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

Python(0)記事をまとめたい。
https://qiita.com/kaizen_nagoya/items/088c57d70ab6904ebb53

安全（0）安全工学シンポジウムに向けて: 21
https://qiita.com/kaizen_nagoya/items/c5d78f3def8195cb2409

プログラマによる、プログラマのための、統計(0)と確率のプログラミングとその後
https://qiita.com/kaizen_nagoya/items/6e9897eb641268766909

転職(0)一覧
https://qiita.com/kaizen_nagoya/items/f77520d378d33451d6fe

技術士(0)一覧
https://qiita.com/kaizen_nagoya/items/ce4ccf4eb9c5600b89ea

Reserchmap(0) 一覧
https://qiita.com/kaizen_nagoya/items/506c79e562f406c4257e

物理記事　上位100
https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff

量子(0) 計算機, 量子力学 
https://qiita.com/kaizen_nagoya/items/1cd954cb0eed92879fd4

数学関連記事１００
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d

coq(0) 一覧
https://qiita.com/kaizen_nagoya/items/d22f9995cf2173bc3b13

統計(0)一覧
https://qiita.com/kaizen_nagoya/items/80d3b221807e53e88aba

図(0) state, sequence and timing. UML and お絵描き 
https://qiita.com/kaizen_nagoya/items/60440a882146aeee9e8f

色(0) 記事100書く切り口 
https://qiita.com/kaizen_nagoya/items/22331c0335ed34326b9b

品質一覧 
https://qiita.com/kaizen_nagoya/items/2b99b8e9db6d94b2e971

言語・文学記事　１００
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6

医工連携関連記事一覧
https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82

水の資料集(0)　方針と成果
https://qiita.com/kaizen_nagoya/items/f5dbb30087ea732b52aa

自動車　記事　１００
https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5

通信記事１００
https://qiita.com/kaizen_nagoya/items/1d67de5e1cd207b05ef7

日本語（０）一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68

英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d

音楽　一覧(0) 
https://qiita.com/kaizen_nagoya/items/b6e5f42bbfe3bbe40f5d

「@kazuo_reve 新人の方によく展開している有益な情報」確認一覧 
https://qiita.com/kaizen_nagoya/items/b9380888d1e5a042646b

鉄道（０）鉄道のシステム考察はてっちゃんがてつだってくれる
https://qiita.com/kaizen_nagoya/items/faa4ea03d91d901a618a

OSEK OS設計の基礎　OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3

coding (101) 一覧を作成し始めた。omake:最近のQiitaで表示しない5つの事象
https://qiita.com/kaizen_nagoya/items/20667f09f19598aedb68

官公庁・学校・公的団体（NPOを含む）システムの課題、官（０）
https://qiita.com/kaizen_nagoya/items/04ee6eaf7ec13d3af4c3

「はじめての」シリーズ　 ベクタージャパン　
https://qiita.com/kaizen_nagoya/items/2e41634f6e21a3cf74eb

AUTOSAR(0)Qiita記事一覧, OSEK(75)
https://qiita.com/kaizen_nagoya/items/89c07961b59a8754c869

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

LaTeX(0) 一覧　
https://qiita.com/kaizen_nagoya/items/e3f7dafacab58c499792

自動制御、制御工学一覧（０）
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b

Rust(0) 一覧　
https://qiita.com/kaizen_nagoya/items/5e8bb080ba6ca0281927

programの本質は計画だ。programは設計だ。
https://qiita.com/kaizen_nagoya/items/c8545a769c246a458c27

登壇直後版 色使い(JIS安全色) Qiita Engineer Festa 2023〜私しか得しないニッチな技術でLT〜 スライド編 0.15
https://qiita.com/kaizen_nagoya/items/f0d3070d839f4f735b2b

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

逆も真：社会人が最初に確かめるとよいこと。OSEK(69)、Ethernet(59)
https://qiita.com/kaizen_nagoya/items/39afe4a728a31b903ddc

統計の嘘。仮説（127）
https://qiita.com/kaizen_nagoya/items/63b48ecf258a3471c51b

自分の言葉だけで論理展開できるのが天才なら、文章の引用だけで論理展開できるのが秀才だ。仮説（136）
https://qiita.com/kaizen_nagoya/items/97cf07b9e24f860624dd

参考文献駆動執筆(references driven writing)・デンソークリエイト編
https://qiita.com/kaizen_nagoya/items/b27b3f58b8bf265a5cd1

「何を」よりも「誰を」。１０年後のために今見習いたい人たち
https://qiita.com/kaizen_nagoya/items/8045978b16eb49d572b2

Qiitaの記事に３段階または５段階で到達するための方法
https://qiita.com/kaizen_nagoya/items/6e9298296852325adc5e

出力(output)と呼ばないで。これは状態(state)です。
https://qiita.com/kaizen_nagoya/items/80b8b5913b2748867840

coding (101) 一覧を作成し始めた。omake:最近のQiitaで表示しない5つの事象
https://qiita.com/kaizen_nagoya/items/20667f09f19598aedb68

あなたは「勘違いまとめ」から、勘違いだと言っていることが勘違いだといくつ見つけられますか。人間の間違い(human error(125))の種類と対策
https://qiita.com/kaizen_nagoya/items/ae391b77fffb098b8fb4

プログラマの「プログラムが書ける」思い込みは強みだ。３つの理由。仮説（168）統計と確率(17) , OSEK(79)
https://qiita.com/kaizen_nagoya/items/bc5dd86e414de402ec29

出力(output)と呼ばないで。これは状態(state)です。
https://qiita.com/kaizen_nagoya/items/80b8b5913b2748867840

これからの情報伝達手段の在り方について考えてみよう。炎上と便乗。
https://qiita.com/kaizen_nagoya/items/71a09077ac195214f0db

ISO/IEC JTC1 SC7 Software and System Engineering
https://qiita.com/kaizen_nagoya/items/48b43f0f6976a078d907

アクセシビリティの知見を発信しよう！（再び）
https://qiita.com/kaizen_nagoya/items/03457eb9ee74105ee618

統計論及確率論輪講（再び）
https://qiita.com/kaizen_nagoya/items/590874ccfca988e85ea3

読者の心をグッと惹き寄せる7つの魔法
https://qiita.com/kaizen_nagoya/items/b1b5e89bd5c0a211d862

「@kazuo_reve 新人の方によく展開している有益な情報」確認一覧
https://qiita.com/kaizen_nagoya/items/b9380888d1e5a042646b

ソースコードで議論しよう。日本語で議論するの止めましょう（あるプログラミング技術の議論報告）
https://qiita.com/kaizen_nagoya/items/8b9811c80f3338c6c0b0

脳内コンパイラの3つの危険
https://qiita.com/kaizen_nagoya/items/7025cf2d7bd9f276e382

心理学の本を読むよりはコンパイラ書いた方がよくね。仮説（34）
https://qiita.com/kaizen_nagoya/items/fa715732cc148e48880e

NASAを超えるつもりがあれば読んでください。
https://qiita.com/kaizen_nagoya/items/e81669f9cb53109157f6

データサイエンティストの気づき!「勉強して仕事に役立てない人。大嫌い!!」『それ自分かも?』ってなった!!! 
https://qiita.com/kaizen_nagoya/items/d85830d58d8dd7f71d07

「ぼくの好きな先生」「人がやらないことをやれ」プログラマになるまで。仮説（37）　
https://qiita.com/kaizen_nagoya/items/53e4bded9fe5f724b3c4

なぜ経済学徒を辞め、計算機屋になったか（経済学部入学前・入学後・卒業後対応） 転職(1)  
https://qiita.com/kaizen_nagoya/items/06335a1d24c099733f64    

プログラミング言語教育のXYZ。 仮説（52） 
https://qiita.com/kaizen_nagoya/items/1950c5810fb5c0b07be4

【24卒向け】9ヶ月後に年収１０００万円を目指す。二つの関門と三つの道。
https://qiita.com/kaizen_nagoya/items/fb5bff147193f726ad25

「【25卒向け】Qiita Career Meetup for STUDENT」予習の勧め
https://qiita.com/kaizen_nagoya/items/00eadb8a6e738cb6336f

大学入試不合格でも筆記試験のない大学に入って卒業できる。卒業しなくても博士になれる。
https://qiita.com/kaizen_nagoya/items/74adec99f396d64b5fd5

全世界の不登校の子供たち「博士論文」を書こう。世界子供博士論文遠隔実践中心 安全(99)
https://qiita.com/kaizen_nagoya/items/912d69032c012bcc84f2

小川メソッド　覚え（書きかけ）
https://qiita.com/kaizen_nagoya/items/3593d72eca551742df68

DoCAP（ドゥーキャップ）って何ですか？
https://qiita.com/kaizen_nagoya/items/47e0e6509ab792c43327

views 20,000越え自己記事一覧
https://qiita.com/kaizen_nagoya/items/58e8bd6450957cdecd81

Views１万越え、もうすぐ１万記事一覧 最近いいねをいただいた213記事
https://qiita.com/kaizen_nagoya/items/d2b805717a92459ce853

amazon 殿堂入りNo1レビュアになるまで。仮説(102)
https://qiita.com/kaizen_nagoya/items/83259d18921ce75a91f4

100以上いいねをいただいた記事16選
https://qiita.com/kaizen_nagoya/items/f8d958d9084ffbd15d2a

小川清最終講義、最終講義（再）計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on my individual experience. It has nothing to do with the organization or business to which I currently belong.
Este artículo es una impresión personal basada en mi experiencia personal. No tiene nada que ver con la organización o empresa a la que pertenezco actualmente.
### 文書履歴(document history)
ver. 0.10 初稿 20180101
ver. 0.11 講習会実施に伴い記述を訂正　20180313
ver. 0.12 SWEST投稿のため操作確認しながら記述を訂正。 20180717
ver. 0.13 誤植訂正、ファイル共有 追記 20181011
ver. 0.14 参考文献追記 20181102
ver. 0.15 自己資料追記 20190222
ver. 0.16 標題追記 20190813
ver. 0.17 docker update 20210626
ver. 0.18 ありがとう追記 20230417
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
### Muchas gracias por leer hasta la última oración.
Por favor, haz clic en el ícono Me gusta 💚 y sígueme para tener una vida feliz.