Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
34
Help us understand the problem. What is going on with this article?
@aki

はじめてのDocker in AWS

More than 5 years have passed since last update.

初めてのDockerなので、とりあえず動けばOK。
チュートリアルはいろいろあるけど、自分用に手順をまとめてみるぐらいの意味合いなので汎用的とか気にしない。
よくわからん状況になってもいいようにEC2で動かすことにする。
OSはAmazonLinux使う。yumで簡単にインストールできるようになったみたいだし。
手探りでやってるので、間違いも多くあると思います。発見したらコメント、修正リクエスト歓迎です。

下準備

EC2でAmazonLinuxをSmallで起動する。
気をつけることは多分64bitしておくことと、microだとメモリとか問題出るかもだしsmallインスタンスにしておくこと。
容量も20GBぐらいはあったほうがいい気がする。
ポートはいろいろ使用するので、全開放しておいたほうが楽。ただしテスト以外ではやってはいけない。立ち上げっぱなしもしてはならない。あくまでテスト用の使い捨て。
色々試すならGithubからcloneしてビルドみたいなことをやるようになるみたいなので、gitのインストールとgithubの鍵登録ぐらいはしておくとよさげ。

インストール

yumでインストール
yum search docker
sudo yum install docker

今回は0.9.0がインストールされた。

起動

dockerを起動する
sudo service docker start
#Starting cgconfig service:                                 [  OK  ]
#Starting docker:                                      [  OK  ]

ps ax |grep docker
#1709 pts/0    Sl     0:00 /usr/bin/docker -d

こんな感じになる。

起動しているコンテナの確認
sudo docker ps

当然なにも起動していないので、テーブルの項目だけが出てくる。
Dockerはsudoコマンド必須っぽい。

コンテナの起動

sudo docker run ほにゃららみたいな形式でコンテナを起動。

centOSのイメージを起動させてbashを起動
sudo docker run -i -t centos /bin/bash

これでcentOSが起動してbashで操作できる。
初回は、OSのイメージ(でいいのかな)をダウンロードするために時間がかかる。20分とかかかることもあるようなのでのんびり待つ。
初回ダウンロードとかビルドが終わればCentOSなら数秒で立ち上がるようになった。確かにこの早さは魅力的。

余談
ちなみにここでコケたけど、原因はdockerのリポジトリにあったみたい。しばらくしたら通るようになった。
certificate is valid for ssl6268.cloudflare.com
こんなメッセージが含まれていたので、CDNとしてcloudflare使ってるみたい。このエラーはSSL証明書の更新中とか更新に失敗したとかそんな理由なんじゃないかと思うのでめったにあることではなさそう。

起動しているOSの種類とバージョンの確認
cat /etc/`ls /etc -F | grep "release$\|version$"`

終了するときはexitでコンテナを抜ける。
ただし、停止するだけでコンテナそのものは残っている。

コマンドリファレンス

とりあえず使ってみる上で最低限必要な物だけメモる。詳しいことは知らないし。
基本sudoつけてるけど、ちゃんと使うなら権限付与するべき。

sudo docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

オプションがたくさんある。よく使うっぽいのだけピックアップ。
ビルドするためのコマンドもあるけど、ローカルにイメージがない場合はダウンロードして勝手にビルドして起動までしてくれるっぽい。

-i, --interactive=false: Keep stdin open even if not attached
インタラクティブモード、つまりシェルとか入力できる状態で起動何と対話モードになるかは起動したものによる。下の-tと一緒に使うことが多そう

-t, --tty=false: Allocate a pseudo-tty
仮想端末を割り当てる。つまりシェルを使えるようにすると同義でいいのだろうか?

-d, --detach=false: Detached mode: Run container in the background, print new container id
バックグラウンドで実行。実用で使う場合はほとんどこれつけるんだろうな

-p, --publish=[]: Map a network port to the container
ポートをマッピングする。-p 8080:80こんな指定をすると、Dockerで動作しているアプリケーションは80番ポートで起動。それを親OSの8080にマッピングとなるようだ。

動きを見るために適当に使ってみる。
CentOSをbashで動かすのをオプションを変えてやってみる。

sudo docker run -i -t centos /bin/bash
#インタラクティブモードで起動してプロンプト(bash-4.1\#)が表示される、普通のbashとして使用できる。終了するとコンテナは停止する。

sudo docker run -i -t centos python
#ついでにpythonだとどうなるか。
#CentOSでpythonをインタラクティブモードで起動した状態になる。exit()で終了するとコンテナは停止する。

sudo docker run -i centos /bin/bash
#プロンプト(bash-4.1\#)は出ないが、起動してコマンドも受け付ける状態になる。見ただけだと-tがついてる状態とほぼ同じに見える。exitで抜けるとコンテナは停止する

sudo docker run -t centos /bin/bash
#プロンプト(bash-4.1\#)とは出てくるけど入力しても反応はない。実行もされていないようだ。Ctrl+Cで終了させてもコンテナは停止しない

sudo docker run centos /bin/bash
#エラーなどは出ないが、起動しない。正確には起動してそのまま停止してるだけっぽい。停止したコンテナが残っている。
#見た目的には何も起こらない。

これだけ見ると、-tと-iは片方だけで使用することはほとんどなさそうだ。
ドキュメント見ても、特殊な場合を除き両方ついてるのでそういうものだと思っておこう。

sudo docker ps
#現在動いているコンテナ一覧を表示

sudo docker ps -a
#停止しているコンテナも含めたすべてのコンテナ一覧を表示

sudo docker start [コンテナID]
#停止していたコンテナをスタート

sudo docker stop [コンテナID]
#コンテナを停止

sudo docker rm [コンテナID]
#停止しているコンテナを削除。動いているとエラーになる

いろいろ動かす

動かして楽しい物を適当に動かしてみる。見た目にわかりやすいということでcmsとか。
起動してもDBとか動き始めるまでに数分かかる場合が多いので注意。

イメージ

https://index.docker.io/
OSとかアプリとか探す場合はここからイメージを探すのが一般的っぽい。
仕組みはhomebrewなんかと近そう。実態はgithubとかにあって、そこからダウンロードしてビルドして使えるようにしてるようだ。

動かす

定番のwordpress

sudo docker run -d -p 81:80 tutum/wordpress

アクセス
http://[EC2のPublicDNS]:81/

適当にDrupal

sudo docker run -d -p 82:80 ricardoamaro/drupal-lamp

アクセス
http://[EC2のPublicDNS]:82/

LAMP環境

sudo docker run -d -p 83:80 -p 3306:3306 tutum/lamp

アクセス
http://[EC2のPublicDNS]:83/

ここからどうするか

今回はいろんなのが起動して動いたことが確認できればOKなのでここまでにします。
一番面白そうなところは、Dockerfileを作ってコミットしたりとリポジトリ的に扱えるところっぽいので今後はその辺試してみようと思います。

34
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
aki
iOSアプリ作って生きてましたが、今は組織マネジメント中心です。
retty
Retty株式会社はソーシャルメディア、スマートフォンを活かした「人を軸にお店を探せる」グルメサービスRettyを運営する会社です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
34
Help us understand the problem. What is going on with this article?