勉強会用資料
boto3を使えばプログラムから情報を取れる
python3がいる
import boto3
ec2 = boto3.client('ec2',
aws_access_key_id='XXXXXXX',
aws_secret_access_key='XXXXXXX' ,
region_name='ap-northeast-1'
)
responce = ec2.describe_instances(
Filters=[{'Name':'network-interface.addresses.private-ip-address','Values':["172.31.13.240"]}]
)
print(responce)
python test.py
$ cat .bashrc
~~~~~~~~~
alias python="python3"
alias pip="pip3"
テンプレートが長くなった場合
ネスト機能を使えば分割できるらしい
awscliの初期設定
適当にやったのでやり方をまとめておく。
cloudformationテンプレート公式サンプル
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/sample-templates-services-us-west-2.html
https://github.com/watatahiki/aws/tree/master/CloudFormation-Templates
cloudwatch(CPU使用率監視)手動設定
負荷ツールstress
https://www.ooooouchi.info/entry/2020/06/05/080000
https://go-journey.club/archives/6782
sudo yum install stress -y
- CPU1コアに対して3分間負荷を掛けます。
stress --cpu 1 --timeout 3m
top
- メモリ負荷を掛けたい.3分間負荷
4つのプロセスで,400MB使う
stress --vm 4 --vm-bytes 0.1G --timeout 3m
- ディスクに負荷を掛けたい.2分間負荷
1プロセスがディスクに対して1GBの書き込みを2分間行なって負荷を掛けます。
stress --hdd 1 --hdd-bytes 1G --timeout 2m
cloudwatch(Cloudformation)
https://engineers.weddingpark.co.jp/aws-cloudformation-cloudwatch-alarm/
https://github.com/watatahiki/aws/blob/master/CloudFormation-Templates/CloudWatch/CloudWatch-Alarm/CloudWatch-Alarm.yaml
cloudformationのコード生成ツール
認証がいるのでつかってない
https://dev.classmethod.jp/articles/former2/
dockerなしバージョンのcloudformationも作ってみよう
これはやめよう。やるとしたらansibleと連携
slack通知chabot
https://blog.serverworks.co.jp/2021/12/27/210000
https://dev.classmethod.jp/articles/aws-chatbot-notification-cloudformation-stack-event/
cloudformation-use-sns-topic
cloudformation-notify-role
以下の設定をした。slackとの接続を全部やってくれる
事前準備:slackで部屋を作って起動していること
- sns
- chabot
ガードレールのポリシーはとりあえずこれ
arn:aws:iam::aws:policy/CloudWatchReadOnlyAccess
cloudformationの中に書く通知する設定がわからない
コマンドラインからNotificationARNsを設定してスタック作成する方法はあるみたい
サンプル
aws cloudformation deploy \
--template-file datastore.yml \
--stack-name DataStoreStack \
--notification-arns arn:aws:sns:ap-northeast-1:1234567890:cloudformation-use-sns-topic
ためしてみるか
cd ~/aws-study
aws cloudformation deploy \
--template-file vpc-03_cloudfomation_ansible.yml \
--stack-name test01 \
--notification-arns arn:aws:sns:ap-northeast-1:1234567890:cloudformation-use-sns-topic \
--capabilities CAPABILITY_NAMED_IAM
# 出力結果
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - test01
1234567890はなんでもいいのか?
自分のアカウントIDだった12桁のやつのやつ。UIから見れます。画面右上のアカウントクリック
--capabilities CAPABILITY_NAMED_IAM
はおそらく、UIでスタック作成するときの最後につけているチェックになると思われる
今更だが、UIで作成指示するよりめちゃくちゃ楽だった
削除はログ消さないと失敗するので、UIから行う
ディメンション Dimensions
https://dev.classmethod.jp/articles/amazon-cloudwatch-keywords/
ansible
https://github.com/moritoki-study/prometheus-playbook
https://github.com/moritoki-study/prometheus-playbook-cloudformation
https://log.noid11.com/posts/how-to-ping-ec2-from-mac-using-ansible/
https://rurukblog.com/post/ansible-playbook-write/
https://qiita.com/ArimaRyunosuke/items/1f9d840311584d8160bc
https://densan-hoshigumi.com/server/playbook-maintainability
https://qiita.com/makaaso-tech/items/0375081c1600b312e8b0
https://github.com/ot-nemoto/amazon-ec2-by-ssm-association/tree/4304cb468eda72d993fc77cf656dd0797ee5f3a6
https://github.com/ot-nemoto/ansible-nginx
これが実際にcloudformationと連携しているansibleのサンプル
gitのファイル、ディレクトリかも、多いとcloudformationの制限にひっかかる。なので不要なものは削除する必要がある。
もしくはzipにしておく必要がある。zipはまだ試してない
課題:ansibleがエラーになってもログをみないとわからない。通知が欲しい。
- macセットアップ
# 前提:awscliの設定して、接続できる状態
brew install ansible
ansible --version
brew install ansible-lint
mkdir ~/ansible
- ec2作成、cloudformation
- port解放、cloudformation
- 実行コマンド
[12:51:16 ~/prometheus-playbook ]$ ansible-playbook -i host_vars/prod.yml site.yml
[13:44:47 ~/prometheus-playbook ]$ ansible-lint site.yml
- prometheus
sudo mkdir /etc/prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz
sudo mv ~/prometheus-2.30.3.linux-amd64/* /etc/prometheus
# daemon(常駐プロセス)
$ sudo vi /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus - Monitoring system and time series database
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target
[Service]
Type=simple
ExecStart=/etc/prometheus/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/etc/prometheus/data
[Install]
WantedBy=multi-user.target
$ sudo systemctl enable prometheus.service
# 最後に、アラートルールと、prometheus.yaml配置
# プロセス起動
sudo systemctl start prometheus.service
http://<ホスト名>:9090
3.2. prometheus exporter
3.3. alertmanager
3.4. grafana
- golang
4.3. 検証用HTTP Serverのセットアップ
prometheusの設定 - alertmanagerの設定
やったこと
項目 | ||
---|---|---|
vpc | ○ | |
ec2 | ○ | オートスケールやってみたい |
elb | ||
ecs | ||
lamda | ||
cloudwatch | ||
cloudtrail | ||
s3 | ||
rds | ||
iam | ○ | |
code4兄弟 | ○ | |
elastic beanstalk | ||
opsworks | ||
cloudformation | ○ |
iamで公開鍵設定したい
https://sig9.hatenablog.com/entry/2020/05/05/000000
勉強会では自分のアカウントでやってもらおう。
デフォルトではiamユーザを作れば自動でEC2にアカウントが作成されるわけではないようだ。
clooudformationの構築後の変更方法
構築後、ec2を手動で追加した場合など、その変更をtempateに取り込む方法があるようだ
qiitaをvscodeでアップデート
https://qiita.com/inayuky/items/48af9fb0b4280869cc8f
https://qiita.com/sakano/items/685b6a15dd600ccd34bd
cmd+q cmd+u
tab問題
https://qiita.com/akumachan/items/ec32d9cdf4a07dc6cc68
terraform
teraformで作ったプログラムがなんでもawsで使えるのかと思ったらそうではない。terraformでaws用で作らなければならない。1つの言語で各プラットフォーム向けのプログラムが作れるだけ。
コンテナからグローバルIPにアクセスできるのか?
できない。なぜだろう????
状況まとめ
今できていること
- aws環境にデプロイするcloudformationのテンプレート。インスタンス作成(1台)、各種カスタマイズ(ホスト名設定、IP設定、ロケール設定、dockerインストール、docker-composeインストール)。監視サーバの設定、起動まで一発でできる
- dockerイメージ作成をパイプラインでおこなっている。ECRに登録
やらなければいけないこと
- 監視設定の理解
- slack通知
- 本ドキュメントの整理
アラートの公式
アラートルールの解説がいい感じ
https://www.techscore.com/blog/2017/12/07/prometheus-monitoring-setting/
https://qiita.com/noexpect/items/5faab079fbf700ae7eb3
if
alertmanagerでアラートのメッセージを組み立てる
title: '{{ if eq .Status "firing" }}[FIRING]{{else}}[RESOLVED]{{end}} {{ .GroupLabels.alertname }}'
上記のメッセージを見やすくすると
title: '{{ if eq .Status "firing" }} # .Statusはprometheusから送られてくる値
[FIRING]
{{else}}
[RESOLVED]
{{end}}
{{ .GroupLabels.alertname }}'
# タイトルには[FIRING]or[RESOLVED]のあとにアラート名がつく
text: '{{ if eq .Status "firing" }}{{ .CommonAnnotations.firing_text }}{{else}}{{ .CommonAnnotations.resolved_text }}{{end}}
上記のメッセージを見やすくすると
text: '{{ if eq .Status "firing" }}
{{ .CommonAnnotations.firing_text }} # firing_textはpromeheusのアラートルールのannotationsで定義したプロパティ
{{else}}
{{ .CommonAnnotations.resolved_text }} # resolved_textはpromeheusのアラートルールのannotationsで定義したプロパティ
{{end}}
# 本文にはannotationsで定義したメッセージがセットされる。
# prometheusからのデータを参照するときは、.CommonAnnotations.プロパティ名だということがわかる
聞くこと
- {{}}の記法、yamlの中のifはbash?
- yaml内の各項目を調べるマニュアルは?
- httpserverの監視の意味
- アラートは全部自分でyamlに書いて定義するしかないのか?画面から監視設定を入れるようなことはできないのか?
- 1からアラートルールを作っていると何をつくっていいかわからない、おまかせでまとめて導入するサンプルみたいなものあるのか?
アラートルールはテストがあるようだ
yamlの構造をみたいとき
将来的にやりたいこと
- 複数台インスタンス3、4台に機能を分割。複数台、コンテナ起動、ネットワークが別れるので難しくなる。いやグローバルIPがあれば、そんなことしなくてもいい?
- S3 にログを記録
- 各種カスタマイズの部分をansibleで実行する。s3かgithubにplaybookを置くだけで実行できるぽい。cloud-initで実施するのはあまりよくないらしい。処理を分けたい
- awsの監視方法、cloudwatch、ログ監視、http監視
- cloudformationで作成するサーバに自動停止ルールに適応cloudwatch
- awsコマンドでスタック作成
身についている技術
- docker
- docker-compose
- dockerイメージ作成、aws codebuild
- prometheus/garafa/alertmanager
- cloudformaiton、vscodeで開発
UI
新しいインスタンスを使うときに、DNS名を一括置換しよう
プロメテウスサーバ
- prometheusUI
http://ec2-52-198-61-142.ap-northeast-1.compute.amazonaws.com:9090 - node-exporter
http://ec2-52-198-61-142.ap-northeast-1.compute.amazonaws.com:9100/metrics - grafana
http://ec2-52-198-61-142.ap-northeast-1.compute.amazonaws.com:3000
ぱすわーどadmin/admin - alertmanager
http://ec2-52-198-61-142.ap-northeast-1.compute.amazonaws.com:9093 - blackbox_exporter
http://ec2-52-198-61-142.ap-northeast-1.compute.amazonaws.com:9115/
http://ec2-52-198-61-142.ap-northeast-1.compute.amazonaws.com:9115/metrics
test_httpserverサーバ
-
node-exporter
http://ec2-13-231-244-236.ap-northeast-1.compute.amazonaws.com:9100/metrics -
grok_exporter用
http://ec2-13-231-244-236.ap-northeast-1.compute.amazonaws.com:9144/metrics -
test_httpserver用
http://ec2-13-231-244-236.ap-northeast-1.compute.amazonaws.com:8080/hello
http://ec2-13-231-244-236.ap-northeast-1.compute.amazonaws.com:8080/world
http://ec2-13-231-244-236.ap-northeast-1.compute.amazonaws.com:8081/metrics
sudo systemctl status prometheus.service
sudo systemctl stop prometheus.service
sudo systemctl start prometheus.service
sudo systemctl status test_httpserver.service
sudo systemctl stop test_httpserver.service
sudo systemctl start test_httpserver.service
sudo systemctl status blackbox_exporter.service
sudo systemctl stop blackbox_exporter.service
sudo systemctl start blackbox_exporter.service
sudo systemctl status grok_exporter.service
sudo systemctl stop grok_exporter.service
sudo systemctl start grok_exporter.service
slackwebhook
使ってないと無効になるらしい。このメッセージ出たら再発行してみよう
有効にするボタンとかないだろうか
alertmanager | level=error ts=2022-02-13T07:05:53.806Z caller=dispatch.go:354 component=dispatcher msg="Notify for alerts failed" num_alerts=1 err="slack/slack[0]: notify retry canceled due to unrecoverable error after 1 attempts: channel \"#notice\": unexpected status code 403: invalid_token" a
追記、こっちをためしている
https://dev.classmethod.jp/articles/slack-incoming-webhook-by-slack-app/
この画面かもしれない、無効化どうかを確認
slackの画面で、設定と管理、APPの管理、画面右上のビルドをクリック、表示された画面のしたの方にexpireの文字あり
app名はalertmanager
ssh
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ec2-user@ec2-13-112-250-110.ap-northeast-1.compute.amazonaws.com
parametaerから取得してる例
Parameters:
commands:
- !Sub |
cloud-initは古いらしい。(OSの初期セットアップをしてくれる機能)
いいかも
構成図(デザイナで出力)
使っているリージョン
ap-northeast-1
外国のどこかだとずっと思っていたが、これは東京
導入資料?
アベイラビリティゾーン
おそらく4つの指定がある。2つのゾーンつかうときは、1aと1c使っておけばよいだろう
- ap-northeast-1a
- ap-northeast-1b 1aと1bは同じっぽい
- ap-northeast-1c
- ap-northeast-1d
AvailabilityZone: "ap-northeast-1a"
AvailabilityZone: "ap-northeast-1c"
組み込み関数
W3010 Don't hardcode ap-northeast-1a for AvailabilityZones
対策
metadata
そういえばsudoパスワードいつきめた?
デフォルトはないらしい
ホスト名セット
userdata実行ログ
サーバに入って
sudo cat /var/log/cloud-init-output.log
sudo less -N /var/log/cloud-init-output.log
起動テンプレート
シングルAZとマルチAZの違いは?
良さげサンプル
- マルチでやってみよう。webサーバを2つにするだけ
- 最初はシングル
templateのローカルチェック
[14:22:15 ~/aws-study ]$ aws cloudformation validate-template --template-body file://test.yaml
An error occurred (ValidationError) when calling the ValidateTemplate operation: Template format error: YAML not well-formed. (line 2, column 25)
vscode
https://qiita.com/Kouichi_Itagaki/items/31d640d708925c0ae838
https://qiita.com/kojiro_ueda/items/15cd7cc2535fac61fcdd
便利ツールらしい
aws図でを書くツール
cloudformation
https://qiita.com/tyoshitake/items/c5176c0ef4de8d7cf5d8
https://dev.classmethod.jp/articles/cloudformation-beginner01/
https://go-journey.club/archives/15974
デザイナ
使わない方がいい。
https://go-journey.club/archives/14087
https://dev.classmethod.jp/articles/cloudformation-knowhow/
aws toolkit
結局使ってない
https://qiita.com/toshihirock/items/d37ee8a41a11f2c4ffb2
nginxテスト
IP置換
sudo vim /data/docker/containers/prometheus/etc/prometheus/prometheus.yml
%s/172.31.13.240/3.112.52.64/g
%s/3.112.52.64/172.31.13.240/g
docker-compose up
image作成を自動化できるか?
リポジトリはpublicで作ること。privateで作ると利用するときに認証がいる
- AmazonElasticContainerRegistryPublicFullAccess
公式手順
## image作成パイプライン
https://github.com/moritoki-study/test_httpserver_image
docker pull public.ecr.aws/l8s6z2n6/test_httpserver:latest
codeデプロイからデプロイできるかな
https://qiita.com/tatsuya___/items/cf81a11fdb7e54bb3890
https://qiita.com/MasayaMizuhara/items/12d1f3810601f6f07e5f
後者を使った気がする。dockerだからこれではない気がする。
今はcloudinitの最後の処理でtar xvfでデータを展開している
構築環境
cd ~/
git clone https://github.com/moritoki-study/prometheus_setup.git
cd ~/prometheus_setup;sudo chown -R root:root data;sudo tar cvfz data.tar.gz data;sudo tar xfvz data.tar.gz -C /
# ルート直下に展開、。/data/....
# sudo tar xfvz data.tar.gz -C /
見やすい
UI使い方
https://tech-lab.sios.jp/archives/13294#i-2
https://christina04.hatenablog.com/entry/prometheus-node-exporter
Prometheus では監視データを取得することを “scrape” と呼んでいます。
設定してもスタックを再作成すると消える
docker-compose
- 実施したことがないので試してみる
- 勉強用資料では、yum等をつかってpromethusをセットアップしている。
- 以下の資料をもとにprometheusをdockerで動かしてみることにする。
http://sheepdogjam.cocolog-nifty.com/blog/2021/08/post-bea05a.html
http://sheepdogjam.cocolog-nifty.com/blog/2021/08/post-48c0e6.html
http://sheepdogjam.cocolog-nifty.com/blog/2021/08/post-e6a62e.html
http://sheepdogjam.cocolog-nifty.com/blog/2021/08/post-d18395.html
prometheus等のDockerイメージがある
prometheus社?が作っているので安心
-
prom/prometheus
https://hub.docker.com/search?q=prom%2Fprometheus&type=image
監視サーバ -
prom/node-exporter (snode)
https://hub.docker.com/search?q=prom%2Fnode-exporter&type=image
リソース監視 -
prom/blackbox (snode)
https://hub.docker.com/search?q=prom%2Fblackbox&type=image
http/https/TCPなどの死活監視を実現できます。基本的には監視サーバ(prometheusがインストールされているサーバ)にインストールして利用します。 -
grok_exporter (snode)
公式イメージはないっぽい
https://hub.docker.com/search?q=grok_exporte&type=image
https://hub.docker.com/r/dalongrong/grok-exporter
ログ監視 -
grafana/grafana
https://hub.docker.com/search?q=grafana%2Fgrafana&type=image
メトリックスを可視化するツール -
prom/alertmanager
https://hub.docker.com/search?q=prom%2Falertmanager&type=image
監視サーバと連携して、アラートをユーザに通知するツール -
httpテストサーバ
自作した
https://github.com/moritoki-study/test_httpserver_image
プロメテウスが正常なときのログ
prometheus | level=info ts=2022-01-31T11:13:59.238Z caller=main.go:796 msg="Server is ready to receive web requests."
疎通確認
# ec2
nc -vz localhost 9090
# local
nc -vz ec2-18-183-247-78.ap-northeast-1.compute.amazonaws.com 8000
コマンド類
# yaml作成
vi docker-compose.yml
# 起動
docker-compose up
# バックグラウンドで起動
docker-compose up -d
# 停止
docker-compose down
起動したコンテナに入る
# sudo docker exec -it コンテナ名 /bin/sh
sudo docker exec -it prometheus /bin/sh
sudo docker exec -it node-exporter /bin/sh
sudo docker exec -it blackbox_exporter /bin/sh
sudo docker exec -it grok_exporter /bin/sh
sudo docker exec -it grafana /bin/sh
sudo docker exec -it alertmanager /bin/sh
sudo docker exec -it test_httpserver /bin/sh
tail -f /var/log/httpd/test_httpserver.log
# sudo docker exec -it コンテナ名 ps -ef
sudo docker exec -it prometheus ps -ef
設定ファイルディレクトリ
# prometheus
sudo mkdir -p /data/docker/containers/prometheus/etc/prometheus/alerting_rules
sudo mkdir -p /data/docker/containers/prometheus/data
# node-exporter
いらない?
# blackbox_exporter
sudo mkdir -p /data/docker/containers/blackbox_exporter/data
# grok_exporter
sudo mkdir -p /data/docker/containers/grok_exporter/data
# grafana
sudo mkdir -p /data/docker/containers/grafana/data
# alertmanager
sudo mkdir -p /data/docker/containers/alertmanager/etc/alertmanager
設定ファイル
初期構築でgitからデータを取得して設置するようにした。
# promethus
sudo vim /data/docker/containers/prometheus/etc/prometheus/prometheus.yml
sudo vim /data/docker/containers/prometheus/etc/prometheus/node.yaml # 今回つくらない
sudo vim /data/docker/containers/prometheus/etc/prometheus/alerting_rules/alert_sample.yml
sudo vim /data/docker/containers/prometheus/etc/prometheus/alerting_rules/blackbox.yml
sudo vim /data/docker/containers/prometheus/etc/prometheus/alerting_rules/node_monitoring.yml
sudo vim /data/docker/containers/prometheus/etc/prometheus/alerting_rules/test_httpserver_log.yml
sudo vim /data/docker/containers/prometheus/etc/prometheus/alerting_rules/test_httpserver_request.yml
# alertmanager
sudo vim /data/docker/containers/alertmanager/etc/alertmanager/config.yml
# Blackbox Exporter
sudo vim /data/docker/containers/blackbox_exporter/config.yml
# grok_exporter
sudo vim /data/docker/containers/grok_exporter/config.yml
sudo vim /data/docker/containers/grok_exporter/examples.log
# grafana
sudo vim /data/docker/containers/grafana/grafana.env
test_httpserver.goメモ
[ec2-user@ip-172-31-13-240 ~]$ wget https://raw.githubusercontent.com/kichiram/golang/main/testgo/test_httpserver.go
2022-02-05 02:04:23 (57.4 MB/s) - `test_httpserver.go' へ保存完了 [1328/1328]
[ec2-user@ip-172-31-13-240 ~]$ ls
bk docker docker-compose.yml test_httpserver.go
[ec2-user@ip-172-31-13-240 ~]$ go get github.com/prometheus/client_golang/prometheus
[ec2-user@ip-172-31-13-240 ~]$ ls
bk docker docker-compose.yml go test_httpserver.go
[ec2-user@ip-172-31-13-240 ~]$ go build test_httpserver.go
[ec2-user@ip-172-31-13-240 ~]$ ls
bk docker docker-compose.yml go test_httpserver test_httpserver.go
[ec2-user@ip-172-31-13-240 ~]$ id
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal),992(docker)
[ec2-user@ip-172-31-13-240 ~]$ pwd
/home/ec2-user
[ec2-user@ip-172-31-13-240 ~]$ ls -l
合計 11860
drwxrwxr-x 3 ec2-user ec2-user 38 2月 2 11:19 bk
drwxrwxr-x 3 ec2-user ec2-user 98 2月 5 01:56 docker
-rw-rw-r-- 1 ec2-user ec2-user 2728 2月 2 11:09 docker-compose.yml
drwxrwxr-x 4 ec2-user ec2-user 28 2月 5 02:04 go
-rwxrwxr-x 1 ec2-user ec2-user 12132496 2月 5 02:05 test_httpserver # これでwebサーバ起動
-rw-rw-r-- 1 ec2-user ec2-user 1328 2月 5 02:04 test_httpserver.go
ここからdocker
EC2にdocker/docker-composeインストール
# docker
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl status docker
sudo systemctl enable docker
sudo usermod -a -G docker ec2-user
# docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version # これはsudo不要
# docker-composeの2系は導入手順が違うらしいが手順がみつからない
# https://docs.docker.com/compose/install/#install-compose-on-linux-systems
# 任意
alias d='docker'
alias dc='docker-compose'
Dockerfile作成
mkdir ~/docker
vim ~/docker/Dockerfile
vim ~/docker/index.html
index.html
hello
docker buildを試す
sudo docker image build -t moritoki/sample:latest .
sudo docker image build -t test_httpserver:latest .
イメージ確認
sudo docker image ls
起動中のコンテナに入る
docker exec -i -t CONTAINER_ID /bin/bash
docker exec -i -t CONTAINER_ID /bin/sh
イメージの取得とコンテナに入る
sudo docker run -it --name test_dock moritoki/sample:latest /bin/bash
sudo docker run -it --name test_grok dalongrong/grok-exporter:latest /bin/bash
sudo docker run -it --name test_httpserver test_httpserver:latest /bin/bash
コンテナ起動とバックグラウンド起動
なぜか10000超えると動かないように思える
### うごかん
sudo docker run -d --name test_dock -p 10080:80 moritoki/sample:latest # 10080がダメなのか?
### コンテナを動かす(入らない)
sudo docker run -d --name test_dock -p 8000:80 tmoritoki0227/sample:latest
sudo docker run -d --name test_dock -p 80:80 tmoritoki0227/sample:latest
sudo docker run -d --name test_httpserver -p 8080:8080 -p 8081:8081 test_httpserver:latest
疎通確認
# ec2
nc -vz localhost 8080
# local(Mac)
nc -vz ec2-18-183-171-149.ap-northeast-1.compute.amazonaws.com 8080
nc -vz ec2-13-230-253-219.ap-northeast-1.compute.amazonaws.com 8080
ブラウザから
http://ec2-18-183-171-149.ap-northeast-1.compute.amazonaws.com:8080/hello
http://ec2-18-183-171-149.ap-northeast-1.compute.amazonaws.com:8080/world
http://ec2-18-183-171-149.ap-northeast-1.compute.amazonaws.com:8081/metrics
docker hub upload
docker login
Username: 入力汁
Password: 入力汁
sudo docker image build -t test_httpserver:latest .
docker image ls
docker tag test_httpserver tmoritoki0227/test_httpserver:latest
docker image ls
docker push tmoritoki0227/test_httpserver:latest
tmoritoki0227 はdockerhubのリポジトリ名に合わせないとだめ
https://hub.docker.com/repository/docker/tmoritoki0227/test_httpserver
コンテナ起動確認
sudo docker ps
sudo docker ps -a # 停止中のコンテナも表示
コンテナに入る
sudo docker attach CONTAINER ID
コンテナ停止
sudo docker container stop
コンテナ削除
sudo docker rm [コンテナID]
イメージ削除
sudo docker images で
sudo docker rmi イメージID
Dockerコマンドをsudoなしで実行する方法
非推奨らしい
## dockerグループがなければ作る
sudo groupadd docker
## 現行ユーザをdockerグループに所属させる
sudo gpasswd -a $USER docker
## dockerデーモンを再起動する (CentOS7の場合)
sudo systemctl restart docker
## exitして再ログインすると反映される。
exit
参考Doc