ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

英語単語勉強その2

fixture

定番(そうだったのね!?)

でも、「定番商品」などは standardを使ったほうがいいと思う。

somehow

何とかして、何らかの方法で、どうやら、どうしたものか、どうにか、何とか

however

それにもかかわらず、にもかかわらず、なおかつ

frustrate

いらいらさせる、欲求不満にさせる、阻む、虐める、いたぶる

broken link

リンク切れ

dockerをcentos7にインストール

あとちょっとだけ使ってみたログを残す。

dockerをinstall

一度失敗しましたが、無事インストールできました。

失敗の内容は、なぜかyum install dockerでインストールすると、yumは成功するけど、何故か起動しない事態が発生。

$ systemctl docker status -l
Unknown operation 'docker'.
$ systemctl  status -l docker
docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled)
   Active: failed (Result: timeout) since 2015-12-10 11:03:07 JST; 44min ago
     Docs: http://docs.docker.com
 Main PID: 20256

12 10 11:00:38 localhost.localdomain docker[20256]: time="2015-12-10T11:00:38.380811795+09:00" level=info msg="Listening for HTTP on unix (/var/run/docker.sock)"
12 10 11:00:38 localhost.localdomain docker[20256]: time="2015-12-10T11:00:38.384129386+09:00" level=error msg="WARNING: No --storage-opt dm.thinpooldev specified, using loopback; this configuration is strongly discouraged for production use"
12 10 11:01:37 localhost.localdomain systemd[1]: docker.service operation timed out. Terminating.
12 10 11:03:07 localhost.localdomain systemd[1]: docker.service stopping timed out (2). Killing.
12 10 11:03:07 localhost.localdomain systemd[1]: Failed to start Docker Application Container Engine.
12 10 11:03:07 localhost.localdomain systemd[1]: Unit docker.service entered failed state.

泣きそうなところを、dockerのドキュメントに助けられました。感謝!(下に記載)

$ yum update

$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

$ yum install docker-engine

# これで起動した!
$ /bin/systemctl start docker.service

dockerを使う

とりあえず使ってみます。

$ docker pull centos:6.6
$ docker run centos:6.6 /bin/echo "Hello, World"
Hello, World

ん? いまいちよくわからん。

# dockerでpullしたイメージで実行
$ docker run centos:6.6 /bin/cat /etc/redhat-release
CentOS release 6.6 (Final)

# Host OSで実行
$ cat /etc/redhat-release 
CentOS Linux release 7.1.1503 (Core) 

すげぇ! vagrantより簡単なイメージです。

docker の os image(?)にapacheをインストールしてみる

dockerに乗っかったosのことなんていうの? os image ?

よくわかりませんが、とりあえずコンテナを積んでいきます。

# コンテナにログイン
$ docker run -i -t centos:6.6 /bin/bash
[root@d196fb548cad /]#  # <- 変わった!

$ yum install httpd

Installed:
  httpd.x86_64 0:2.2.15-47.el6.centos                                                                                                                                                                       

Dependency Installed:
  apr.x86_64 0:1.3.9-5.el6_2                    apr-util.x86_64 0:1.3.9-3.el6_0.1   apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1   httpd-tools.x86_64 0:2.2.15-47.el6.centos   mailcap.noarch 0:2.1.31-2.el6  
  redhat-logos.noarch 0:60.0.14-12.el6.centos  

Complete!

設定を追加していきましょう。

[root@d196fb548cad /]# echo 'docker 6.6 contena apache' >/var/www/html/index.html

[root@d196fb548cad /]# /etc/init.d/httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3 for ServerName
                                                           [  OK  ]
                                                           j
[root@d196fb548cad /]# ps aux | grep httpd
root        68  0.0  0.2 175796  3752 ?        Ss   04:18   0:00 /usr/sbin/httpd
apache      70  0.0  0.1 175796  2252 ?        S    04:18   0:00 /usr/sbin/httpd
apache      71  0.0  0.1 175796  2252 ?        S    04:18   0:00 /usr/sbin/httpd
apache      72  0.0  0.1 175796  2252 ?        S    04:18   0:00 /usr/sbin/httpd
apache      73  0.0  0.1 175796  2252 ?        S    04:18   0:00 /usr/sbin/httpd
apache      74  0.0  0.1 175796  2252 ?        S    04:18   0:00 /usr/sbin/httpd
apache      75  0.0  0.1 175796  2252 ?        S    04:18   0:00 /usr/sbin/httpd
apache      76  0.0  0.1 175796  2252 ?        S    04:18   0:00 /usr/sbin/httpd
apache      77  0.0  0.1 175796  2252 ?        S    04:18   0:00 /usr/sbin/httpd
root        79  0.0  0.0   9720   832 ?        S+   04:18   0:00 grep httpd

[root@d196fb548cad /]# curl http://127.0.0.1/
docker 6.6 contena apache

エラーがでているけど、起動しましたね!

ちなみにexitでHostへ戻れます。

・・・これは外からアクセスすることができるのかな?

その場合はポートフォワードをオプションとして追記してログインすればいいらしい。

$ docker run -i -t -p 50051:80 centos:6.6 /bin/bash
[root@3007371f9d17 /]# /etc/init.d/httpd start
-bash: /etc/init.d/httpd: そのようなファイルやディレクトリはありません

(^ω^; アレ・・・?

どうやら一度作成した内容はログアウトすると消えるっぽいですね。。。

と、おもったけどそうでもないらしい。

$ docker ps -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS                         PORTS                   NAMES
3007371f9d17        centos:6.6             "/bin/bash"              17 minutes ago      Exited (0) 2 minutes ago                               trusting_hoover
d196fb548cad        centos:6.6             "/bin/bash"              24 minutes ago      Exited (0) 18 minutes ago                              jovial_keller
...

なんか作業ログみたいのが残っているので、それをimages化して、そこにログインすればいいらしい。

# docker commit CONTAINER ID imagesの名前(?)
$ docker commit d196fb548cad centos:6.6/httpd
a1c0870c05a4a664efa56f7f42129258655b73c49887d24cc69fe9f1cf7f7ba6

次はこいつにログインすればいい

$ docker run -i -t -p 50051:80 centos:6.6/httpd
[root@5e2dfbfe3e22 /]#

[root@5e2dfbfe3e22 /]# /etc/init.d/httpd start
[root@5e2dfbfe3e22 /]# curl http://127.0.0.1/
docker 6.6 contena apache

# コンテナを終了せずに抜ける「Ctrl + p, Ctrl + q」
[root@5e2dfbfe3e22 /]# [root@localhost ~]#  <- 帰って来た

そしてHostからhttp://127.0.0.1:50051/へアクセス

$ curl http://127.0.0.1:50051/
docker 6.6 contena apache

いいねいいねいいね!

停止しないで抜けると、プロセスは生きたままっぽい

$ ps aux | grep docker
...
root     27306  0.0  0.7 165860 13272 ?        Sl   13:41   0:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 50051 -container-ip 172.17.0.3 -container-port 80

停止するにはログインしなおしてexitすればいい

再度ログインする方法はattachってコマンドでできたけど、これが正しいかどうかわからない(´・ω・`)

# 何故か名前が使えない...
$ docker attach 5e2dfbfe3e22
[root@5e2dfbfe3e22 /]# ps aux | grep httpd
root        21  0.0  0.1 175796  1920 ?        Ss   04:04   0:00 /usr/sbin/httpd
...

[root@5e2dfbfe3e22 /]# exit
exit
[root@localhost ~]# 

参考にした記事

docs.docker.com

qiita.com

qiita.com

【AWS】EC2をコマンドで起動したり停止したりする方法

photo by Sean MacEntee

以前自動化の記事書いたけど、その前にやったこと。

aipacommander.hatenablog.jp

aws管理画面にてIAMアクセスキーを作成

awscliをインストール

macなので、Homebrewで。すんなり入りました。

$ brew install awscli
$ aws --version
aws-cli/1.9.7 Python/2.7.10 Darwin/14.5.0 botocore/1.3.7

設定ファイル(?)を作成

$ aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXX     # アクセスキー
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXX # シークレットキー
Default region name [None]: ap-northeast-1                 # 東京リージョン
Default output format [None]:                              # 何も入力していない

こんな感じでファイルが作られる。

$ ls -la ~/.aws/
total 16
drwxr-xr-x   4 user  staff   136 11 27 14:30 .
drwxr-xr-x+ 50 user  staff  1700 11 27 14:30 ..
-rw-------   1 user  staff    85 11 27 14:38 config
-rw-------   1 user  staff   241 11 27 14:38 credentials

コマンドを実行

$ aws ec2 describe-instances 

A client error (UnauthorizedOperation) occurred when calling the DescribeInstances operation: You are not authorized to perform this operation.

なんかエラーが。。。どうして?

どうやら、色々許可しないといけないらしい。

ポリシーを設定しにいく。

いっぱいある。Fullっぽい「AmazonEC2FullAccess」を設定。

$ aws ec2 describe-instances 

おお!

ポリシー「AmazonEC2FullAccess」をアタッチしたら通るようになった。なるほど。

起動・停止

起動しているインスタンスのstatusを確認してみる

$ aws ec2 describe-instance-status --region=ap-northeast-1 --instance-ids=i-xxxxxxxx
{
    "InstanceStatuses": [
        {
            "InstanceId": "i-xxxxxxxx", 
            "InstanceState": {
                "Code": 16, 
                "Name": "running"
            }, 
            "AvailabilityZone": "ap-northeast-1a", 
            "SystemStatus": {
                "Status": "ok", 
                "Details": [
                    {
                        "Status": "passed", 
                        "Name": "reachability"
                    }
                ]
            }, 
            "InstanceStatus": {
                "Status": "ok", 
                "Details": [
                    {
                        "Status": "passed", 
                        "Name": "reachability"
                    }
                ]
            }
        }
    ]
}

SystemStatusInstanceStatusの違いはなに・・・?

  • 仮想マシンレベルで疎通がとれているかチェックしている「System Status Checks」
  • OSレベルで疎通がとれているかチェックする「Instance Status Checks」

なるほど。わからん。

  • System Status Checks 物理層のエラーチェック
  • Instance Status Checks OS以上のエラーチェック

らしい。これだったらなんとなく。

とりあえず、OKじゃなかったら何かしら障害発生中ってことね。

ということで、単純にサーバのOnとOffはInstanceStatusをチェックすればいいのね。

それではサーバを止めてみます。

$ aws ec2 stop-instances --region=ap-northeast-1 --instance-ids=i-XXXXXXXX 
{
    "StoppingInstances": [
        {
            "InstanceId": "i-XXXXXXXX", 
            "CurrentState": {
                "Code": 64, 
                "Name": "stopping"
            }, 
            "PreviousState": {
                "Code": 16, 
                "Name": "running"
            }
        }
    ]
}

おおお!

止まった!

次は起動してみる

$ aws ec2 start-instances --region=ap-northeast-1 --instance-ids=i-XXXXXXXX 
{
    "StartingInstances": [
        {
            "InstanceId": "i-XXXXXXXX", 
            "CurrentState": {
                "Code": 0, 
                "Name": "pending"
            }, 
            "PreviousState": {
                "Code": 80, 
                "Name": "stopped"
            }
        }
    ]
}

ん? pendingとな・・・?

でもコンソール上では動きがある。多分大丈夫。

ね。起動しました。

雑感

大変いいね!

Directory to Directory ディレクトリをディレクトリにマウント

シンボリックリンクをしたくなりますが、FTPとかでアクセスさせるときはシンボリックはダメらしい(アクセスできない)

そこでマウントに頼ることにしましょう。これまでネットワークマウントとか外部HDDをマウントしたことしかないけど。

マウントする方法はこちら

$ mount --bind /var/www/html /home/ftp_user/www

俺はFTPのユーザーがApacheディレクトリにアクセスできるようにマウントした。

マウントの確認はこちら

$ cat /proc/mounts

解除する方法はこちら

$ umount /home/ftp_user/www

焦る瞬間はこちら

# 逆だった((((;゚Д゚))))ガクガクブルブル
$ mount --bind /home/ftp_user/www /var/www/html

# (°Д°;オソルオソル...
$ ls -l /var/www/html/
合計 0

# (´;ω;`)ブワッ

まあでもそんなあせらんといて

# とりあえずマウント解除
$ umount /home/ftp_user/www


# すると
$ ls -l /var/www/html/
合計 134848
-rw-r----- 1 root root 138082565  619 13:40 2015 index.html
-rw-r----- 1 root root 138082565  619 13:40 2015 style.css
-rw-r----- 1 root root 138082565  619 13:40 2015 script.js

# (≧∇≦)b

何故かはわからないけどマウント解除すると戻るので安心して。

あ、そりゃそうか。/home/ftp_user/wwwディレクトリの中を/var/www/html/にリンク(とは違うけど)するだけなので、データが削除されるとかそういう話じゃないね。