Dockerコマンド一覧


Mac内の作業環境をコンテナ化しました。
さようなら、Homebrew。
さようなら、Pyenv。

Dockerのインストール

DockerとVirtualBoxをインストールします。

Docker Community Edition
https://www.docker.com/community-edition

VirtualBox
https://www.virtualbox.org/wiki/Downloads

イメージの操作

イメージの検索

docker search [NAME]

公開されているDockerイメージの中から「amazon」を検索します。
OFFICIALに[OK]がついれば公式のイメージです。
[code]$ docker search amazon
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
amazonlinux Amazon Linux provides a stable, secure, an… 251 [OK]
amazon/amazon-ecs-agent Amazon EC2 Container Service Agent 56
vettl/amazon-linux Amazon Linux Images. Available versions: … 18
…[/code]

イメージのダウンロード

docker pull [NAME]

[code]$ docker pull amazonlinux
Using default tag: latest
latest: Pulling from library/amazonlinux
40280b975f14: Pull complete
Digest: sha256:b852ce504670f604074bb0a0285849c95541453c39da4a6abe19c096695ccfca
Status: Downloaded newer image for amazonlinux:latest[/code]

イメージの一覧

docker images
[code]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
amazonlinux latest 6133b2c7d7c2 7 weeks ago 165MB[/code]

イメージの削除

docker rmi [IMAGE ID]

コンテナの操作

コンテナの作成

docker run -it [REPOSITORY] /bin/bash
[code]$ docker run -it amazonlinux /bin/bash
bash-4.2#[/code]

コンテナから一時切断

Ctrl-p Ctrl-q

コンテナの一覧

docker ps
[code]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e178aba66d58 amazonlinux “/bin/bash” 5 seconds ago Up 4 seconds kind_pike
[/code]

コンテナの一覧(全て)

docker ps -a

コンテナへの接続

docker attach [CONTAINER ID]
[code]$ docker attach e178aba66d58
bash-4.2#[/code]

コンテナから切断&停止

exit

コンテナの起動

docker start [CONTAINER ID]

コンテナの停止

docker stop [CONTAINER ID]

コンテナの削除

docker rm -f [CONTAINER ID]

コンテナの一括削除

docker rm -f `docker ps -a -q`

運用方法

イメージからコンテナを作成し、作業環境に変更があった場合はイメージとして保存します。
Docker Hubにイメージを保存しておくことで作業環境のバックアップを行うことができます。便利。

Docker Hubのアカウント作成

https://hub.docker.com/

Docker Hubのリポジトリ作成

自分の作業環境なのでprivateリポジトリを作成します。

Docker Hubへのログイン

docker login
[code]$ 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: kensuketamura
Password:
Login Succeeded[/code]

イメージの作成

docker commit -m “(commit message)” [CONTAINER ID] [USER]/[REPOSITORY]
[code]$ docker commit -m “first commit” e178aba66d58 kensuketamura/myworkspace
sha256:660d3e0e0eae484d8c189ba19d005d0aa2ed698308a56193fd547e73960f5b03

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kensuketamura/myworkspace latest 6b51ee3ea95b 6 minutes ago 165MB
amazonlinux latest 6133b2c7d7c2 7 weeks ago 165MB
[/code]

イメージのプッシュ

docker push [USER]/[REPOSITORY]
[code]
$ docker push kensuketamura/myworkspace
The push refers to a repository [docker.io/kensuketamura/myworkspace]
5000e80cdc64: Mounted from library/amazonlinux
latest: digest: sha256:ff157643b586422303f0f77f21a1ef57d637cbccce86550047712931a429e84d size: 529
[/code]

コンテナの復元

[code]$ docker pull kensuketamura/myworkspace
Using default tag: latest
latest: Pulling from kensuketamura/myworkspace
Digest: sha256:ff157643b586422303f0f77f21a1ef57d637cbccce86550047712931a429e84d
Status: Image is up to date for kensuketamura/myworkspace:latest

$ docker run -it kensuketamura/myworkspace /bin/bash
bash-4.2#
[/code]

Labellioでかんたん画像認識

Deep Learningによる画像認識をかんたんに行えるプラットフォーム「Labellio」を試してみた。
https://www.labell.io/
labellio

Labellioの設定

ドキュメントの通りモデルを作成する。
ラベルを登録すると自動的に画像を検索して学習データとして扱ってくれる。

今回は「世界の変なEXITマンが認識できるか」を検証する。

学習に使ったラベルは下記の通りである。
「EXIT」exit
「歩行者専用」walker
「トイレマーク」toilet
「工事中」working
「ゴーヤーマン」goyaman

acc-loss
「loss_test」と「loss_0」が低く、精度の高い学習結果となった。

画像認識の検証

いくつか画像をアップロードして検証してみる。
no-crossing
横断禁止マークは「EXIT」が一番近い結果となった。
色は違うが構図は似ている気がする。
goya
ゴーヤはさすが「ゴーヤーマン」が一番近い結果となった。
色だけでなく形で判断しているようだ。

世界のEXITマン

ここから田村が見つけた世界の少し変なEXITマンで検証していく。
exit-italy
海外でよく見る腕が短いEXITマン
一般的なEXITマンとほぼ同じなので正確に「EXIT」と認識している。

exit-gaudi
スペインのバトリョ邸のEXITマン
バトリョ邸は全て曲線でできていることからEXITマンも円形になっている。
学習させたデータの中で円形は「歩行者専用」のみだったことから結果が間違っている。
色は見てくれなかった。

exit-subway
イタリアのローマの地下鉄で見つけたEXITメン
複数人で走り抜けている標識でも「EXIT」と認識した。

exit-vatican
バチカン市国前の土産屋の地下のトイレ近くにあったEXITマン
袖付きで上品だからか「歩行者専用」の紳士と間違えてしまった。
色も形も違うが、不思議である。

画像認識のまとめ

Labellioでかんたんに画像認識を行うことができた。
精度を上げる為には例外となるデータを繰り返し学習させることが必要である。

バチカンEXITマンのように「なぜその結果になったのか」を追うことができないDeep Learningだが
大量の画像から特徴を学習し判別することから「らしい」「っぽい」といった人の感覚を知ることができる。
好きな画像をいくつか選ぶことで「明文化しにくい直感的な好み」を判別することができるかも知れない。

ニューラルネットワークを学ぶ

Deep Learning(深層学習)に用いられるニューラルネットワークについてのまとめ

  1. 脳の仕組み
  2. ニューラルネットワークの仕組み
    • 3層パーセプトロンとは何か
  3. ニューロンの仕組み
  4. Deep Learningでどう使うのか

脳の仕組み

脳は10%の神経細胞と90%のグリア細胞で構成されている。
グリア細胞は神経細胞を補助する役目であり、主役は神経細胞である。
神経細胞は電気信号によって情報のやりとりを行う。
神経細胞のことをニューロンと呼び、ニューロンのつなぎ目をシナプスと呼ぶ。

ニューラルネットワークの仕組み

脳の仕組みをコンピュータに再現しようとしたものがニューラルネットワークである。
いくつかニューラルネットワークの形があるが、3層パーセプトロンが有名である。

3層パーセプトロンとは何か

ニューロンの役割を果たすノードを種類ごとに分類し、同じ種類のノード同士では情報のやりとりを行わない。
ノードの種類は「入力層」「隠れ層(中間層)」「出力層」の3つに分類される。
隠れ層は複数種類のノード群から構成され、このノード群をユニットと呼ぶ。

ユニットを増やすことでより複雑な事が判別できるようになり
ユニット内のノードを増やすことで1つのことをより正確に判別できるようになる。

neuralnetwork

ニューロンの仕組み

ニューロンの集合体は複雑な処理を行うが、ニューロン単体の仕組みはシンプルである。
ニューロンに対しての入力が6つ(X1~X6)あるとした場合、それぞれの入力に対して重み(W1~W6)が設定されている。
入力の信号は0か1かで判断され、1の場合は重み分の数が加減算される。
最終的な重みの和が閾値を上回った場合はニューロンが「発火」し、次のニューロンに情報が伝達される。

W1(重み) × X1(入力) + W2 × X2 + … + W6 × X6 > 閾値 ?
(-1)×0+3×1+2×0+(-1)×1+1×1+(-2)×0 > 1 ?
3 > 1 ? →発火

閾値の符号を反転し左辺に統合することで右辺が0となり、下記の式で表すことができる。
この符号を反転した閾値は「バイアス」と呼ばれる。
formulaW1(重み) × X1(入力) + W2 × X2 + … + W6 × X6 + b(バイアス) > 0 ?
(-1)×0+3×1+2×0+(-1)×1+1×1+(-2)×0 -1 > 0 ?
2 > 0 ? →発火
neuron

Deep Learningでどう使うのか

ニューロンの仕組みのW(重み)とb(バイアス)を調整することで学習が進む。
膨大な数のニューロン(ノード)が存在するため、大量のデータによって学習を重ねる必要がある。
Wとbを調整するだけであることから、入力と出力の因果関係は得られなくなる。

人工知能を体系的に学ぶ

第3次人工知能ブームということでお勉強のまとめ
※認識の違いがあれば教えてください

  1. 人工知能(AI)とは何か
  2. 機械学習と深層学習の違い
    • Machine Learning(機械学習)とは何か
    • Deep Learning(深層学習)とは何か
  3. どう使い分けるか

人工知能(AI)とは何か

知的な行動を再現する技術の集合体を人工知能と呼び、その考え方が広義の意味の人工知能である。
ある特定の分野において人と同等かそれ以上の行動が再現できているように見えれば人工知能と呼ぶことができる。
コンピュータとソフトウェアで人工知能を実現する。

基本は チューリングテスト の考え方だが

人間の判定者が、一人の(別の)人間と一機の機械に対して通常の言語での会話を行う。
判定者が、機械と人間との確実な区別ができなかった場合、この機械はテストに合格したことになる。

犬や猫など言語を使用しなくとも知能を持っている場合もあるため、人の知能に留まらず「知的な行動をしているように見える」ことがポイントとなる。

機械学習と深層学習の違い

「人工知能」を実現するためには様々な方法がある。
第3次人工知能ブームでは「Machine Learning(機械学習)」や「Deep Learning(深層学習)」が注目を浴びている。
Deep LearningはMachine Learningの手法の1つである。

Machine Learning(機械学習)とは何か

与えられたデータを元に学習し、自律的に法則やルールを見つけ出す手法やプログラムである。
Machine Learningには統計的な手法やニューラルネットワークの仕組みを応用した方法がある。
machinelearningalgorithms
Machine Learning Mastery

統計的な手法では人が学習する内容を予め定義する必要があり、学習の方向性をコントロールすることができる。

Deep Learning(深層学習)とは何か

Machine Learningの手法の1つで生物の神経系を模したニューラルネットワークの構造を応用したものである。
認識や認知など感覚に関する学習を得意とする。
layers

学習する内容をニューラルネットワーク自身が見出し動作する。
学習の方向性をコントロールできず、どう学習したかの因果関係がわからないためブラックボックス化するデメリットがある。

どう使い分けるか

Deep LearningはMachine Learningの一部であるため、Machine Learningの手法の中から目的にあった手法を選択する必要がある。
解決したい問題が明確な場合は統計的な手法を採用し、解決したい問題が曖昧で複雑な場合はニューラルネットワーク的な手法を用いる。

SFで思い描きがちな「万能型人工知能」の実現は程遠く、現実的には目的に合わせた人工知能を目指し、その人工知能を組み合わせることで統合的な人工知能が実現できると考えている。

NginxでデフォルトのVirtualHostを設定する

NginxではリクエストのHostヘッダとserver_nameが一致しなかった場合、一番最初に読み込まれたVirtualHostの設定が適用される。
default_serverを記述することでデフォルトのVirtualHostを設定することができる。

ELBのヘルスチェックはデフォルトのVirtualHostに対してリクエストが行われる。
デフォルトのVirtualHostをそのままサービスに使用すると下記現象が発生する。
・サービスのアクセスログとELBヘルスチェックのアクセスログが混ざる
・IP制限やBasic認証を行うとELBからも見られなくなる →OutOfServiceになる
・設定ファイルが複雑になる

「デフォルトのVirtualHostとサービスのVirtualHostを分ける」ことで解決する。

[1]デフォルト用のVirtualHostを作成する
(1)設定ファイルを作る
/etc/nginx/conf.d/000-default.conf

[code]
server {
listen 80 default_server;
server_name localhost;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
[/code]

(2)ファイルを作成する

[code]
echo “index” > /usr/share/nginx/html/index.html
[/code]

[2]サービス用のVirtualHostを作成する
(1)設定ファイルを作る
/etc/nginx/conf.d/001-domain.com.conf

[code]
server {
listen 80;
server_name www.domain.com;
server_name domain.com;

[/code]