AWSを使ってみた!【EC2のインスタンス上でのDocker基本操作】

  • Posted on: 3 October 2018
  • By: maho

AWSのEC2のインスタンス上にDockerをインストールし、動かしてみました!
仮想サーバにDockerをインストールして動かしているだけなので、KVM等異なる仮想化基盤を用いても構いません。
AWS初心者な人が書いているので、自己責任でお願いいたします。。。m(_ _)m

<今回用いたAWSのサービス>
EC2(Elastic Compute Cloud):安全でサイズ変更可能なコンピューティング性能をクラウド内で提供するウェブサービス。インスタンスを作成し、様々なサービス(今回はS3)を管理するツールとして使えます。

<Dockerとは???>
Wikipediaによると「Docker(ドッカー)はコンテナ型の仮想化環境を提供するオープンソースソフトウェアである」とのことです。とても簡単に、、、私は以下のように理解しました。

KVMで各仮想マシンにログインできるように、Dockerでは各コンテナにログインできます。ここで2つの大きく異なる点はKVMの仮想マシンは仮想サーバの用途で利用されますが、Dockerの各コンテナは1つのプロセスとして動かします。またコンテナは独自にOSを持たず、ホストのカーネルを共有しますが、ホストのディストリビューション(CentOSやUbuntu等)には依存しないので、目的に応じたディストリビューションを用いてコンテナを作成できます。

かなりざっくりと説明してしまったので、詳細をわかりやすく説明して下さっている記事を貼っておきます。
参考:「第1回Dockerとは」 http://www.atmarkit.co.jp/ait/articles/1701/30/news037.html

【手順】

下準備:EC2インスタンスを作成/起動し、ホストPCのターミナルからSSHでログインしておく。
(参考:AWSを使ってみた!【署名付URLの作成】

  1. ログインしたらまず、Dockerをインストールします。
    $ sudo yum install docker -y
    ・・・
    完了しました!
    $


  2. インストールが完了したら、docker.serviceを起動し、インスタンス起動時にも自動で立ち上がるように設定しておきます。
    $ sudo su ←ルートユーザーになります。
    # systemctl start docker
    # systemctl enable docker
    Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service
    to /usr/lib/systemd/system/docker.service.
    #


  3. ではいよいよDockerコマンドを用いてイメージを作成します。
    コマンド : docker pull {ディストリビューション}:{タグ}
    # docker pull ubuntu:latest ←イメージの作成
    latest: Pulling from library/ubuntu
    124c757242f8: Pull complete
    9d866f8bde2a: Pull complete
    fa3f2f277e67: Pull complete
    398d32b153e8: Pull complete
    afde35469481: Pull complete
    Digest: sha256:de774a3145f7ca4f0bd144c7d4ffb2931e06634f11529653b23eba85aef8e3
    78
    Status: Downloaded newer image for ubuntu:latest
    # docker images ←イメージ一覧の表示
    REPOSITORY TAG IMAGE ID CREATED SIZE
    ubuntu latest cd6d8154f1e1 3 weeks ago 84.1M


  4. ちなみに容量がある限りイメージは何個も作成できます。
    # docker pull fedora:latest
    latest: Pulling from library/fedora
    565884f490d9: Pull complete
    Digest: sha256:166e65e720695024e6f89877f96a83ca2d0fd4863ae9afad4ca7f54fc0c4aed3 83MB/86.92MB
    Status: Downloaded newer image for fedora:latest
    # docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    fedora latest c582c1438f27 2 weeks ago 254MB
    ubuntu latest cd6d8154f1e1 3 weeks ago 84.1MB


  5. 次にUbuntuベースのイメージからコンテナを作成し、接続してみます。
    コマンド : docker run -it --name {コンテナ名} {IMAGE ID} bash
    説明 :
    オプション「-t」はコンテナ内の標準出力とホスト側の出力をつなげるもので、オプション「-i」はホスト側の入力をコンテナの標準出力をつなげるものです。
    (参照:「docker runのオプションについて」https://teratail.com/questions/19477
    最後の「bash」はイメージをbashで立ち上げて使うためにつけます。
    # docker run -it --name container-1 c582c1438f27 bash ←コンテナ作成・起動・接続
    [root@5a88010e4fac /]# cat /etc/os-release ←fedoraのバージョン確認
    NAME=Fedora
    VERSION="28 (Twenty Eight)"
    ID=fedora
    VERSION_ID=28
    PLATFORM_ID="platform:f28"
    PRETTY_NAME="Fedora 28 (Twenty Eight)"
    ANSI_COLOR="0;34"
    CPE_NAME="cpe:/o:fedoraproject:fedora:28"
    HOME_URL="https://fedoraproject.org/"
    SUPPORT_URL="https://fedoraproject.org/wiki/Communicating_and_getting_help"
    BUG_REPORT_URL="https://bugzilla.redhat.com/"
    REDHAT_BUGZILLA_PRODUCT="Fedora"
    REDHAT_BUGZILLA_PRODUCT_VERSION=28
    REDHAT_SUPPORT_PRODUCT="Fedora"
    REDHAT_SUPPORT_PRODUCT_VERSION=28
    PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
    [root@5a88010e4fac /]# cat /proc/version ←カーネルのバージョン確認
    Linux version 4.14.62-70.117.amzn2.x86_64 (`mockbuild@ip-10-0-1-79`) (gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)) #1 SMP Fri Aug 10 20:14:53 UTC 2018
    [root@5a88010e4fac /]# df -Th
    Filesystem Type Size Used Avail Use% Mounted on
    overlay overlay 8.0G 1.9G 6.2G 23% /
    tmpfs tmpfs 64M 0 64M 0% /dev
    tmpfs tmpfs 493M 0 493M 0% /sys/fs/cgroup
    /dev/xvda1 xfs 8.0G 1.9G 6.2G 23% /etc/hosts
    shm tmpfs 64M 0 64M 0% /dev/shm


  6. [Ctrl]+([p]+[q])キーでコンテナを起動したまま接続を切り、現在のコンテナの一覧を表示します。「STATUS」がUP(起動)していることを確認した後再びcontainer-1にログインします。
    コマンド : docker attach {CONTAINER ID または コンテナ名}
    # docker ps -a ←コンテナ一覧の表示(-aオプションで停止したコンテナも表示できる)
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    5a88010e4fac c582c1438f27 "bash" 45 seconds ago Up 45 seconds container-1
    # docker attach 5a88010e4fac
    [root@5a88010e4fac /]#


  7. 再び[Ctrl]+([p]+[q])キーで接続を切り、もう1つのイメージで手順5を参考にしてコンテナを作成します。
    # docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    fedora latest c582c1438f27 2 weeks ago 254MB
    ubuntu latest cd6d8154f1e1 3 weeks ago 84.1MB
    # docker run -it --name container-2 cd6d8154f1e1 bash ←コンテナ作成・起動・ログイン
    root@e732f8eca9a4:/# cat /etc/os-release ←ubuntuのバージョン確認
    NAME="Ubuntu"
    VERSION="18.04.1 LTS (Bionic Beaver)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 18.04.1 LTS"
    VERSION_ID="18.04"
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
    VERSION_CODENAME=bionic
    UBUNTU_CODENAME=bionic
    root@e732f8eca9a4:/# cat /proc/version ←カーネルのバージョン確認
    Linux version 4.14.62-70.117.amzn2.x86_64 (`mockbuild@ip-10-0-1-79`) (gcc version
    7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)) #1 SMP Fri Aug 10 20:14:53 UTC 2018
    root@e732f8eca9a4:/# df -Th
    Filesystem Type Size Used Avail Use% Mounted on
    overlay overlay 8.0G 1.9G 6.2G 23% /
    tmpfs tmpfs 64M 0 64M 0% /dev
    tmpfs tmpfs 493M 0 493M 0% /sys/fs/cgroup
    /dev/xvda1 xfs 8.0G 1.9G 6.2G 23% /etc/hosts
    shm tmpfs 64M 0 64M 0% /dev/shm
    tmpfs tmpfs 493M 0 493M 0% /proc/acpi
    tmpfs tmpfs 493M 0 493M 0% /proc/scsi
    tmpfs tmpfs 493M 0 493M 0% /sys/firmware


  8. 今度は「exit」コマンドで接続を切り、コンテナ一覧を表示する。
    root@e732f8eca9a4:/# exit
    exit
    # docker ps -a ←コンテナ一覧の表示(-aオプションで停止したコンテナも表示できる)
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    e732f8eca9a4 cd6d8154f1e1 "bash" 3 minutes ago Exited (0) 3 minutes container-2
    5a88010e4fac c582c1438f27 "bash" 15 minutes ago Up 9 minutes container-1

    exitコマンドで接続を切ると、コンテナは停止します。

  9. 停止したコンテナ「container-2」を再び起動し、接続します。
    コマンド : docker start {CONTAINER ID または コンテナ名}
    # docker start container-2 ←コンテナの起動
    container-2
    # docker attach container-2 ←コンテナに接続
    root@e732f8eca9a4:/#


  10. 再び[Ctrl]+([p]+[q])キーで接続を切り、コンテナ一覧を表示する。
    # docker ps -a ←コンテナ一覧の表示(-aオプションで停止したコンテナも表示できる)
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    e732f8eca9a4 cd6d8154f1e1 "bash" 3 minutes ago Up 3 minutes container-2
    5a88010e4fac c582c1438f27 "bash" 15 minutes ago Up 9 minutes container-1

    上記より2つのコンテナが同時に動いていることがわかります。これらのコンテナはプロセスとして見なされます。

〜まとめ〜

docker pull {ディストリビューション}:{タグ} イメージの作成
docker images イメージの一覧表示
docker run -it --name {コンテナ名} {IMAGE ID} bash コンテナの作成/接続
docker ps -a コンテナの一覧表示
docker start {CONTAINER ID または コンテナ名} コンテナの起動
docker attach {CONTAINER ID または コンテナ名} 起動中のコンテナへの接続
[Ctrl]+([p]+[q])キー コンテナを起動したまま切断
exit コンテナを停止し切断

〜その後〜
EC2のインスタンスを3個立ち上げ、各インスタンスの中でDockerを起動しコンテナを複数起動しても、ホストPCにリソース不足等の負荷がかかりませんでした。これはAWSの良い点の1つなので、AWSのすごさを再認識しました!!!

一方で、AWSは料金が発生してしまう(私は未だにどのタイミングで料金が発生しているのか詳しく分かりません)ので、オープンソースで開発されているOpenStackはとてもオススメですよ!

OpenStackと言えば、有限会社ナレッジデザインが販売している「OpenStack構築運用トレーニングテキスト - OPCEL認定試験対応」は実務で使える技術を身に付けるための実機を使用した演習や解説を詳しく書いているので、とてもオススメです。
さらに、OPCEL認定試験にも対応しており、入門書かつ試験取得勉強もできるという一石二鳥の書籍なので、気になる方は是非チェックしてみてくださいね!

詳細はコチラ:http://kwd-corp.com/?q=node/75

Tags: