DockerでUbuntu18.04+Pythonの機械学習用の環境を1時間で用意するチャレンジをしてみた

# はじめに
この記事は[とりあえずなんでも Advent Calendar 2019](https://adventar.org/calendars/4820)の21日目の記事です。

##とある日に思った
Windows環境にPythonとpyTorchを入れて適当に機械学習を回していたのですが、突然
「あー、自由にいじれるLinuxがほしい。でもVMはなんかかっこ悪いし、重たいしやだ（偏見）」
「DockerでUbuntu入れてみるとDockerの勉強になったりするのでは？」
「なんかモダンな環境構築っぽい（知識少なすぎて他の構築方法VMくらいしか知らない）」
「1時間あるし、構築チャレンジするか！！」
と、完全に思いつきだけで構築チャレンジをしてみました。
なので、Win10にDockerを使ってUbuntu環境を作る、です。
その時のメモを公開します。

##自分のスペック
・VM構築経験なし（なのに偏見持ち）
・Linux初心者（実は初めてのLinux環境構築）
・Docker初心者（1回触ったくらい）

という初心者丸出しのスペックなので、相当躓きました。
躓いた箇所を全部メモしておいたので、温かい目で見てください。

##1時間もかかるの？
そんなことありません。ある程度知っている方がやれば1時間どころか15分くらいで終わると思います。
躓いて、調べて、PC再起動して、~~野暮用で時間を消費して~~、間にこのメモを書きつつ実行してを全て含めて、1時間です。
（記事にするにあたって色々MarkDownで囲っただけなので、コマンドのメモとかも全部その1時間内に書いています）
タイマーを使って何度か時間を確認していたので、時間軸でお楽しみください。

### それでは構築スタート。
https://www.docker.com/get-started
からDocker Desktopを入手
  サインインが必要
  適当にサインアップしてゲット

###～2分～
installer起動して、すべてデフォルトでポチポチ
その間にUbuntuを起動する方法を調べておく
	https://weblabo.oscasierra.net/docker-ubuntu1604/

```
	docker pull ubuntu:16.04
	docker run -it -d --name ubuntu1604 ubuntu:16.04
```
でOKっぽいが、18.04を使うか
install完了にサインアウトが必要らしく、投げ出される
###～5分～
PC起動待ち
###～7分～
Hyper-V無効化されていると言われる
有効化したいので再起動
なんか更新プログラムも走って2回再起動した
~~野暮用もあり時間を消費する~~
###～24分～
コマンドプロンプトから

```
docker pull ubuntu:18.04
```
を打ち込む

```
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for conne	ction (Client.Timeout exceeded while awaiting headers)
```
dockerのsettingsからプロキシ設定する
リトライしてok

###～27分～
	docker run -it -d --name ubuntu1804 ubuntu:18.04
	docker exec -it ubuntu1604 /bin/bash
bashが起動できた！
###～28分～
pythonが入っていないので入れることにした
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-linux-python.html

```
$ apt-get install python3
```
```
	E: Unable to locate package python3
```

https://qiita.com/hatorijobs/items/c503840c13672e12d188
	え、vimも入っていないの…

```
	$apt update
```
Connection refusedする。IPは91.189.88.24 の80番ポート

```
	$ping 91.189.88.24
	ping: command not found
```

え、pingも入っていないの…！？
	まぁつながらないのは99%くらいプロキシだろうからいいか。

```
	$export HTTP_PROXY=[使っているプロキシ]
	$export HTTPS_PROXY=[使っているプロキシ]
```
これでも駄目。
	https://qiita.com/48saaan/items/47f8d9cd3321c3bcfce6
	aptは小文字らしい。Case Sensitiveなの知らなかった。

```
	$export http_proxy=[使っているプロキシ]
	$export https_proxy=[使っているプロキシ]
```
```
	$apt update
```
いけた。
###～40分～
```
	$apt install vim
	$apt install python3.8
```	
いけたいけた。

~~ここでお菓子を取りに行って時間を消費。~~

###～48分～
pipを入れようと思う

```
	$curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
```
curlないの！？

```
    $apt install curl
    $curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
```

★ちなみにcurlは大文字のHTTP_PROXYを参照する…

```
	$python3.8 get-pip.py
	ModuleNotFoundError: No module named 'distutils.util'
```
https://www.bioerrorlog.work/entry/install-pip-pip3-ubuntu
	pip3はget-pip.pyから入れられないのか…

```
	$apt install python3-pip
```
入った。
	試しにnumpyとか入れてみるか。

```
	$pip3 install numpy
```
★16.04の版ではここでエラー。python2系と3系が同居してしまっていた。
		ImportError: cannot import name main
		https://qiita.com/Suzukaze31/items/e6d15ddd9ffcd5e6c246
		二つ目の対処をやればOKだった。

めでたくUbuntu+python環境完成！！！
###～57分～
調子に乗ってtorch入れる

```
	$pip install torch
```

確認する。

```
$python3
	>>>import torch
	>>>x=torch.ones(2,2)
	>>>print(x)
	>>>exit(0)
```

2x2の単位行列が作れたことを確認したのでOK。
ここで60分。

# 終わりに
今の時代こんなに簡単に環境構築できるとは。そして自分のスキルのなさを痛感しました。
dockerfile書けとか言われてもまだ書けないので、今度書いてみます。
なんにせよ、好きにいじれるLinux環境をゲットできたので、色々やってLinux勉強しようと思います。