fixture
定番(そうだったのね!?)
でも、「定番商品」などは standard
を使ったほうがいいと思う。
somehow
何とかして、何らかの方法で、どうやら、どうしたものか、どうにか、何とか
however
それにもかかわらず、にもかかわらず、なおかつ
frustrate
いらいらさせる、欲求不満にさせる、阻む、虐める、いたぶる
broken link
リンク切れ
あとちょっとだけ使ってみたログを残す。
一度失敗しましたが、無事インストールできました。
失敗の内容は、なぜか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 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のことなんていうの? 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 ~]#
以前自動化の記事書いたけど、その前にやったこと。
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" } ] } } ] }
SystemStatus
とInstanceStatus
の違いはなに・・・?
なるほど。わからん。
らしい。これだったらなんとなく。
とりあえず、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
とな・・・?
でもコンソール上では動きがある。多分大丈夫。
ね。起動しました。
大変いいね!
シンボリックリンクをしたくなりますが、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 6月 19 13:40 2015 index.html -rw-r----- 1 root root 138082565 6月 19 13:40 2015 style.css -rw-r----- 1 root root 138082565 6月 19 13:40 2015 script.js # (≧∇≦)b
何故かはわからないけどマウント解除すると戻るので安心して。
あ、そりゃそうか。/home/ftp_user/www
のディレクトリの中を/var/www/html/
にリンク(とは違うけど)するだけなので、データが削除されるとかそういう話じゃないね。