
米国AI開発者がゼロから教えるDocker講座⑥(かめさん)〜AWSにデータサイエンス環境を構築〜
初めまして、みずぺーといいます。
このnoteを機に初めて私を知った方のために、箇条書きで自己紹介を記述します。
年齢:28歳
出身:長崎
大学:中堅国立大学
専門:河川、河川計画、河道計画、河川環境
転職回数:1回(建設(2年9か月)→IT系年収100万up(現職3か月))
IT系の資格:R5.4基本情報技術者試験合格💮
今日は業務でdockerを用いて物体検出環境を構築する業務があるので、そのための予習をしておきます。
あと、この記事だけでは正直理解することは難しいと思います。
そのため、詳しく知りたい方や図解で理解を行いたい方は是非かめさんの動画を参考にしていただければと思います。
ゴール設定
今回は前回と違いHostの環境をaws上に設定し環境構築を行う。

AWSとは
DigitalOcean
AWS
Google Cloud Platform
この三つ等のクラウドプラットフォームが存在する。
この中でAmazonが提供するクラウドサービスがAWSとなる。
AWSに登録してEC2のサーバーを構築
AWSにログイン後にEC2にログインを行う

EC2画面のインスタンス起動から

名前:mydocker
アプリケーションおよびOSイメージ:Ubuntu選択
インスタンスタイプ:t2.micro選択(無料課金の範囲)
キーペア:新しいキーペアの作成
ネットワークの設定:任意の場所からログイン(本来業務ならNG)
ストレージ:20GiB、gp2
キーペア作成後デスクトップへ保存

ここまでで、EC2にサーバーを構築することができた。
AWSにローカルPCからサインインする
続いてEC2にローカルPCからサインインを行う。
そのために必要なこととしては
chmodによるキーペア(〇〇.pem)のセキュリティを強固に変更
username:ubuntu
hostname:先ほど作成したEC2サーバーのPublic DNS
それを元に
ssh -i xx.pem ubuntu@ec2-18.....
これを実行することによってローカルPC上でAWSにアクセス可能となる。

AWSのEC2にdockerを立てる
sudo apt-get update:apt-getをアップデートする
sudo apt-get install docker.io:dockerをインストールする
ここまで終わればEC2のサーバーにdockerがインストールされる。
docker images
をコマンドで入力してもpermission deniedでアクセスができない。
ここで必要となるのは
sudo gpasswd -a ubuntu docker
このコマンドを用いることによってubuntuにdockerのコマンドを楽に入力できるようになる。
Docker imageをAWSのインスタンスにアップロード
Dockerfileを直接AWSへ送る
Dockerfileを
まずはローカルでAWSに上げたいdockerファイルを作成する
FROM alpine
RUN touch test
このようなdockerfileを作成する。それではアップロードの手順をお教えする。
dockerfileのtarへの変換(docker save <CONTAINER ID> > myimage.tar)
sftp -i mydocker.pem ubuntu@<hostname>
put local/path [remote/path]
get remote/path [local/path]
この4つの手順が必要となる。
dockerfileのtar変換
docker save <CONTAINER ID> > myimage.tar
これでmyimage.tarのファイルが作成される。
sftpの準備
それでは
sftp -i mydocker.pem ubuntu@<hostname>
これでubuntuに送る準備を整える。
putによるローカルからAWSへのファイルの送信
put myimage.tar /home/ubuntu
本当にファイルを送信できたか確認
ssh -i xx.pem ubuntu@ec2-18.....
アクセス後に本当に/home/ubuntu直下にmyimage.tarが送られていることが確認できる。

AWSからローカルへファイルを転送
先ほどの操作と逆のことをやりたい場合には
sftp -i 〇〇.pem ubuntu@<hostname>
get <送りたいファイル>
でローカルへファイルを転送することができる。
tarからDocker imageに戻す
docker load < myimage.tar
このコマンドを打ち込むことによってdocker imageを立ち上げることができる。

dockerfileをローカルからAWS上に送る
それではローカルからAWS上へ第6回で作成したDockerfileを送ります。
そのファイルはjupyterをdocker上で立ち上げることが可能なファイルだった。
sftp -i mydocker.pem ubuntu@ec2....
これでまずはsftpでファイルを送れる状態にする。
続いてputコマンドを用いてローカルのDockerfileをAWS上へ送信する。

補足:dockerの容量保存場所
Dockerオブジェクトの保存場所(Linux):/var/lib/docker/
Docker daemonの設定ファイル:/etc/docker/daemon.json
{
"data-root":"/new/dockerdaemon/directory"
}
これで保存することができる。
AWS上でdockerを起動させてコンテナを構築

そのままではjupyterが起動できないため、ルールを変更する
インバウンドのルールを編集してjupyterを起動可能に

そうして
ec2....:8888
を入力することでブラウザでjupyterを起動することができる。

番外編:ubuntu内でユーザーの追加
よく使うユーザーの作成。
企業で働いていた中でずっと疑問に思っていたことが解決した。
全て先輩社員の方に構築をお任せしていたので、この辺りには疎かった。

sudo adduser --uid 2222 bbb
sudo adduser --uid 1111 aaa
の二つで作成されている。
このようにaaaとbbbが作成されている。

このように1111でログインした場合にはbbbにはファイルの作成権限がない

最後に
詳しく知りたい方や図解で理解を行いたい方は是非かめさんの動画を参考にしていただければと思います。
GW期間中やかめさんのTwitterで定期的に割引(30%OFF)が行われていますので、チェックするようにしていただければと思います。