見出し画像

米国AI開発者がゼロから教えるDocker講座⑥(かめさん)〜AWSにデータサイエンス環境を構築〜

初めまして、みずぺーといいます。
このnoteを機に初めて私を知った方のために、箇条書きで自己紹介を記述します。

  • 年齢:28歳

  • 出身:長崎

  • 大学:中堅国立大学

  • 専門:河川、河川計画、河道計画、河川環境

  • 転職回数:1回(建設(2年9か月)→IT系年収100万up(現職3か月))

  • IT系の資格:R5.4基本情報技術者試験合格💮

今日は業務でdockerを用いて物体検出環境を構築する業務があるので、そのための予習をしておきます。
あと、この記事だけでは正直理解することは難しいと思います。
そのため、詳しく知りたい方や図解で理解を行いたい方は是非かめさんの動画を参考にしていただければと思います。

ゴール設定

今回は前回と違いHostの環境をaws上に設定し環境構築を行う。

Hostをaws上で構築

AWSとは

  • DigitalOcean

  • AWS

  • Google Cloud Platform

この三つ等のクラウドプラットフォームが存在する。

この中でAmazonが提供するクラウドサービスがAWSとなる。

AWSに登録してEC2のサーバーを構築

AWSにログイン後にEC2にログインを行う

EC2にログインを行う

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

EC2のインスタンス起動
  • 名前:mydocker

  • アプリケーションおよびOSイメージ:Ubuntu選択

  • インスタンスタイプ:t2.micro選択(無料課金の範囲)

  • キーペア:新しいキーペアの作成

  • ネットワークの設定:任意の場所からログイン(本来業務ならNG)

  • ストレージ:20GiB、gp2

キーペア作成後デスクトップへ保存

pemファイルが作成

ここまでで、EC2にサーバーを構築することができた。

AWSにローカルPCからサインインする

続いてEC2にローカルPCからサインインを行う。
そのために必要なこととしては

  • chmodによるキーペア(〇〇.pem)のセキュリティを強固に変更

  • username:ubuntu

  • hostname:先ほど作成したEC2サーバーのPublic DNS

それを元に

ssh -i xx.pem ubuntu@ec2-18.....

これを実行することによってローカルPC上でAWSにアクセス可能となる。

ローカル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を作成する。それではアップロードの手順をお教えする。

  1. dockerfileのtarへの変換(docker save <CONTAINER ID>  > myimage.tar)

  2. sftp -i mydocker.pem ubuntu@<hostname>

  3. put local/path [remote/path]

  4. 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が送られていることが確認できる。

myimage.tarが確かにAWS上に送られていることを確認

AWSからローカルへファイルを転送

先ほどの操作と逆のことをやりたい場合には

  • sftp -i 〇〇.pem ubuntu@<hostname>

  • get <送りたいファイル> 

でローカルへファイルを転送することができる。

tarからDocker imageに戻す

docker load < myimage.tar

このコマンドを打ち込むことによってdocker imageを立ち上げることができる。

docker imageが立ち上がっている

dockerfileをローカルからAWS上に送る

それではローカルからAWS上へ第6回で作成したDockerfileを送ります。

そのファイルはjupyterをdocker上で立ち上げることが可能なファイルだった。

sftp -i mydocker.pem ubuntu@ec2....

これでまずはsftpでファイルを送れる状態にする。

続いてputコマンドを用いてローカルのDockerfileをAWS上へ送信する。

putでファイルを転送

補足:dockerの容量保存場所

Dockerオブジェクトの保存場所(Linux):/var/lib/docker/

Docker daemonの設定ファイル:/etc/docker/daemon.json

{
"data-root":"/new/dockerdaemon/directory"
}

これで保存することができる。

AWS上でdockerを起動させてコンテナを構築

前回のセクションで作成したdockerファイルを立ち上げ成功

そのままではjupyterが起動できないため、ルールを変更する

インバウンドのルールを編集してjupyterを起動可能に

タイプを全てのトラフィックに変更

そうして

ec2....:8888

を入力することでブラウザでjupyterを起動することができる。

ブラウザでjupyterが起動できることを確認

番外編:ubuntu内でユーザーの追加

よく使うユーザーの作成。

企業で働いていた中でずっと疑問に思っていたことが解決した。

全て先輩社員の方に構築をお任せしていたので、この辺りには疎かった。

awsにユーザーを追加する
sudo adduser --uid 2222 bbb
sudo adduser --uid 1111 aaa

の二つで作成されている。

このようにaaaとbbbが作成されている。

/home/の中にユーザーが作成

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

ファイルを権限で管理

最後に

詳しく知りたい方や図解で理解を行いたい方は是非かめさんの動画を参考にしていただければと思います。

GW期間中やかめさんのTwitterで定期的に割引(30%OFF)が行われていますので、チェックするようにしていただければと思います。

この記事が気に入ったらサポートをしてみませんか?