MacBook Pro M1でDockerの環境構築

# 初めに
**なぜDockerなのか？**
Dockerは、バーチャルで使えるパソコンです。なので、ネットを経由して持ち運べます。したがって、**自分の作った環境**と同じ環境を、会社のパソコン、新しく買ったパソコンで構築することができます。例えば、Macの上に**Docker（仮想環境）**を構築すればwindowsやLinux環境を構築することができます。また、Dockerはバーチャルなので、環境構築が上手くいかなくなった時や捨ててやり直すことができます。また、必要なくなった時に**いつでも捨てることができます**。このDockerは、今やエンジニアの必須のツールとなっています。そこで今回は、**最速でPythonのデータ分析の環境構築**します。Mac上に、UbuntuというLinuxのOSを立てて、そこにAnacondaをインストールします。そして、JupyterLabを立ち上げるまで行います。

**今回の章立て**

+ Dockerとは？
+ Docker環境構築
+ Docker Hub
+ 最後に
+ 参考文献

# Dockerとは？

**メリット**

+ コマンドを数行打つだけで構築できる
+ コードで環境やファイルの管理ができる
+ どのパソコンでも同じ環境ができる（チーム開発で便利）
+ Dockerデプロイ（Dockerの環境ごとデプロイ可能）

# Docker環境構築
まず、[ここ](https://www.docker.com/get-started)をクリックしてDockerをインストールしましょう！Docker DesktopのDownload for Mac - Apple Chipをダウンロードします。その後、適宜アカウントの作成を行なって、サインインを行なってください。

```
docker run hello-world
```
Hello from Docker!と表示されれば、インストールが無事にできています。
次に、デスクトップにMyDockerフォルダを作成します。

```
cd /Users/username/Desktop/MyDocker
```
今回はデスクトップにMyDockerフォルダを作成します。そこにDokerfileを作成します。

```
Vim Dockerfile
```

今回作成したDockerfileは、Dockerのイメージを自動で作成してくれるファイルです。 docker build . と入力するだけで、 Dockerシステムは Dockerfileを自動で読み込み、書かれている内容の通りの Dockerイメージを作成してくれます。冒頭でも述べましたが、普通アプリケーションの開発環境を整える際は、OS 内のコマンドで必要なソフト、例えば Apache や git、 Vim などをインストールすると思いますが、Dockerfileを使うとそうした一連の作業を自動で行うことが可能になります。その結果、開発環境の構築にかかる時間を大幅に短縮化し、 誰が行なっても同じ開発環境を作ることができるようになります。そして各ソフトウェアのバージョン相違等の環境ミスも無くせる！というメリットがあるという訳です。

**Dockerfile**
↓
**Docker IMAGE**
↓
**コンテナ作成・Docker Hubへの公開・AWSで使用・イメージの改善**


ここには、DockerコンテナにLinuxのubuntuを立てて、そのubuntu上にAnacondaをインストールする記述がされています。先ほど作成したDockerfileに書き込みましょう。Vimへの書き込み方は過去の私の[記事:step3](https://qiita.com/seiji1997/items/c2d9ee9e8e85d8493243)に書いてあります。

```
FROM ubuntu:latest

RUN apt-get update && apt-get install -y sudo wget vim curl gawk make gcc

RUN wget https://repo.continuum.io/archive/Anaconda3-2019.03-Linux-x86_64.sh && \
    sh Anaconda3-2019.03-Linux-x86_64.sh -b  && \
    rm -f Anaconda3-2019.03-Linux-x86_64.sh && \
    sudo curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -  && \
    sudo apt-get install -y nodejs

ENV PATH $PATH:/root/anaconda3/bin

RUN pip install --upgrade pip
RUN pip install pandas_datareader
RUN pip install mplfinance

RUN wget --quiet http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -O ta-lib-0.4.0-src.tar.gz && \
    tar xvf ta-lib-0.4.0-src.tar.gz && \
    cd ta-lib/ && \
    ./configure --prefix=/usr && \
    make && \
    sudo make install && \
    cd .. && \
    pip install TA-Lib && \
    rm -R ta-lib ta-lib-0.4.0-src.tar.gz

RUN mkdir /workspace

CMD ["jupyter-lab", "--ip=0.0.0.0","--port=8888" ,"--no-browser", "--allow-root", "--LabApp.token=''"]
```

Buildします（M1 Macには--platform linux/amd64が必要です）。

```
docker build --platform linux/amd64 . -t machinelearning:latest
```
「Successfully built」と表示されたら完了です。

下記のコマンドで確認しましょう！作成した名前がREPOSITORYに記載されていれば成功です(初めて作成する場合は時間がかかります)。

```
docker images
```

次にコンテナを作成します。作成した名前をREPOSITORYから見つけて、そこに記載されているIMAGE IDをコピーして以下のコードのIMAGE IDに記入してください。ここ（MyDocker:/workspace）の部分でMyDockerからworkspaceへマウントしています(usernameとIMAGE IDを変更することを忘れないでください)。

```
docker run -p 8888:8888 -v /Users/username/Desktop/MyDocker:/workspace --name machinelearning IMAGE ID
```

起動中のコンテナ一覧を確認しましょう。

```
docker ps
docker ps -a # 起動してる・していないコンテナ全て表示
```

起動しているDockerのコンテナ操作するコマンド

```
# 起動しているコンテナを止める
docker stop machinelearning 
 
# Dockerfileを持っているディレクトリ上でこのコマンドを打つことでDocker imageを始めることができます
docker start machinelearning
```

以下を打つことでいつでもjupyter labに入ることができる。

```
http://localhost:8888/
```

以下のコマンドでコンテナ内に入ることができます。コンテナの中に入ることで新たにパッケージのインストールができます。

```
docker exec -it machinelearning bash
```

tensorflowのインストールを行います。

```
pip install tensorflow
```

exitでコンテナから出られます。

```
exit
```
コンテナの削除方法（dockerfileさえあれば作成し放題・捨て放題）

```
docker rm CONTAINER ID # docker containerの削除
docker rmi IMAGE ID　# docker imageの削除
```

**コンテナとPC上にあるファイルのコピーの操作**

コンテナにあるファイルを、自分のパソコンにコピーする方法

```
docker cp machinelearning:/workspace/test1.ipynb C:¥¥Users¥¥username¥¥Desktop¥¥MyDocker
```

自分のパソコンにあるファイルを、コンテナ内にコピーする方法

```
docker cp C:¥¥Users¥¥username¥¥Desktop¥¥MyDocker¥¥test3.ipynb machinelearning:/workspace/
```

コンテナ内のディレクトリにあるファイルのすべてを、自分のパソコンにコピーする方法

```
docker cp machinelearning:/workspace/. C:¥¥Users¥¥username¥¥Desktop¥¥MyDocker¥¥
```

自分のパソコンにあるすべてのファイルを、コンテナ内のディレクトリにコピーする方法

```
docker cp C:¥¥Users¥¥username¥¥Desktop¥¥MyDocker¥¥. machinelearning:/workspace/
```

macの場合、マウントしているのでコンテナで作ったファイルは、自分のパソコンでも見たり操作することができるし、自分のパソコンで作ったファイルは、コンテナ内にも反映されます。

# Docker Hub
せっかくなので[Docker Hub](https://www.docker.com/products/docker-hub)を使用しましょう！Docker HubではこのようにDockerイメージを入手できます（欲しい環境（今回の例はmysql）を検索して手に入れます）。今回は自分でDockerfileを作成して使いましたが、自分の欲しいファイルがあればそれを使用しましょう！

![スクリーンショット 2022-01-25 9.34.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/896292/47a1392d-6cfe-cff8-bad6-a2182eea6eb8.png)

Docker imageからコンテナを簡単にBuildできます。

![スクリーンショット 2022-01-25 9.38.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/896292/233c928d-1bc3-e514-b436-5eefbf42aa76.png)

# 最後に
今回は入門編として、Dockerのアカウント作成からDockerコンテナの作成とjupyter labに入るところまで行いました！今回作成したDockerは次回の記事で使用するので、ぜひそちらも合わせて見てみてください！いつか、Docker composeやAWS上にDockerを構築する！とかを記事にまとめたいですね。Dockerって便利ですよね！初めはその全体像がよくわからないと思います（私もわからなかったので避けていた時期がありました(T ^ T)）。私の場合は、全体像のイメージ図を自分で書いたり、後述の参考文献を読んだりして理解しました！Dockerは便利なので、これからガンガン使用して行きましょう！

# 参考文献
参考にさせて頂きました。大変勉強になります。ありがとうございます(T ^ T)

[さわって学ぶクラウドインフラ　docker基礎からのコンテナ構築](https://www.amazon.co.jp/さわって学ぶクラウドインフラ-docker基礎からのコンテナ構築-大澤-文孝/dp/4296106422)
[Docker環境構築入門](https://www.youtube.com/watch?v=VIzLh4BgKck)
[Dockerfileの書き方と使い方](https://blog.codecamp.jp/docker-file-how-to)
[docker コマンド](https://qiita.com/thirota/items/dcfc43cb042448a8f8aa)
[Pythonのデータ分析の環境構築](https://www.youtube.com/watch?v=yoBvz39X55w&t=271s)