AWSのインスタンスにSSHでアクセスする
パブリックDNSはインスタンスを停止すると変わるので、都度確認が必要
ubuntuのhomeディレクトリが見れることを確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<Command> [~/desktop] $ ssh -i mydocker.pem ubuntu@<public DNS> Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-1045-aws x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Tue May 11 05:57:09 UTC 2021 System load: 0.0 Processes: 92 Usage of /: 17.4% of 7.69GB Users logged in: 0 Memory usage: 19% IP address for eth0: 172.31.24.179 Swap usage: 0% * Pure upstream Kubernetes 1.21, smallest, simplest cluster ops! https://microk8s.io/ 30 packages can be updated. 15 of these updates are security updates. To see these additional updates run: apt list --upgradable The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. ubuntu@ip-172-31-24-179:~$ pwd /home/ubuntu ubuntu@ip-172-31-24-179:~$ cd / ubuntu@ip-172-31-24-179:/$ ls bin home lib64 opt sbin tmp vmlinuz.old boot initrd.img lost+found proc snap usr dev initrd.img.old media root srv var etc lib mnt run sys vmlinu |
これで無事にAWSで立てたインスタンスに入れるようになりました。
AWSのインスタンスにDockerをセットアップする
次にAWSインスタンスでDockerが使えるようセットアップをしていこう。
1 2 3 4 5 6 |
<Command> [~] $ ssh -i mydocker.pem ubuntu@<public DNS> ubuntu@ip-172-31-24-179:~$ sudo apt-get update ubuntu@ip-172-31-24-179:~$ sudo apt-get install docker.io ubuntu@ip-172-31-24-179:~$ sudo gpasswd -a ubuntu docker ubuntu@ip-172-31-24-179:~$ exit (一度出て、入り直しdocker imagesで権限があることを確認) |
AWSインスタンスにDocker imageをアップロードする
AWSインスタンスにDocker imageをアップロードする方法は以下の3つがあります。
- Dockerレジストリを使う
- DockerfileをホストPC→AWSインスタンスに送り、AWS上でビルドする
- Docker imageをtarファイルに圧縮して送る。
今回は、❷、❸を試してみようと思います。
まずは❸を見ていこう、あるDockerfileを.tarファイルに変換します。
$ docker save <IMAGE ID> > <file.tar> : <IMAGE ID>を<filename>.tarとして保存する
1 2 3 |
[~/desktop/test_folder] $ docker save fc2156571367 > <myimage.tar> [~/desktop/test_folder] $ ls Dockerfile myimage.tar |
次に、SFTPを使い.tarファイルをAWSサーバーにputする、またはAWSサーバーからgetする方法を見ていこう。
$ sftp -i <.pem file> <username>@<hostname> : SFPTでAWSサーバーに入る
$ put <local/file/path> [remote/path] : <local/file/path>を[remote/path]に保存する
$ get <remote/file/path> [local/path] : <remote/file/path>を[local/path]に保存する
1 2 3 4 5 6 7 8 9 10 |
=======.tarファイルがあるディレクトリに移動========= [~/desktop/test_folder] $ cd .. =======AWSインスタンスにsftpで入る========== [~/desktop] $ sftp -i mydocker.pem ubuntu@<public DNS> Connected to ec2-18-116-100-228.us-east-2.compute.amazonaws.com. ========AWSサーバーの中を確認======== sftp> pwd Remote working directory: /home/ubuntu =========.tarファイルをAWSサーバーに送る========= sftp> put temp_folder/myimage.tar /home/ubuntu |
ここまででAWSサーバーに.tarファイルが送れたかと思います。次にAWSサーバーにSSH接続して
.tarファイルがあるか確認してみよう。
1 2 3 4 5 6 |
[~/desktop] $ ssh -i mydocker.pem ubuntu@<public DNS> Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-1047-aws x86_64) ubuntu@ip-172-31-24-179:~$ pwd /home/ubuntu ubuntu@ip-172-31-24-179:~$ ls myimage.tar |
AWSサーバー上にmyimage.tarがありました。
おまけですが、AWSサーバーから.tarファイルをgetするやり方も知っておこう。
1 2 3 4 5 6 7 |
sftp> ls myimage.tar sftp> get myimage.tar . Fetching /home/ubuntu/myimage.tar to ./myimage.tar sftp> exit [~/desktop] $ ls myimage.tar |
AWSサーバーからmyimage.tarがgetできているのが確認できました。
次にAWSサーバー上で.tarファイルを解凍し、Docker imageに戻してみよう。
$ docker load < <file.tar> : <file.tar>をDocker imageに解凍する
1 2 3 4 5 6 7 8 9 10 |
<span class="span-stk-fs-m">[~/desktop] $ ssh -i mydocker.pem ubuntu@<public DNS> ubuntu@ip-172-31-24-179:~$ ls myimage.tar </span>ubuntu@ip-172-31-24-179:~$ docker load < myimage.tar b2d5eeeaba3a: Loading layer [============================================>] 5.88MB/5.88MB 7f4ec8443c9f: Loading layer [==================================================>] 2.048kB/2.048kB Loaded image ID: sha256:fc2156571367e7496f8efa76d3e76f9cef7fda7842c90ea2357446be39cf1b08 ubuntu@ip-172-31-24-179:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> fc2156571367 2 hours ago 5.61MB |
.tarファイルをdocker imageに展開することができたかと思います。
続いて❷の方法をやってみたいと思います。
sftpでAWSサーバーに入り、Dockerfileをputしてきます。その後SSH接続でAWSサーバーに入り、
Dockerfileをビルドします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
====sftpで入り、dsenv_builf/DockerfileをAWS上のhome/ubuntuにputする==== [~/desktop] $ sftp -i mydocker.pem ubuntu@<public DNS> sftp> put dsenv_build/Dockerfile /home/ubuntu sftp> exit =============SSHでAWSサーバーに入り、ビルドコンテキスト(Dockerfileを置くディレクトリ)として dsenv_buildを作成、そこにDockerfileを移動=============== [~/desktop] $ ssh -i mydocker.pem ubuntu@<public DNS> ubuntu@ip-172-31-24-179:~$ mkdir dsenv_build ubuntu@ip-172-31-24-179:~$ mv Dockerfile dsenv_build/ ubuntu@ip-172-31-24-179:~$ cd dsenv_build/ =======docker image作成=========== ubuntu@ip-172-31-24-179:~dsenv_build $ docker build . Error processing tar file(exit status 1): write /opt/anaconda3/lib/libmkl_mc.so: no space left on device |
これでdocker imageは作成できます。
最後に注目して欲しいのですが、space left on deviceと容量が足りませんと出てしまいます。
次回はEC2のメモリ容量を8→20GBに変更し、実際にdocker buildするところまでやっていきましょう。
今回はこの辺で、ばいばい👋
$ ssh <username>@<hostname>