AWSでDockerコンテナを起動してみた

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

今年は大雪に火山噴火、更にインフルエンザ大流行など、年始から一気に災いが襲っている日本列島ですが、ここまで一気に天変地異などが起きたりすると、なにかの呪いとか、あるいはモノノケの類にでも襲われているのではないかと思ってしまいますよね。そんな中、元気にスキーに行って一日中モーグルコースを滑り込んで、全身筋肉中になっているばっしーです。

さて、今回は流行が始まって久しい、既に枯れた技術になりつつある「Dockerコンテナ」を触ってみたいと思います。

コンテナとは

こちら↓に説明は任せます。

コンテナ技術の基礎知識 - Think IT

要するに、OSのカーネルを共有した仮想化技術の総称で、その代表格がDockerです。

一般的なVMなどに比較して、カーネルを共有するため、OSはホストと同じものしか利用できないという制限がある反面、実行速度やメモリも有効活用などの点で大幅なメリットがあると言われています。そのため、検証用の環境などで同じOSの環境を多数用意したい等といった用途には最適と思われます。

AWSでコンテナ

AWSで構築してみようと思ったのですが、AWSにもコンテナ対応の以下の二つのサービスが用意してあります。

Amazon EC2 Container Service

AWS Fargate

しかし、これらのサービスはロードバランスするためや、クラスタ管理など、付加価値を付けるサービス内容となっており、どうやらコンテナ入門で必要ではなさそうなので、今回は触りませんでした。

正確にいうと、Fargateのチュートリアルだけ触ってやめました。

EC2でDockerチュートリアル

そこで、まずはAWSのDockerチュートリアルの通りにコマンドを叩いてみました。

初めに、Amazon Linuxを作成し、SSH接続するところから始まります。操作をかいつまんで説明しますが、詳細は以下のリンクを参照してください。

Docker の基本 – Amazon Elastic Container Service

【1】Amazon Linux に Docker をインストール

初めに、Amazon Linuxのアップデート

sudo yum update -y

Dockerパッケージをインストール

sudo yum install -y docker

Docker サービスを開始

sudo service docker start

sudo を使用せずに Docker コマンドを実行可能に

sudo usermod -a -G docker ec2-user

※上記を適用させるためにログアウトし、再ログインが必要

Dockerの動作確認

docker info

【2】Docker イメージの作成

イメージの定義ファイルであるDockerfileの作成

touch Dockerfile
vi Dockerfile

Dockerfileの内容は以下の通りにします。

FROM ubuntu:12.04
# Install dependencies
RUN apt-get update -y
RUN apt-get install -y apache2
# Install apache and write hello world message
RUN echo "Hello World!" > /var/www/index.html
# Configure apache
RUN a2enmod rewrite
RUN chown -R www-data:www-data /var/www
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
EXPOSE 80
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

上記の内容としては、OSは「Ubuntu 12.04」を用い、Apache2をインストールし、”Hello World!”を表示するHTMLファイルをドキュメントルートに配置し、ポート80番を解放するなどの内容が記載されています。

上記で定義したDocker イメージを作成します。

docker build -t hello-world .

Dockerイメージからコンテナを起動します。

docker run -p 80:80 hello-world

ここで、ブラウザからEC2のパブリックIPアドレスを開いてみてください。”Hello World!”と表示されたら成功です。

次に、自分で既存のイメージからコンテナを作成してみましょう。

EC2でイメージからコンテナ作成

自分でDockerfileを作成するのではなく、既存の正規イメージからコンテナを起動する方法としては、Docker Hubから検索してイメージを指定する方法で行うようです。ここでは、例えばPostgreSQLの公式イメージを調べてみます。

Docker Hub

Docker Hubを開き、画面一番上の検索窓に「postgres」と入れてEnterを押すと、ずらずらと出てきますが、一番上のものが正規のpostgresっぽいですね。

クリックすると詳細のページが表示されます。細かいバージョンなどが選択できますね。

ここでイメージを選択するわけですが、赤枠で囲った文字列を拾って、「postgres」「10.1」。これをコマンドに打ちます。

docker run -d --name postgres10.1 -e POSTGRES_PASSWORD=MyPassword 15432:5432 postgres:10.1
Unable to find image 'postgres:10.1' locally
10.1: Pulling from library/postgres
723254a2c089: Pull complete
39ec0e6c372c: Pull complete
ba1542fb91f3: Pull complete
c7195e642388: Pull complete
95424deca6a2: Pull complete
2d7d4b3a4ce2: Pull complete
fbde41d4a8cc: Pull complete
880120b92add: Pull complete
9a217c784089: Pull complete
d581543fe8e7: Pull complete
e5eff8940bb0: Pull complete
462d60a56b09: Pull complete
135fa6b9c139: Pull complete
Digest: sha256:3f4441460029e12905a5d447a3549ae2ac13323d045391b0cb0cf8b48ea17463
Status: Downloaded newer image for postgres:10.1
2b13180f983f43f60aca6e2c0c169fd02e77bd04490ef1125f14f8c64084434e

 

コンテナ一覧表示

docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b13180f983f postgres:10.1 "docker-entrypoint..." 5 minutes ago Up 5 minutes 0.0.0.0:15432->5432/tcp postgres10.1

 

イメージ一覧表示

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres 10.1 ec61d13c8566 7 weeks ago 287MB<

 

別コンテナからpsqlで接続して確認する(Quitしたら消えるコンテナ)

docker run -it --rm --link postgres10.1:postgres postgres:10.1 psql -h postgres -U postgres
Password for user postgres:  ←(パスワードを入力する)
psql (10.1)
Type "help" for help.
postgres=# select version(); ←(Version表示)
version
--------------------------------------------------------------------------------------------------
PostgreSQL 10.1 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0
20170516, 64-bit
(1 row)
postgres=# \l ←(DBリスト表示)
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
+
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
+
| | | | | postgres=CTc/postgres
(3 rows)
postgres=# \q ←(Quit)

どうやら、無事にPostgreSQLが起動しているようです。メデタシメデタシ!
とりあえずDockerの基本的な概念と、基本操作をしてみました。
今後はもう少し実務的な運用が出来るように勉強を続けたいと思います。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

This site uses Akismet to reduce spam. Learn how your comment data is processed.