日曜プログラミング

ゲーム好きの中の人が、自分が作りたいアプリを作る記録です

Amazon LinuxをDocker上で動かしFlask+Tensorflow環境を整えてAmazon ECSに環境を作る (その1)

以前の記事でDockerの勉強をしたいという話をしました。
実際に手を動かしつつ作業を進めたいと思います。最終的には、すでにFlaskで動かしている 言語を超える力 をDockerで環境管理したいと思っています。
今回は以下の本を読みつつ、Amazon LinuxをDocker for Mac上で動かすという記録になります。

本を読みながらなので、本の感想を交えながらの内容となります。

はじめに

私の経験など

本の感想を話す前に、私の経験などを簡単に。

  • 主に現在はアプリケーション開発を行なっている
  • AWSNifty Cloud、IBM Bluemix Infrastructureなどでインフラ構築などを経験している
  • 物理環境でのサーバー構築も経験している
  • インフラ構成管理ツールとしてAnsibleを使用したことがある

作業環境

プログラマのためのDocker教科書」を読み始める

第1章

アプリケーション開発のみを触ったことある人向けに書かれていると思います。Dockerを使う上で必要なこと以上の内容が書かれてあると思いますが、これくらいのことは知っておいてほしいなーという内容といったところでしょうか。

第2章

Dockerの仮想化がどのようなものかについて書かれてあります。とりあえずDockerを触りたい人は、流し読みする程度でいいかもしれません。Dockerでインフラ構築をがっつり行いたい人は読んでおいた方が良い内容だと思いますが、そういう人にとっては既に知っている内容も多いかもしれません。

ここまでは前提内容かなと思います。

第3章

ここから手を動かします。本書ではWindows環境にDockerでLinux環境をインストールする手順が書かれてあります。
本書では執筆時点でWindows10では未対応としていますが、現在は対応しているようです。
koboldtodragon.hatenablog.com

また、Docker本家となるDocker for Windowsもあります。この場合、Windows10 proが必要なようです。
qiita.com


さて、私はmac環境なので Docker for Macをインストールします。以下を参考にします。
Get started with Docker for Mac | Docker Documentation

私は 「Stable channel」版をダウンロードしました。

f:id:gelehrtecrest:20170616172759p:plain

インストール方法はいつものMacアプリケーションと変わりませんね。特筆することはないかなと思います。

f:id:gelehrtecrest:20170616173239p:plain

バージョンは以下の通りです。

>>||
$ docker --version
Docker version 17.03.1-ce, build c6d412e

<<

さて、Amazon Linuxを入れたいとおもいます。
ここでは2つの方法があります。

  • AWS CLIを使う方法
  • DockerHubを使う方法
AWS CLIって?

その名前の通り、コマンドラインAWSを操作するためのコマンドです。
実は私は、AWS CLIを使ったことありませんでした。それだけAWSのブラウザ上のUIが優れているとも言えるのですが。

さてインストールしてみましょう。
>>||
$ brew install awscli
$ aws --version
aws-cli/1.11.105 Python/2.7.10 Darwin/16.5.0 botocore/1.5.68

<<

ここで問題、
>>||
$ aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:

<<

鍵を入れる必要があります。

Amazon Linuxを使うというモチベーション上AWSと契約しているわけですが、AWSと契約していない段階では鍵などを取得できないはずなので一旦この作業をストップします。

AWS CLIを使っての方法はこちらで紹介されているので、参考までに
qiita.com

DockerHubを使う

本書でもDockerHubを紹介していました。今回はこの方法を使おうと思います。
https://hub.docker.com/

まずDockerHubにサインアップ
f:id:gelehrtecrest:20170616175251p:plain

IDとメールアドレスとパスワードを登録し、メール認証すればサインアップできます。

サインアップできた後はCLI上の作業
まずログイン

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: ********
Password:
Login Succeeded

Usernameは登録したIDです。

次に、インストール先を検索します。 まぁ amazonlinuxですかね。

$ docker search amazon
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
amazonlinux Amazon Linux is an execution environment f... 137 [OK]
amazon/amazon-ecs-agent Amazon EC2 Container Service Agent 50
aptalca/docker-amazon-echo-ha-bridge (Deprecated) Bridge Amazon Echo with any H... 2 [OK]
pottava/amazon-ecr-credential-helper Amazon ECR credential-helper images based ... 2 [OK]
abuisine/mariadb-amazon-backup A mariadb container with amazon based back... 1 [OK]
abuisine/mysql-amazon-backup Mysql container with backup over amazon ca... 1 [OK]
rlister/amazon-ssm-agent Debian image with amazon-ssm-agent install... 1 [OK]
juka/amazon-dashbutton Docker image of a amazon dashbutton service 1 [OK]
abuisine/redis-amazon-backup Redis container with backup over amazon ca... 1 [OK]
zendesk/amazon-kinesis-agent Amazon AWS Kinesis Agent 1 [OK]
redash/amazon-athena-proxy Simple proxy that provides REST API to run... 1 [OK]
masterandrey/docker-amazon-dash-button-hack Amazon Dash Button hack, Python3 Scapy, Go... 1 [OK]
testbeds/amazonlinux Amazon Linux 0 [OK]
atsnngs/amazon-dsstne Amazon DSSTNE: Deep Scalable Sparse Tensor... 0 [OK]
vwieczorek/amazon-dash-docker Docker to intercept and repurpose Amazon D... 0 [OK]
yamitzky/redash-amazon-athena-proxy Dockernize https://github.com/getredash/re... 0 [OK]
guildeducation/docker-amazon-redshift Unofficial implementation of Amazon Redshi... 0 [OK]
gprime44/amazondatamanager Amazon Data Manager 0 [OK]
n0ts/amazonlinux My AmazonLinux Base Docker Image 0 [OK]
pypi/amazon-mws amazon-mws PyPi package based on python:3 0 [OK]
troyready/amazonlinux Amazon Linux docker images with additional... 0 [OK]
rubygem/amazon-instance Auto-Generated Image for Ruby Gem amazon-i... 0 [OK]
influitive/amazon-redshift-utils Amazon Redshift Utilities, see: https://gi... 0 [OK]
folixg/amazon-glacier-cli Amazon Glacier CLI on top of Ubuntu 0 [OK]
larsbutler/amazon-linux-httpd24 Amazon Linux with Apache 2.4. See https://... 0 [OK]

では、amazonlinuxをpullして、実際にログインしてみます

$ docker pull amazonlinux

pullできたimageを確認。

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
amazonlinux latest 766ebb052d4f 2 months ago 162 MB

imageから実行

$ docker container run -itd amazonlinux

起動したimageのpsを確認

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b073775d7fd amazonlinux "/bin/bash" 20 seconds ago Up 19 seconds infallible_lamarr

CONTAINER IDを指定してログイン

$ docker attach 3b073775d7fd
bash-4.2#

ちゃんとAmazon Linuxであることも確認しておきます。

bash-4.2# cat /etc/system-release
Amazon Linux AMI release 2017.03

大丈夫そうですね。

終了するには?

実は exitすると

bash-4.2# exit
exit
~ $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

コンテナ自体が終了してしまいます。

なので、exitした場合でも再起動するようにしておきます。

$ docker container run -itd --restart=always amazonlinux

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f6d1b9cf812 amazonlinux "/bin/bash" 3 seconds ago Up 2 seconds romantic_wozniak
$ docker attach 2f6d1b9cf812
bash-4.2# exit
exit
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f6d1b9cf812 amazonlinux "/bin/bash" 30 seconds ago Up Less than a second romantic_wozniak

これで、docker上で何かサービスを動かして、外部からテストできるかな。

これ以外のコマンドは?

本書にいろいろなコマンドが紹介されています。私もまだ最低限のものしか試していないので、ここまでで。