Docker コマンド早見表
バージョン
1 | docker --version |
コンテナ
1 | docker ps # running コンテナ一覧 |
イメージ
1 | docker pull <IMAGE NAME>[:tag] # イメージダウンロード |
イメージ作成
1 | docker build -t NAME[:TAG] |
Docker Compose
1 | docker-compose up -d # デタッチモードでイメージよりコンテナ起動 |
1 | docker --version |
1 | docker ps # running コンテナ一覧 |
1 | docker pull <IMAGE NAME>[:tag] # イメージダウンロード |
1 | docker build -t NAME[:TAG] |
1 | docker-compose up -d # デタッチモードでイメージよりコンテナ起動 |
開発環境構築用に作成した、
Vagrant (Ubuntu) に Docker と Docker Compose をインストールする手順をまとめました。
かなりシンプルにしてます。
1 | # -*- mode: ruby -*- |
vagrant provision で docker compose をインストールすることも可能ですが
vagrant ならではの provision だと他環境で利用できない為、OS 上でインストールする方針です。
1 | MacOS%$ vagrant up |
1 | vagrant%$ lsb_release -a |
1 | vagrant%$ uname -r |
カーネルバージョンが 3.10 より低いとバグを引き起こす危険性があるので NG。
別のカーネルバージョンの高い box を使用しましょう。
1 | vagrant%$ sudo apt-get remove docker docker-engine |
Docker に aufs ストレージを使用許可する為です。
1 | vagrant%$ sudo apt-get update |
1 | // Docker インストール |
1 | vagrant%$ curl -L "https://github.com/docker/compose/releases/download/1.12.0/docker-compose-$(uname -s)-$(uname -m)" > ~/docker-compose |
1 | vagrant%$ exit |
Docker を使用していない時にメモリのオーバーヘッドとパフォーマンス劣化を低減させる様、
GRUB (GRand Unified Bootloader: グラブ or ジーラブ) に設定する必要があります。
1 | vagrant%$ sudo vi /etc/default/grub |
1 | vagrant%$ sudo update-grub |
以上で準備完了です ♪
簡単なチュートリアルとして nginx コンテナを立ててみます。
1 | vagrant%$ docker run --rm -p 80:80 nginx:mainline-alpine |
ローカルの Mac からブラウザでアクセス
※192.168.35.101 … Vagrant で指定した private ip
問題なく Welcome ページが表示されました。
先程のログに以下のようにアクセスログが出力されるのがわかります。
1 | 192.168.35.1 - - [13/Apr/2017:10:45:46 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" "-" |
MacOS → Vagrant → Docker
とアクセスできるようになりました ♪
今回作成した Box を Vagrant Cloud に置きました。
https://atlas.hashicorp.com/kenzo0107/boxes/ubuntu14.04.5LTS-docker-dockercompose/
こちら設定を元にこれから様々な環境構築を記載していきたいと思います ♪
前回 Vagrant (Ubuntu)で Docker, Docker Compose 環境構築しました。
上記環境を元に Docker Compose チュートリアルを実行しました。
完全な備忘録です。
1 | vagrant%$ mkdir composetest && cd composetest |
1 | from flask import Flask |
pip でインストールするモジュールを列挙します。
1 | flask |
1 | FROM python:3.4-alpine |
1 | version: '2' |
1 | vagrant%$ docker-compose up |
ブラウザにアクセスしてみる。
表示されました!
リロードする度に以下数字部分がインクリメントされるのが確認できます。
1 | Hello from Docker! I have been seen 1 times. |
便利 ♪
Terraform の Hello World 的なチュートリアルと思っていただけたら幸いです。
RSA フォーマットで鍵を生成します。
1 | $ ssh-keygen -t rsa |
公開鍵を起動した EC2 インスタンスに登録し
秘密鍵でアクセスします。
以下のように利用する予定です。
1 | $ ssh -i ~/.ssh/terraform-test <ec2 user>@<ec2 public ip> |
Point !
resource "aws_key_pair"
で使用する公開鍵設定をしています。resource "aws_security_group"
で SSH(ポート 22)を開いてます。resource "aws_instance"
で使用しているセキュリティグループの指定は vpc_security_group_ids
を利用main.tf
1 | provider "aws" { |
1 | variable "access_key" {} |
1 | access_key = "A******************Q" |
1 | $ terraform plan |
1 | $ terraform apply |
AWS コンソール上で起動確認
1 | $ ssh -i ~/.ssh/terraform-test ubuntu@ec2-54-65-244-25.ap-northeast-1.compute.amazonaws.com |
無事 SSH ログインできました!
terraform を見ながら各パラメータの利用意図を確認しながら
設定してみましたが
パラメータの説明自体はざっくりで利用方法まではわからないです。
Teffaform のチュートリアルに始まり
その他 Stack Overflow で
適宜パターンを蓄積していく学習が程よいと思います。
非常にミニマムなインフラ構築をしてみます。
※個人のアカウントでも無料枠を使えば数十円しか掛からなかったです。
1 | $ brew install terraform |
1 | $ terraform version |
では、早速使ってみます。
1 | provider "aws" { |
1 | $ terraform plan |
1 | $ terraform apply |
Amazon Console からインスタンスが起動されたことが確認できます。
上記 main.tf を github 等で管理するとなると
access_key, secret_key が露見されてしまいます。
その為、以下の様に別ファイルで管理することが望ましいです。
1 | variable "access_key" {} |
1 | access_key = "A******************Q" |
1 | $ terraform plan |
正しく実行できることが確認できました。
terraform.tfvars
ファイルは .gitignore に登録しておくなど
絶対に公開されない様な設定が望ましいと思います。
1 | variable "access_key" {} |
変更される内容が表示されます。
1 | $ terraform plan |
最初に作成したインスタンスは破棄され、新たにインスタンスを作成していることがわかります。
terraform で新規作成・変更ができました。
次は破棄してみましょう。
破棄対象のリソースが表示されます。
1 | $ terraform plan -destroy |
1 | $ terraform destroy |
Amazon コンソールで破棄されたことを確認できます。
1 | variable "access_key" {} |
1 | $ terraform plan |
1 | $ terraform apply |
Elastic IP が設定されたインスタンスが起動していることが確認できます。
※ただ、起動しただけで接続できないことがわかります(>_<) 次回実施します
[f:id:kenzo0107:20170323230208p:plain]
破棄される Elastic IP, インスタンスが確認できます。
1 | $ terraform plan -destroy |
1 | $ terraform destroy |
全インスタンスが破棄されていることが確認できました。
1 | ... |
ex) region us-west-2 を選択
1 | $ terraform apply -var region=us-west-2 |
生成された Elastic IP の値が知りたいときなど便利です。
1 | resource "aws_eip" "ip" { |
出力値が確認できます。
1 | $ terraform apply |
より明示的にパラメータを絞って表示できます。
1 | $ terraform output ip |
1 | $ terraform show |
1 | $ terraform graph | dot -Tpng > graph.png |
1 | $ brew install graphviz |
簡単でしょ?と言われているようなツールでした ♪
引き続きプロビジョニングや AWS の各種設定をしていきたいと思います。
node_expoter のオプション --collector.textfile.directory
で指定したディレクトリに *.prom
という拡張子を配置することで
そこに記述したメトリクス情報を prometheus server が読み取ってくれます。
この *.prom
ファイルを一定時間毎に更新すればメトリクスが自作できる、というものです。
上記手順では以下に node_exporter を配置しています。
環境によって適宜書き換えてください。
1 | /usr/local/node_exporter/node_exporter |
1 | $ cd /usr/local/node_exporter |
今回は httpd の process count のメトリクス追加することとします。
1 | # node_exporter httpd 5分毎更新 |
1 | node_httpd_count 24 |
上記の node_httpd_count
がメトリクス名になります。
以下のようにディレクトリ指定します。
1 | node_expoter --collector.textfile.directory /usr/local/node_exporter/text_collector |
無事できました!
これを利用してるとシェル芸で色々事足りることもあります ♪
一助になれば何よりです。
Golang オフィシャルサイトに書かれているそのままです。
他 Golang 関連記事説明の為に、また、備忘録として記述します。
Golang Official - Downloads から環境に合わせ
最新バージョンをインストールすることをお勧めします。
1 | $ cd /usr/local/src |
1 | $ sudo cat << 'EOF' | sudo tee /etc/profile.d/golang.sh |
1 | $ go version |
以上で Golang のインストール完了です。
Amazon Linux に node_exporter をインストールし起動した所以下のエラーが発生し、起動停止してしまいました。
1 | ERRO[0007] ERROR: hwmon collector failed after 0.000011s: open /proc/class/hwmon: no such file or directory source="node_exporter.go:92" |
Hard Ware MONitoring. Linux カーネルのセンサーチップから Hard Ware の温度やファン回転数や電圧を取得できる。
環境情報は以下の通りです。
上記エラーですが issue として上がっていました。
そして解決されてました!
タイミングが悪かったのかマージされる前の release を取得していた為
このエラーに遭遇していました。
最新のソースは master ブランチしてビルドするのが良さそうです。
以下に Amazon Linux で実施したインストール手順をまとめました。
以下 Golang オフィシャルサイトにある標準的なインストール方法です。参考にしてください。
1 | $ mkdir -p $GOPATH/src/github.com/prometheus |
1 | // pid ファイル置き場 作成 |
1 | $ cd /etc/init.d |
1 | $ sudo /etc/init.d/node_exporter start |
無事エラーなく起動するようになりました ♪
前回 Node Exporter 構築しました。
今回は監視実施サーバで Alertmanager 構築を実施します。
アラートのレベルによって通知先をどの程度の頻度で送信するかを管理します。
あくまで、通知先の管理をします。
実際のアラート条件の設定は Prometheus Server でします。
1 | $ cd /usr/local/src |
1 | $ sudo ln -s /usr/local/alertmanager/alertmanager /bin/alertmanager |
以下 Slack へ通知設定です。
1 | $ cd /usr/local/alertmanager |
slack 通知箇所を適宜変更して下さい。
とりあえず起動するならこれだけ
1 | $ sudo alertmanager -config.file alertmanager.yml |
http://alertmanager_server:9093/#/alerts
にアクセスすると以下のような画面が表示されます。
Prometheus 同様、Alertmanager も起動スクリプトを作成しそこで起動管理をします。
1 | $ cat << 'EOF' > /usr/local/alertmanager/option |
1 | $ sudo cat << 'EOF' | sudo tee /usr/lib/systemd/system/alertmanager.service |
1 | $ sudo systemctl daemon-reload |
アラート通知条件は Prometheus Server 側で設定します。
Prometheus Official - ALERTING RULES
サンプルとして以下設定します。
1 | $ cd /usr/local/prometheus-server |
Prometheus の起動オプションで Alertmanager URL 設定します。
1 | -alertmanager.url=http://localhost:9093 |
1 | $ cd /usr/local/prometheus-server |
今回 Alertmanager は Prometheus Server と同サーバ上に設定しているので
1 | http://localhost:9093 |
となっていますが、ドメインが異なる場合は適宜設定してください。
設定した通知条件が表示されています。
監視対象サーバの node_exporter を停止してみます。
1 | $ sudo systemctl stop node_exporter |
すると…
Slack に通知が届きました!
http://alertmanager_server:9093/#/alerts
にアクセスすると通知内容一覧が表示されます。
以上で簡単ながら
Prometheus からリモートサーバを監視しアラート通知するところまでを
まとめました。
Grafana 3.x 以降でデフォルトプラグインで Prometheus をサポートしていたりと
Prometheus のフロントは Grafana が導入しやすく相性が良かったです。
メトリクスを自作したり、Prometheus 独自のクエリを駆使して
様々なメトリクス監視が実現できます。
改めて自身で構築してみて
Line Casual Talks #1, #2 を見直すと非常に理解が深まると思います。
一助になれば何よりです。
以上です。
ご静聴ありがとうございました。
前回 Prometheus Server 構築しました。
今回は 監視対象サーバで Node Exporter 構築を実施します。
1 | $ cd /usr/local/src |
1 | $ sudo ln -s /usr/local/node_exporter/node_exporter /bin/node_exporter |
とりあえず起動するならこれだけ
1 | $ sudo node_exporter |
http://node_exporter_server:9100/metrics にアクセスし
取得できる node_exporter で取得しているサーバのメトリクス情報が確認できます。
Prometheus 同様、Node Exporter も起動スクリプトを作成しそこで起動管理をします。
1 | $ sudo cat << 'EOF' | sudo tee /usr/lib/systemd/system/node_exporter.service |
1 | $ sudo systemctl daemon-reload |
http://node_exporter_server:9100/metrics にアクセスします。
以下のように表示されていれば Node Exporter 起動成功です。
今回は AWS EC2 インスタンスで起動中の node_exporter によるメトリクス取得設定です。
※ 監視実施サーバに AmazonEC2ReadOnlyAccess
をアタッチしたロール設定をする必要があります。
※ 監視対象サーバに 監視対象サーバから 9100 ポート
へアクセスできるようにセキュリティグループ設定します。
以下設定は region 指定しアクセス権のある Instance のメトリクスを取得します。
1 | # my global config |
全インスタンスを監視であれば上記で問題ありません。
ですが、監視対象をある程度条件で絞りたいケースがあります。
そんな時、Prometheus では relabel_configs
でインスタンスの設定タグで絞る方法があります。
1 | # my global config |
1 | $ sudo systemctl restart prometheus.service |
http://prometheus_server:9090/consoles/node.html
Up : Yes
となっている Node のリンクをクリックすると CPU, Disck のグラフが確認できます。
次回は 監視対象で Alertmanager 構築します。