Rubyアソシエーション認定証
一ヶ月くらいかかるのかと思いきや、一週間ちょっとで届いた。
金銀集めて一枚なのかと思ってたけど、銀は銀で貰えるんですね。金だけだと銀不足で貰えないという事かな。
ロゴの規約違反になってないことを祈るばかり。
銀と金
何か今後の話のネタにでもなればなと思ってしまってポチっちゃった件。高いわー。生活きついわー。
ぎりっぎりのすれすれ。
銀が84だった時には、「もう終わった、15kどぶに捨てたな…。」と思ったけれども、金が82でどうにか命拾い。
Ruby公式資格教科書 Ruby技術者認定試験 Silver/Gold対応 (EXPERT EXPASS)
- 作者: 増井雄一郎,小川伸一郎,(株)日立ソリューションズ藁谷修一,川尻剛,牧俊男,Rubyアソシエーション,CTCテクノロジー(株)監修
- 出版社/メーカー: 技術評論社
- 発売日: 2012/02/22
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 204回
- この商品を含むブログ (10件) を見る
合格は合格だけど、何年もやっていながら90にすら届かないという結果にはがっかりするばかり。こんな有様じゃあ、ギャグとしてしか活用できそうにない…。
まあ、雪の日のお受験という事で、良い記念になりました。
対策
『Effective Ruby』読んだ
すっかり注文したことを忘れていて、発送のメールが来たときにはちょっと驚いた。注文しなかった気がするのに、ポチり癖って怖いですね。
- 作者: Peter J. Jones,arton,長尾高弘
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/09
- メディア: 大型本
- この商品を含むブログ (2件) を見る
高くついたな、というのが率直な感想。
就活
30年くらい落ち着いてのんびり過ごせるところは、新卒でも難しいんだろうな。
就活なんて、想像するだけで面倒くさいわぁ。
また祈られて折れる日々が来るのかぁ…。
Docker 入門(1)
Docker入門 Immutable Infrastructureを実現する
- 作者: 松原豊,米林正明
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/25
- メディア: Kindle版
- この商品を含むブログ (5件) を見る
写経。
準備
$ brew install docker boot2docker
$ boot2docker init
$ boot2docker up
$ export DOCKER_HOST=tcp://192.168.59.103:2375
$ boot2docker ssh
docker@boot2docker:~$ docker pull ubuntu
docker@boot2docker:~$ docker run ubuntu /bin/echo hello world
基本操作
インタラクティブ実行
docker@boot2docker:~$ docker run -i -t -h ubuntu ubuntu /bin/bash
root@ubuntu:/# exit
バックグランドで実行
docker@boot2docker:~$ docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 10; done"
cbfbe8f4de110601bd884fb7fa3e1c252d4abcc4b29e2f996b2c642c0cc1b567
docker@boot2docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cbfbe8f4de11 ubuntu:14.04 /bin/sh -c 'while tr 41 seconds ago Up 40 seconds silly_turing
docker@boot2docker:~$ docker logs -f cbfbe8f4de110601bd884fb7fa3e1c252d4abcc4b29e2f996b2c642c0cc1b567
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
コンテナの停止
docker@boot2docker:~$ docker stop cbfbe8f4de110601bd884fb7fa3e1c252d4abcc4b29e2f996b2c642c0cc1b567
cbfbe8f4de110601bd884fb7fa3e1c252d4abcc4b29e2f996b2c642c0cc1b567
docker@boot2docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
コンテナの再実行
docker@boot2docker:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cbfbe8f4de11 ubuntu:14.04 /bin/sh -c 'while tr 4 minutes ago Exited (-1) About a minute ago silly_turing
198ac0c5f14f ubuntu:14.04 /bin/bash 3 hours ago Exited (0) 3 hours ago desperate_darwin
0aa4a140fb2c ubuntu:14.04 /bin/echo hello worl 3 hours ago Exited (0) 3 hours ago romantic_jones
docker@boot2docker:~$ docker restart cbfbe8f4de11
cbfbe8f4de11
docker@boot2docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cbfbe8f4de11 ubuntu:14.04 /bin/sh -c 'while tr 4 minutes ago Up 26 seconds silly_turing
コンテナへのアタッチ
docker@boot2docker:~$ docker attach cbfbe8f4de11
Hello world
Hello world
Hello world
Hello world
^C
docker@boot2docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
コンテナの強制終了
※ stop ではタイムアウトするまでコンテナの終了を待つが、kill は即時にコンテナを終了させる。
docker@boot2docker:~$ docker restart cbfbe8f4de11
cbfbe8f4de11
docker@boot2docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cbfbe8f4de11 ubuntu:14.04 /bin/sh -c 'while tr 7 minutes ago Up 4 seconds silly_turing
docker@boot2docker:~$ docker kill cbfbe8f4de11
cbfbe8f4de11
docker@boot2docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
コンテナ内プロセスの監視
docker@boot2docker:~$ docker restart cbfbe8f4de11
cbfbe8f4de11
docker@boot2docker:~$ docker top cbfbe8f4de11
PID USER COMMAND
998 root /bin/sh -c while true; do echo Hello world; sleep 10; done
1018 root sleep 10
コンテナの状態の確認
docker@boot2docker:~$ docker inspect cbfbe8f4de11
[{
"Args": [
"-c",
"while true; do echo Hello world; sleep 10; done"
],
"Config": {
"AttachStderr": false,
"AttachStdin": false,
"AttachStdout": false,
"Cmd": [
"/bin/sh",
"-c",
"while true; do echo Hello world; sleep 10; done"
],
"CpuShares": 0,
"Cpuset": "",
"Domainname": "",
"Entrypoint": null,
"Env": [
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"ExposedPorts": null,
"Hostname": "cbfbe8f4de11",
"Image": "ubuntu",
"Memory": 0,
"MemorySwap": 0,
"NetworkDisabled": false,
"OnBuild": null,
"OpenStdin": false,
"PortSpecs": null,
"StdinOnce": false,
"Tty": false,
"User": "",
"Volumes": null,
"WorkingDir": ""
},
"Created": "2014-08-18T09:43:46.165018471Z",
"Driver": "aufs",
"ExecDriver": "native-0.2",
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"Dns": null,
"DnsSearch": null,
"Links": null,
"LxcConf": [],
"NetworkMode": "bridge",
"PortBindings": {},
"Privileged": false,
"PublishAllPorts": false,
"VolumesFrom": null
},
"HostnamePath": "/mnt/sda1/var/lib/docker/containers/cbfbe8f4de110601bd884fb7fa3e1c252d4abcc4b29e2f996b2c642c0cc1b567/hostname",
"HostsPath": "/mnt/sda1/var/lib/docker/containers/cbfbe8f4de110601bd884fb7fa3e1c252d4abcc4b29e2f996b2c642c0cc1b567/hosts",
"Id": "cbfbe8f4de110601bd884fb7fa3e1c252d4abcc4b29e2f996b2c642c0cc1b567",
"Image": "c4ff7513909dedf4ddf3a450aea68cd817c42e698ebccf54755973576525c416",
"MountLabel": "",
"Name": "/silly_turing",
"NetworkSettings": {
"Bridge": "docker0",
"Gateway": "172.17.42.1",
"IPAddress": "172.17.0.5",
"IPPrefixLen": 16,
"PortMapping": null,
"Ports": {}
},
"Path": "/bin/sh",
"ProcessLabel": "",
"ResolvConfPath": "/mnt/sda1/var/lib/docker/containers/cbfbe8f4de110601bd884fb7fa3e1c252d4abcc4b29e2f996b2c642c0cc1b567/resolv.conf",
"State": {
"ExitCode": 0,
"FinishedAt": "2014-08-18T09:50:53.222406799Z",
"Paused": false,
"Pid": 998,
"Running": true,
"StartedAt": "2014-08-18T09:52:09.613630607Z"
},
"Volumes": {},
"VolumesRW": {}
}
]
docker@boot2docker:~$ docker inspect -f "{{.State}}" cbfbe8f4de11
map[ExitCode:0 FinishedAt:2014-08-18T09:50:53.222406799Z Paused:false Pid:998 Running:true StartedAt:2014-08-18T09:52:09.613630607Z]
コンテナのコミット
docker@boot2docker:~$ docker commit cbfbe8f4de11
d7a471af5180a8185859e0684058b73cbd004e53cfb858b5859e5c5d0e731246
docker@boot2docker:~$ docker images | grep d7a471af5180
<none> <none> d7a471af5180 54 seconds ago 225.4 MB
コンテナの削除、イメージの削除
docker@boot2docker:~$ docker rm cbfbe8f4de11
Error response from daemon: Impossible to remove a running container, please stop it first or use -f
2014/08/18 09:57:16 Error: failed to remove one or more containers
docker@boot2docker:~$ docker kill cbfbe8f4de11
cbfbe8f4de11
docker@boot2docker:~$ docker rm cbfbe8f4de11
cbfbe8f4de11
docker@boot2docker:~$ docker rmi d7a471af5180
Deleted: d7a471af5180a8185859e0684058b73cbd004e53cfb858b5859e5c5d0e731246
コンテナのイメージを共有する
Usage: docker push NAME[:TAG]
Dockerfile
$ docker build .
- FROM
- RUN
- CMD
- EXPOSE
- ENV
- ADD
- ENTRYPOINT
- VOLUME
- USER
- WORKDIR
- ONBUILD
入門 Ansible (1)
- 作者: 若山史郎
- 発売日: 2014/07/30
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
準備
$ brew install ansible
$ ansible --version
ansible 1.7.1
- Python 2 系が必要(3系では動かず、今後の対応も不明だとか)
- 対象ホストでも Python 2 系がインストールされている必要があるとか
- /usr/bin/python を前提としているとのこと
- ansible_python_interpreter で python コマンドのパス指定可能
Vagrant で対象ホストを用意
$ vagrant box add hashicorp/precise64
$ vagrant init hashicorp/precise64
inventory ファイル
$ vagrant up
$ vagrant ssh-config --host sample01 >> ~/.ssh/config
$ cat <<\EOF > hosts
sample01
EOF
$ ansible -i hosts sample01 -m command -a 'date'
sample01 | success | rc=0 >>
Mon Aug 18 04:56:54 UTC 2014
$ ansible -i hosts all -m setup
sample01 | success >> {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.0.2.15"
],
...
"changed": false
}
グループ
[web]
web01.example.com
web02.example.com
[db]
db01.example.com
db02.example.com
グループのグループ
[hoge:children]
hogeweb
hogedb
[hogeweb]
web01.example.com
web02.example.com
[hogedb]
db01.example.com
db02.example.com
ホスト単位の設定
web01.example.com ansible_ssh_user=ec2-user
グループ単位の設定
[web]
web01.example.com
web02.example.com
[web:vars]
ansible_ssh_port=2222
ansible_python_interpreter=/usr/local/bin/python
playbook
ホストと inventory の準備
$ git diff Vagrantfile
diff --git a/Vagrantfile b/Vagrantfile
index 91b7b92..14c9e85 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -12,6 +12,9 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "hashicorp/precise64"
+ config.vm.define :web01
+ config.vm.define :web02
+
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
$ vagrant up
$ vagrant ssh-config >> ~/.ssh/config
$ cat <<\EOF > hosts
[web]
web01
web02
EOF
playbook を書いてみる
$ cat <<\EOF > web.yml
---
- hosts: all
sudo: yes
remote_user: vagrant
vars:
username: newuser
tasks:
- name: ユーザーを追加
user: name={{ username }} group=admin shell=/bin/bash
EOF
$ ansible-playbook -i hosts web.yml
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [web02]
ok: [web01]
TASK: [ユーザーを追加] ***************************************************************
changed: [web01]
changed: [web02]
PLAY RECAP ********************************************************************
web01 : ok=2 changed=1 unreachable=0 failed=0
web02 : ok=2 changed=1 unreachable=0 failed=0
handler, notify
タスクの notify で handlers で定義した名前を指定すると、そのハンドラを実行出来る感じ。
tasks:
- name: 設定ファイルをコピー
copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: apacheの再起動
handlers:
- name: apacheの再起動
service: name=httpd sate=restarted