AWSを使ってみた!【EC2のインスタンス上でのDocker基本操作】
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の作成】)
- ログインしたらまず、Dockerをインストールします。
$ sudo yum install docker -y
・・・
完了しました!
$ - インストールが完了したら、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.
# - ではいよいよ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 - ちなみに容量がある限りイメージは何個も作成できます。
# 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 - 次に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 - [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 /]# - 再び[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 - 今度は「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-1exitコマンドで接続を切ると、コンテナは停止します。
- 停止したコンテナ「container-2」を再び起動し、接続します。
コマンド : docker start {CONTAINER ID または コンテナ名}# docker start container-2 ←コンテナの起動
container-2
# docker attach container-2 ←コンテナに接続
root@e732f8eca9a4:/# - 再び[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はとてもオススメですよ!
さらに、OPCEL認定試験にも対応しており、入門書かつ試験取得勉強もできるという一石二鳥の書籍なので、気になる方は是非チェックしてみてくださいね!