見出し画像

クラウドでサクッと実現する学習用使い捨てLinuxの話

今回の記事では、私のLinuC の学習で役に立っている『Docker Machineを活用して簡単にEC2のLinuxを構築する方法』をお届けします。
以前に投稿した以下の記事の

さらに、Docker Machine を使うとコマンドを使って Docker Engine がインストールされた Linux を簡単に作成することができます。私はドライバをAWS EC2 インスタンスとして利用していました。ここで作成した Linux にSSHログインも可能なため、学習用マシンも手に入ります。そしてこのインスタンスは不要になればコマンド一発で削除できます。コンテナではない仮想マシンなのでパーティションを切ったり、ファイルシステムを作成したりなどハチャメチャ出来ます。必要な時だけ作れば良いので、料金の無駄も省けます。本来の使い方ではないですが、裏技的にかなりオススメです。

の部分を細かく見ていきます。

----- この記事が役に立つ人 -----

✅ LinuC / LPIC の学習環境に困っている
✅ ハチャメチャにできて、使い捨てにできるLinuxが欲しい
✅Windows PCで気軽にLinuxを簡単に触りたい

----- 記事がすぐに役立つ前提 -----

かなり長くなってしまうので環境構築の部分は基本的に省略します。記事の最後に、役立つnote記事を紹介させていただきます。

Windows PC を普段使用している
    ※もちろんMacでもいいです、若干異なる部分があるだけです
    ※この記事では、コマンドプロンプトでの操作です
                                              ⇩
           Windowsキー + R 👉 "cmd" で簡単に起動できて便利ですよね
◆Docker と Docker Machine のコマンドが操作端末から使用可能
    ※もっとも重要です
◆AWSアカウントを持っている
    ※VPC、サブネットなどEC2が稼働できる環境の準備ももちろん必要
    ※権限の足りているIAMユーザーの作成とそのアクセスキー情報も必要
                                              ⇩
        .awsフォルダ配下のcredentialsファイルに登録してあることが望ましい
<公式ドキュメント>
Windows での AWS CLI バージョン 2 のインストール、更新、アンインストール
設定ファイルと認証情報ファイルの設定

----- Docker Machineについて -----

そもそも何❓

Lin』さんの記事から引用させていただきます。そこまで深掘りしなくてもこの理解で問題ありません。

Dockerを動かすホスト環境をコマンドライン上から構築できるようにするためのツールです。

どうやって環境構築するの❓

これは簡単なので紹介しておきます。

.exeファイルをダウンロードして、ファイル名を変更してしかるべき場所に格納する

です。GitHubに.exeファイルがあるので任意のもので良いですが、一先ず最新のリリースのdocker-machine-Windows-x86_64.exeを自分のPCにダウンロードしてください。そして、docker-machine.exeとファイル名を変更し、

C:\Users\ログインユーザー
           👆この場所で以後のコマンドを打ちます

docker-machine.exeを置きましょう。パスを通すこともした方が良いとは思いますが、コマンドプロンプトを立ち上げたときのデフォルト場所で作業すればよいと思いますので、一先ずここに置いておけばよいです。

Git BASHを使用している方であれば
公式ドキュメントDocker Machine の直接インストールをご確認ください。

----- EC2でDockerホスト作成 -----

ドライバに amazonec2 を指定して作成指示

その他、必要なオプションがあれば諸々指定します。指定しなければデフォルト値になります。デフォルトAMIはUbuntuです。
予めテキストで書いておき、それをコピペしてコマンドを走らせれば、必要になときに簡単に冪等性を担保してDockerホストのEC2ができてしまうというわけです。こりゃ便利😊
⭐docker-machine createコマンドを実行
C:\Users\mevius>docker-machine create ^ 👈改行文字「^」は、Bashでは「\(バックスラッシュ)」に置き換える
--driver amazonec2 ^
--amazonec2-region ap-northeast-1 ^
--amazonec2-vpc-id 「VPC ID」 ^
--amazonec2-subnet-id サブネットID ^ 👈パブリックサブネットを指定
--amazonec2-security-group セキュリティグループ名 ^
docker-host01 👈名前は任意
Running pre-create checks...
Creating machine...
(docker-host01) Launching instance...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with ubuntu(systemd)...
Installing Docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running! 👈EC2インスタンスが作成されて起動した
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env docker-host01

実際にマネジメントコンソールも確認、うん当たり前ですがちゃんと出来ています。

画像2

現在のDockerホストの状態

⭐Dockerホストの一覧を確認してみる
C:\Users\mevius>docker-machine ls
NAME            ACTIVE  DRIVER      STATE    URL                        SWARM  DOCKER      ERRORS
docker-host01   -       amazonec2   Running  tcp://3.112.245.197:2376          v19.03.13
          👆アクティブじゃない

----- 作成したDockerホストを操作対象に -----

先ほど作成し起動したEC2を、操作対象としてのDockerホストに切り替えます。
⭐操作対象にするために必要な環境変数を表示
C:\Users\mevius>docker-machine env docker-host01
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://3.112.245.197:2376
SET DOCKER_CERT_PATH=C:\Users\mevius\.docker\machine\machines\docker-host01
SET DOCKER_MACHINE_NAME=docker-host01
SET COMPOSE_CONVERT_WINDOWS_PATHS=true
REM Run this command to configure your shell:
REM    @FOR /f "tokens=*" %i IN ('docker-machine env docker-host01') DO @%i
        👆これをコマンドとして打ちなさいとのこと(これでまとめて設定してくれる)、ちなみにOSが違うとこの部分が全然違う

切り替えの実施とdocker runコマンド実施

切り替えてから一応何かコンテナを起動し動かしてみる。
C:\Users\mevius>@FOR /f "tokens=*" %i IN ('docker-machine env docker-host01') DO @%i

C:\Users\mevius>docker-machine ls
NAME            ACTIVE   DRIVER      STATE     URL                         SWARM   DOCKER      ERRORS
docker-host01   *        amazonec2   Running   tcp://3.112.245.197:2376            v19.03.12
                👆アクティブになった

// とりあえず試しでdocker runコマンドを実行
C:\Users\mevius>docker run docker/whalesay cowsay "Hello! I'm a Whale."
Unable to find image 'docker/whalesay:latest' locally
latest: Pulling from docker/whalesay
Image docker.io/docker/whalesay:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Pull complete                                                                                                                                             909cd34c6fd7: Pull complete                                                                                                                                             0b9bfabab7c1: Pull complete                                                                                                                                             a3ed95caeb02: Pull complete                                                                                                                                             00bf65475aba: Pull complete                                                                                                                                             c57b6bcc83e3: Pull complete                                                                                                                                             8978f6879e2f: Pull complete                                                                                                                                             8eed3712d2cf: Pull complete                                                                                                                                             Digest: sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b
Status: Downloaded newer image for docker/whalesay:latest
_____________________
< Hello! I'm a Whale. >
---------------------
   \
    \
     \
                   ##        .
             ## ## ##       ==
          ## ## ## ##      ===
      /""""""""""""""""___/ ===
 ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
      \______ o          __/
       \    \        __/
         \____\______/

C:\Users\mevius>docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

C:\Users\mevius>docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
c20cc54f9204        docker/whalesay     "cowsay 'Hello! I'm …"   42 seconds ago      Exited (0) 40 seconds ago                       dreamy_mendel
👆直前のdocker runコマンドで作成したコンテナ

これでDocker Imageなどをダウンロード(pull)しても、EC2の方にデータが落とされるので、ローカルPCの方には溜まりません😀

ちなみに、この記事の主目的はLinuxを操作することにあるのですが、LinuC 101(Version10.0)ではDockerについてや基本コマンドも問われます。

この書籍で紹介されるコマンド+αくらいはおさえて損はないです。ちょこっとだけですし。

あずき本(試験範囲)のコマンドをもうちょっと実用的におさえたい場合、こちらの書籍の前半部分の基本コマンド(掛け合いだったり図が多く、初学者でもすんなり頭に入ります)を理解して試験に臨めば得点源になります。ローカルPCのDocker 環境でも良いですが、基本コマンドは普通に活用できる状態にしておくのが良いと思います。
あと、この本でAWSアカウントの準備に関連する情報も載っていますので、この記事の情報と併せて読むと環境準備はバッチリかと思います。

実際私はこれらの基本コマンドを普段使いできる状態で、Ping-t を解いたり試験も受けましたが、Docker に関する問題は一切間違えなかったですし、自信をもって即答できたのでペースを掴めました。

----- 作成したDockerホストにSSHログイン -----

FYI

『docker-machine create』コマンドを実行し、Dockerホストを作成すると、キーペアが自動で作成されます。ここに鍵ファイルがあることなどは、別に知らなくても良いですが、気になってしまう方もいると思うので一応載せておきます。
C:\Users\mevius\.docker\machine>tree
フォルダー パスの一覧
ボリューム シリアル番号は AEAA-8ED3 です
C:.
├─certs
└─machines
   └─docker-host01 👈先ほど作成したホスト名のフォルダが作成されている

⭐このフォルダにあるファイルを確認してみる
C:\Users\mevius\.docker\machine\machines\docker-host01>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は AEAA-8ED3 です
C:\Users\mevius\.docker\machine\machines\docker-host01 のディレクトリ
2020/09/07  10:05    <DIR>          .
2020/09/07  10:05    <DIR>          ..
2020/09/07  10:03             1,046 ca.pem
2020/09/07  10:03             1,086 cert.pem
2020/09/07  10:05             3,806 config.json
2020/09/07  10:01             1,675 id_rsa 👈秘密鍵
2020/09/07  10:01               381 id_rsa.pub 👈公開鍵
2020/09/07  10:03             1,679 key.pem
2020/09/07  10:03             1,679 server-key.pem
2020/09/07  10:03             1,127 server.pem
              8 個のファイル              12,479 バイト
              2 個のディレクトリ  1,874,068,512,768 バイトの空き領域

これがやりたかった、SSHログイン実行❕

なんてことはない、下記のような簡単なコマンドを打つだけ。秘密鍵ファイルとか何にも考えなくて大丈夫です。はぁ~楽ちん♬
C:\Users\mevius>docker-machine ssh docker-host01
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-1052-aws x86_64)
* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage
 Get cloud support with Ubuntu Advantage Cloud Guest:
   http://www.ubuntu.com/business/services/cloud
218 packages can be updated.
147 updates are security updates.
New release '18.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

あとは何でもござれ、学習用にコマンド打ちまくり

ubuntu@docker-host01:~$ whoami
ubuntu 👈EC2でUbuntu作った時のデフォルトのログインユーザーですね

⭐rootになってみたり
ubuntu@docker-host01:~$ sudo su
root@docker-host01:/home/ubuntu# cd /home

⭐gitをapt-getでインストールしてみたり
ubuntu@docker-host01:~$ sudo apt-get install git
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
 git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn
The following packages will be upgraded:
 git
1 upgraded, 0 newly installed, 0 to remove and 208 not upgraded.
Need to get 3,176 kB of archives.
After this operation, 61.4 kB of additional disk space will be used.
Get:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu xenial-updates/main amd64 git amd64 1:2.7.4-0ubuntu1.9 [3,176 kB]
Fetched 3,176 kB in 0s (38.4 MB/s)
(Reading database ... 51352 files and directories currently installed.)
Preparing to unpack .../git_1%3a2.7.4-0ubuntu1.9_amd64.deb ...
Unpacking git (1:2.7.4-0ubuntu1.9) over (1:2.7.4-0ubuntu1.3) ...
Setting up git (1:2.7.4-0ubuntu1.9) ...

ubuntu@docker-host01:~$ git --version
git version 2.7.4 👈ちゃんと入りましたね

これは覚えておいた方が良い

< SSH先にペーストする方法 >
Alt + Space 同時押しEキーPキー
の順番におすと、手元の操作端末のクリップボードを貼り付けられます。
※コマンドプロンプトを使っていますが、Ctrl + V 使えません
※TeraTerm でもないので、Alt + V も使えません

----- お片付け -----

デフォルトのDockerホストに操作対象を戻す

操作対象を切り替えた時と同じようなことを実施
C:\Users\mevius>docker-machine env --unset
SET DOCKER_TLS_VERIFY=
SET DOCKER_HOST=
SET DOCKER_CERT_PATH=
SET DOCKER_MACHINE_NAME=
REM Run this command to configure your shell:
REM     @FOR /f "tokens=*" %i IN ('docker-machine env --unset') DO @%i

C:\Users\mevius>@FOR /f "tokens=*" %i IN ('docker-machine env --unset') DO @%i

C:\Users\mevius>docker-machine ls
NAME            ACTIVE   DRIVER      STATE     URL                         SWARM   DOCKER      ERRORS
docker-host01   -        amazonec2   Running   tcp://3.112.245.197:2376            v19.03.12
          👆アクティブじゃなくなった

作成したDockerホストの削除

なんてことはない、下記のような簡単なコマンドを打つだけ。これでキレイさっぱりEC2がこの世から消えます。はぁ~楽ちん♬
これでEC2(Dockerホスト)に関する課金も止まります。
C:\Users\mevius>docker-machine rm docker-host01
About to remove docker-host01
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
Successfully removed docker-host01

実際にマネジメントコンソールも確認、うん当たり前ですがちゃんと出来ています。

画像2

画像3

はい、これでPCローカルからもクラウド(AWS)上からも、無駄なデータはすべて消えました(鍵ファイル群も消滅しています)

ステータス:terminated の状態になりました。

いかがだったでしょうか❓

必要な時に必要な分だけリソースを作成する、しかも簡単に、ということでぜひ活用してLinuxをいじり倒してみてはどうでしょうか❓

最後に今回は触れなかったこの記事で紹介した環境を準備するのに役立つnote記事をご紹介しておきます。たいして難しいわけではないので、環境が整っていない方はサクッとやってしまいましょう。

----- 環境構築に役立つnote記事紹介 -----

のあぼう』さんが、Docker Desktop for Windows のHyper-Vを利用する場合の環境構築方法について記事にされています。

くもすけ』さんが、Docker Desktop for Windows のWSL(Windows Subsystem for Linux)を利用する場合の環境構築方法について記事にされています。

夢くい虫』さんが、こちらの記事でAWSアカウント作成について紹介されています。

▶ 続けて読むのにおススメな記事


もしこの記事が何かの参考になったもしくは面白かったという方は、応援していただけると大変嬉しいです😊 これからもよろしくお願いします。