[インフラ勉強会]無線LANことはじめ を聞いた

無線LANことはじめを聞いた。その際のメモ。

Wi-Fiについて

・Wi-Fi:親しみやすくするため認知度をあげるための名称。登録商標
・今後は専用ロゴを使って、どのWi-Fi規格で通信するかを視覚化していく流れ
https://www.wi-fi.org/news-events/newsroom/wi-fi-alliance-introduces-wi-fi-6
・CSMA/CD:昔は1つの同軸ケーブルでホストがつながっており、その際のコリジョンを防ぐための技術
 (コリジョンは電圧が重なり、範囲外になることで検知する)
・無線はCSMA/CAを利用しており、有線と無線の大きな違い

W52,53,56

・W52/W53は屋外では利用できない
・W53/W56の場合レーダー波を検知すると強制的にチャネルが変更される
 ・電波送出時に1分間はレーダ受信有無を確認するため使用ができない(救急車が車道優先されるイメージ)
 ・気象レーダーや空港の近くや海沿いで発生しやすい

事前サーベイ

・ネットワークを事前に調査してヒートマップを作る
http://www.ikeriri.ne.jp/develop/sitesurvey/index.html
・サーベイの際の閾値について、一般的な無線LANは60-75dbあればいいらしい

PoEがLANケーブルのどこ芯を利用しているか

・1000BASE-Tでは8芯すべてを信号線として用いている。
 このため、ギガビットハブにPoE対応機器をつなぐとリンクアップしなかったり速度が遅くなってしまう場合がある。
 そのような場合は100BASE-TXのハブにつなぎかえるか、1,2,3,6ピンのみ結線されている4芯のみのケーブルを用いるとよい。

[インフラ勉強会]AWS Systems Managerのススメ を聞いた

AWS Systems Managerのススメを聞いたので、メモする。

前準備

・EC2インスタンスへのIAMロール(AmazonEC2RoleforSSM)が必要
・SSM Agentが必要
 ・最新のAMIにはインストール済、なければ手動で
 ・サポート対象:Ubuntuは12.04LTSから
・インターネットのアウトバウンド通信
 ・もしくはSSM・EC2・EC2Message・S3へのエンドポイント通信が可能なこと
・SSM自体の金額は無料

できること

・パラメーターを保存する
 ・環境ごとに異なるデータを保存可能
・RunCommand
 ・コマンドを実行する
・Autometion
 ・起動→パッチ適用→AMI作成→停止などが可能
・ステートマネージャー
 ・スケジュールでRunCommandを実行する
・Maintenance Windows
 ・Lambdaなどを実行することができる(理解しきれなかった)
・セッションマネージャー
 ・ブラウザでシェルを実行することが可能
・インベントリ
 ・定期的にサーバの情報を取得する

ベストプラクティスなど

・踏み台が必要だったサーバに直接対応できる
・スクリプト実行はSSMを利用したほうが、スクリプトの管理が容易になる
・IAMを利用して利用可能な時間に制限を設けることができる
・コマンド実行結果(lsなど)が遅かったりすることがあるらしい

クラウドは次の時代へ。これからのマルチクラウドを4人のスピーカーが語り尽くす に参加した

クラウドは次の時代へ。これからのマルチクラウドを4人のスピーカーが語り尽くすへ参加した。その際のメモ。

ビックデータ分析基盤の成長の軌跡 – 白子 佳孝氏

・クライアント(リクルートと契約した企業)とユーザを結びつけるマッチングプラットフォームを開発している

・Mirror-Redshift
 ・金曜日の夜にスナップショットをとり、そこからクラスターを作りデータ鮮度を求めない分析をするようにしていた
・2017年にBigQueryの導入によって、大規模に環境が変わった
 ・データやユーザが増えても性能劣化が起きない、キャパブラ不要なDWHに乗り換える流れに

・今後やりたいこと

クラウドに関わる営業の本音、クラウドサービスの使い分け – 蔦野 岳人氏

オラクルとOracle Cloudについて

・オラクルは今大きな変革の中にある
 売り物がON-PREMISEからCLOUDへ
・Oracle Cloudはオンプレミスからクラウドへの完全互換性を謳っている
・ボトルネックを排除したアーキテクチャが売り
 元Amazonの人間とGoogleの人間が作っている
・IaaSでは低コストに力を入れている

今後営業に必要なマインドセット

・薄利多売のビジネスであることを理解すること
・クラウドは小さく入り込んで、大きく育てる
・営業先は情シスだけでなく、他部署へのアプローチも可能

マルチクラウドについて

・メリットはテクノロジーのいいとこどり、デメリットは運用の複雑化

シャドーITへの対策として -CASB-

・防いだ事例
 ・Dropboxの私物利用
 ・転職にあたり顧客データの持ち出し
 ・インスタンスを起動して、コインマイニング

少し違った目線で考える、マルチクラウドのメリット、デメリット – 山田 雄氏

・ビールを奢れば、データ基盤の相談に乗ってくれるらしい

81

・81% – クラウドを使っている企業がマルチクラウドである割合
・ActiveDirectoryやG Suiteなどを利用しているとマルチクラウドとしており
 なぜかマルチプライベートも入っているため割合が高め

各クラウドベンダーの姿勢

・AWSは否定派かも。CEOのインタビューから、複数のシステムの学習コストがかかる
 ボリュームディスカウントを考えると1つのほうがよい
・GCPはマルチクラウド、ハイブリッドクラウドを推奨している
 GCNextの3大メッセージに、ハイブリッド・マルチクラウド・オープン戦略がでていた

境界での問題にマルチクラウドは弱い

・S3からGoogleへデータを送信したときに、gsutilを使っていると中間ファイルが残るなど、スムーズに動作しない部分があった
 AWSへ問い合わせたところGoogleのツールなので、、Googleに問い合わせたところS3のため、、結局コードを追うことに

技術以外のメリットと、ちょっとしたデメリット

・AWSやGCPなど、人脈が広がり、横連携が強くなる
・サンフランシスコ(Google Cloud Next)、ラスベガス(re:Invent)にいける!
・技術的戦略がなく楽しい!BigQueryもRedshiftも利用できる
・両方の新サービスを追えない(勉強コストの増大)
⇒絞って学習している。現状GCPのビックデータ周りは把握しているが、AWSは理解できていない部分がある
・マルチクラウドという観点でのメンバ採用が難しい

マルチ クラウドだけでいいのか? AI/IoT時代のクラウドのあり方 – 山﨑 亘氏

・ウフル:スワヒリ語で自由を表す

IoTのキーワード – 分散と更新

・例えば来場者の画像を取って、クラウドに送るような場合、次のようなデメリットが発生する
 ・レスポンスが悪い
 ・通信コストがかかる
 ・セキュリティが心配
・上記場合は、データをエッジ側で処理すれば問題は解決する
・しかし運用していくと、次のような要望も出てくる
 ・AIモデルの更新が必要
 ・センサーデータ取得の間隔や位置も更新が必要
・これらの解決策として、enebularを開発している

ssmjp 2018/08 本当にあった怖い話 に参加した

ssmjp 2018/08 本当にあった怖い話に参加した。その時のメモ。

ssmjp:インフラ、運用がメインの何でもありの勉強会

Naomiさん

・ユーザ企業にて情シスをしており、以前の会社の話
・ファイルサーバやADなど、「Environment 45℃」で全サーバが停止
・推奨される最高周囲温度35℃
・サーバ増設による冷却装置付きのサーバラックのキャパオーバーが原因かも?
 2011年は輪番停電で扇風機がなかったが、ダイソンだけが在庫があった
・エアコンを数百万かけて設置することにした
 欄間を閉じると消防法のためスプリンクラーと警報機が必要になり高額となった
・しかしエアコンの納期は10月と夏を過ぎていたため、以下対策で乗り越えた 
 ・ビル管へ空調24時間稼働依頼
 ・空調温度をさげる
 ・温度状況を計測して、サーキュレーターで対策
・外部監査はサーバラックに鍵をかけるという決まりがあったが、セキュリティリスクを許容して、事業継続リスクを優先で乗り切った

データセンタ運用であった本当に怖い話 @tcshさん

・予算のない部署のサーバラック
 ・42Uフルで抜けない、差せない
 ・ただし背面は寝るには最高の気温
 ・熟睡していたら、あのラックの背面から足でているけど起こさないでね
  ・知らないうちに自分が設備扱い
・データセンターの電源容量枯渇
 ・配電盤が溶融し、5秒後か5時間後にショートする状態に
 ・シャットダウン大会
・電話局がリアルダンジョンで死ぬかと思った

皆一度は経験する、あり得ない話 流しのSEさん

・独立した上司に遊びにこないかと誘われ、客先に連れて行かれ、メイン担当者として紹介されたお話

今年最凶の怖いはなし 片山昌樹氏

・ナビプラスはセキュリティ全般をサービスにしている(インシデントレスポンス、フォレンジック、脆弱性対応)
・Huawai怖い
 ・利用規約に口座番号や友人情報、リアルタイム位置情報やFacebookアカウントやTwitterアカウント情報などを取得を示唆する文章がある
 ・米国政府から名指しで、個人情報を抜くメーカーと言われ、流通禁止の法律が施行されている
  しかし、日本では大々的に販売されており、モバイルWi-Fiの90%はHuawai(わからないようにしている)
・試しにMateBook Eシリーズを調べてみたところ
 ・Webカメラが写真を撮ろうとしている
 ・マイクはミュートでも音を拾う
 ・query.hicloud.comというHuawaiデータ取得用サイトなどに接続している
・Xiaomiを現在調査中
 ・データのPOSTが多い
 ・MDMサーバに定期的に通信している

 

エッセンシャル思考-最少の時間で成果を最大にする を読んだ

この資料を見て、エッセンシャル思考-最少の時間で成果を最大にするを読んだ。
印象に残ったことをメモしておく。

Part1 エッセンシャル思考とは何か

・非エッセンシャル思考からエッセンシャル思考へ
 ・どの方向にも少しづつしか進めない ⇒ 一直線に遠くに進む
・エッセンシャル思考の人は、自分の時間とエネルギーを効果的に配分し、重要な仕事で最大の成果をあげることができる
・以下のような成功のパラドクスに陥らないためにも、エッセンシャル思考が必要
 目標を定め、成功へ一直線 ⇒ 成功し、頼れる人に。その結果多様な仕事が振られる
 ⇒ やることが増えすぎ、時間とエネルギーが拡散され、すべてが中途半端に ⇒ 本質を見失う
・エッセンシャル思考の基礎となる考え方は以下の3つ
 ・選択 – 自分で時間とエネルギーの使いみちを決める
もしたったひとつのことしかできない場合に何をするのか?という観点で選択する
選択しないことは他人に判断をゆだねるということであり、何一つ選べないとすべて引き受けることになる
悪くない程度の選択肢は、すべて拒否したほうが良い
 ・ノイズ – 世の中はノイズが大半であることを理解し、本質を見極める
重要な少数は、瑣末な多数に勝る。重要な少数を選択すること。ノイズの中のシグナルに気が付けるように意識すること
 ・トレードオフ – 何かを得ることは、何かを捨てることを理解する
トレードオフを理解していないとすべてできると勘違いし、すべてが中途半端になる
そのためには優先順位を明確にしておくこと

Part2 見極める技術

・エッセンシャル思考の人は、何かに手を出す前に幅広い選択肢を慎重に検討して、一番重要なものだけを実行する
・深い孤独がなければ、まともな作品は作れない by ピカソ
 ・ニュートンも万有引力の論文執筆にあたり、2年間ほとんどひとりで引きこもっていた。そのことだけをひたすら考えていた
 ・LinkendInのCEOも毎日合計2時間の空白時間をスケジュールに組み込んでいる
 ・ビルゲイツも1週間の考える週を定期的にとっている
・睡眠は生産性の敵ではなく、パフォーマンスを最大に高めてくれるもの
 1週間の4,5時間睡眠によって「血中アルコール濃度0.1%に相当する機能低下」が起こる
 優先順位付けの能力をキープするためにも睡眠は欠かせない

Part3 捨てる技術

・最終的な目標を明確にすること。具体的で魅力的で測定可能な本質目標を定める
 例えば「2012年までにイギリスのあらゆる人がインターネットを使えるようにする」など
 考えるときに必要なのは、たったひとつのことしかできないなら何をするか
・周囲の期待とプレッシャーに負けて、ノーと言えば数分間嫌な気持ちになる。イエスと言えば長期間後悔する
・ゆっくりイエスを言い、もっとすばやくノーを言うことを意識する
・サンクコストバイアスを切り捨てるためには、「もしまだ1円も払っていないとしたらこの企画に投資するか」という観点で考える
・逆プロトタイプしてみる。試しに辞めてみて、不都合があるか確かめる
・不要な細部を切り捨てることで、重要なものを生かす余地が生まれる
・仕事とプライベートの境界線を引くこと。自分で線を引かなければ、誰かに引かれ、一番守りたいものを守れなくなる
 また境界線があることで最大のパフォーマンスを出すことができる

Part4 しくみ化の技術

・努力と根性ではなく、自動的にうまくいく仕組みを整えること
・日々のささやかな進歩がやる気を引き出し、パフォーマンスを向上させる
・悪い習慣を変えるためには、行動を見直すよりもそのトリガーを見直すべし
・未来のことを考えながらではなく、今に集中すること

S3にあるCloud Trailログを確認するため、Sumo Logicを利用してみた

S3にあるCloud Trailログを閲覧したく、CloudTrailのセキュリティ監視をちょー簡単にやってみた【Sumo Logic】 をやってみた。
詳細は上記URLに記載されているため、気になったことだけ記載する。

SumoLogicについて

・SaaS型のログ収集分析サービス
・無料版は1日500MBまでのアップロードが可能
 (データ保持期間は7日間、トータルで3.5GBまでのデータが保持可能、という情報も見つけたが公式ソースを見つけられなかった)
・[Sumo Logic Free]を選択した。他のプランは30日間無料でプロやエンタープライズの機能を利用可能(お金を払わなければそのまま無料版の機能を利用できそう)

構築内容

・SumoLogicのいうとおりにすれば設定が完了する
・CloudTrailのS3に権限を与えたIAMユーザを作成し、SumoLogicにアクセスキーを登録する

SumoLogicの設定

・過去のログがみたかったため、[Collection should begin]を[All Time]に変更した

・[App Catalog]にCloudTrailの閲覧用テンプレートが用意されているため、利用した

参考

[OpsJAWS: やってみようシリーズ] Sumologicの始め方

JULY TECH FESTA 2018 に参加した(2)

運用におけるシェルの役割とそのあり方を考える – 山下和彦 氏

資料:運用におけるシェルの役割とそのあり方を考える

GMOペポバのサービス – ロリポップレンタルサーバ

・秒間2万8千アクセス/秒(DoSを受けた際はこれ以上)
・ビーク8Gbps

Shellに対するいくつかの考察

・Shell = Shell Script (bashで記載されたものを表す)
・RedMonk社(StackOverflow・GitHubでの人気度)によると、言語としては12位くらい

Shellの特徴

・メリット
 ・パイプ、オプションを利用した強力な組み合わせ
 ・ほとんどの場合は導入コストが低い(インストールの手間なし、依存性なし)
・デメリット
 ・テスト実装、変化に強い実装、再利用性の高い実装は苦手

ライフサイクル観点からの考察

・パイプ、オプションが強力すぎて、熟練者でないと見にくいことがある
⇒開発効率化には最適であるが、複数人での運用保守には向いていない(運用の際に負債として残る可能性あり)
・携わるメンバがShellに詳しければ問題ないが、Shellに学習コストをかけるかというと、
 WEBエンジニアは覚えることが多くベターとは言えない

・例外として、USP研究所のようにShellに特化したユニケージ開発手法などが定着している場合もある
 ・RDBを利用せず、テキストファイルによってデータを管理

言語特性観点からの考察

・長期的な運用には不向き
・変化が少ない局面については有効
 ・バックアップスクリプト
 ・監視系スクリプト

なぜ人類はShellをかかなくなったのか?

・Infrastructure as CodeによってLLやGoを書き始めた
・自動化の高度化
 LLやGolangで簡単にプロセスができ、人が介在せずとも処理ができるようになったため
 処理を集めてjob.shとして実行することなどを、自動化と呼ぶ時代ではなくなった

それでもShellが好きな人も

・人は得意な言語で書くため、評価にも反映させる

なぜGolang?

・システムプログラミングに必要なAPIが一通りそろっている
・可搬性が高く、サーバに配置しやすい

まとめ

・長期運用するなら、Shellを頑張るよりも、他の言語で対応したほうが幸せになる

知らなかったこと

・shellcheckというshellの記法をチェックするようなツールもある

サーバーやNW機器の構成・設定管理に困ってませんか?簡単に最新状況が把握できるインベントリ収集ツールの紹介 – 船井 覚 氏

資料:サーバーやNW機器の構成・設定管理に困ってませんか?簡単に最新状況が把握できるインベントリ収集ツールの紹介

Open-Audit

・コミュニティ版と商用版がある
・20ノードまでは管理可能
・エージェントレス型
・SNMP,WMI,SSHでアクセスして、情報を取得する

できないこと

・収集のみ、設定変更はできない
・時系列での履歴管理
・インデント管理、資産管理
⇒OpenPIEを利用すればできるように

OCS Inventory NG

・エージェント型
・コミュニティ版のみ

JULY TECH FESTA 2018 に参加した(1)

ノウハウ丸ごと共有します!ハートビーツの24/365体制を支える人材育成 – 倉持亘 氏

感想

・主体性(自分で考える)を大切にしている
・手を動かさないと身につかない
・障害時に大外ししないことを意識する
に共感した。

24/365を支える体制

・3交代制であり、3チームでローテーションしている
・1チーム5-6人で、役割がある(主担当と副担当、研修生)

目指す人物像

・なぜそうなるかを理解できる。自分で理解して、答えにたどり着ける人材(原則原理)
・技術はツールであり、このツールを利用して顧客へ価値を与えられる
・迅速に復旧までたどり着ける

人材育成におけるテーマ

・主体性
 自分で考えさせる。座学よりも、手を動かして理解してもらう(でなければ身につかない)

研修内容

研修生

・未経験者も雇うため、サーバ構築から障害対応までの基礎を教育する

サーバ構築研修

・目的:LAMP環境の仕組みを理解する
・タワーPCを渡して、あとはよろしく!チェックポイントは提示するが、構築の手順は提示しない
・やっていいこと、悪いことを学ぶ
・たくさん失敗させて、たくさん学んでもらう
・質問に対して、答えを伝えるのではなく、なるべく本人が答えにたどり着くように誘導する
・やったことはBacklogにエビデンスとして残してもらう
 ・後で担当者が方向性があっているか確認する
 ・ググってコピペしたものではないか確認するようにしている(自分の言葉でかけているか)

ロールプレイング研修

・目的:以下を身につけてもらう
 ・技術だけでは顧客に価値を提供できない
 ・技術がないと仕事はできない、
・顧客とHBのエンジニアという設定でロールプレイング
 顧客からアバウトな相談事を受けて、必要な情報を聞き取り、顧客の解決策を検討し、プレゼンしてもらう
・チェックポイント
 ・Quick & Dirty (完ぺきではないが素早く)を実践できているか
 ・顧客を理解できているか(サービスの理解、ビジネスの理解)
 ・技術的に正しいことを言っており、もし不明瞭なことがあった場合に持ち帰っているか

障害対応研修&実践

・障害対応フローを覚える
・調査コマンドを課題ベースで覚えてもらう
 使い方の詳細は説明しない。後ほど理解できているか確認する
・座学で学んだことを実際の障害で対応してもらう

フィードバック

・現場ではうまくいかないことも多いため、フィードバックを実施している
 ・その場でのフィードバック
 ・Backlogを利用したフィードバック
  目的:振り返る機会を作る、指導者と研修生の認識をなくす
  日報のようなものに、わからないことなどを記載してもらい、後日認識合わせをする
 ・KPTを使った振り返り
  ・P(自分に足りないところ):指導者の考えるPと研修生の考えるPのギャップを埋める
  ・T(Pをどうやって身につけるか):なるべく自分で考えさせる
  ・隔週実施

副担当

主担当面談

・主担当とは:シフト内の障害対応の責任者、すべての障害に目を通し、副担当に仕事を割り振る役割
・目的:主担当に必要なスキルを身につける
 ・主担当のロールプレイング
  ・災害時のロールプレイング
  ・複数障害が発生した場合のロールプレイング
   ・面談してフローを作成していくイメージ
   ・チェックポイントとしては、優先順位をつけて、正しく仕事を割り振れるか、
   ・論理的に切り分けて大外しせずに復旧までたどり着けるか

育成の課題

・指導者への指導
 人によって教え方が上手、下手がある
・フィードバックする時間の確保
 日頃の業務の中でフィードバックする時間がないときがある

質疑応答

・障害でパニックになる人に対してどうしているか?
⇒自分に自信がないことが原因だと思うため、小さい成功体験を積み重ねるよう教育している

・自分はできている思っている主担当に対してどのようにアプローチしているか?
⇒IT業界は流れが早いため、別途研修を設けている

「使ってみた」では終わらせない! AWS GuardDutyを使ったサイバー攻撃の検出・分析45分スタートアップ講座 – 鈴木研吾 氏

資料:GuardDutyを使ったサイバー攻撃の検出と分析.pdf

感想 – というよりも知らなかったこと

・ArcSight、SplunkといったSIEMツールがある
・サイバーキルチェーンという標的型攻撃における攻撃手順を標準化したものがある
 これをもとに多段防御を検討することができる

GuardDuty 素晴らしいところ

・GuardDutyは検知だけのため、システム的な影響なし
 内部ではログをコピーして分析するため、遅延が発生することはない
 中の人に聞いた時も、ただただONにするだけでよいとのこと
・金銭面への影響についても、1ヵ月でどれくらいかかるかチェック可能

なぜGuardDuty

・AWSでは想定すべき脅威の種類が増えて、今までの検知ロジックだけでは不足している
 今までの検知が古いというわけではない

オンプレミス時代にはなかった想定すべき脅威の種類

・クラウドサービスとしてのアカウント
・リソースと権限
・動的にスケールするリソース
・Pay as you Goなリソース

GuardDuty in Folio

いくらかかっている?

・11アカウント全てON、$6.38/day
・SOCサービスは月間20万円ほど

誤検知ある?

・とても少ない
・もし誤検知があれば、その条件のアラートを無効にする機能が最近リリースされた

ユースケース?

・GuardDutyは集約する機能しかもたないため、CloudwatchからLambdaに流している
・検知したら、自動的にスナップショットを取得し、別VPCに展開し、フォレンジックするような仕組みを用意することも可能

Docker入門

今更ですが、、Dockerの基本的なことをまとめる。

Dockerとは

Dockerが必要となった背景

・アプリケーションは作ったら終わりではなく、ユーザの要望を取り込み価値のあるアプリケーションに改善していく必要がある
・ユーザ要望が多様化し、変化のスピードも早くなっているため、迅速かつ柔軟なIT基盤が求められるようになってきた
・継続的インテグレーション時の仮想マシンでの問題を、Dockerは解決できる

特徴

・アプリケーションの実行環境をコード管理できる
 ・アプリケーション開発者も環境をすぐに用意することができる
  (サーバ管理者にサーバ構築してもらう必要がなくなる)
 ・本番環境に追加した設定がテスト環境には追加されていない、を回避しやすくなる
・ベースOSのカーネルや機能を利用するため、仮想マシンと比較してオーバーヘッドが少なくなり、リソース消費量(メモリやディスク容量)が少なくなる
 ・作業が効率化される(構築時間がとても早くなる)
 ・仮想マシンとは違って、ハードウェアやカーネルに影響するアプリケーションは利用できない場合がある

操作方法

Docker for Windows で操作する。
まずは、windows10へのdockerインストールにしたがって、Dockerをインストールした。

ubuntuにnginxをインストールして、ブラウザで閲覧できるようにする

### Dockerレジストリ(リポジトリ)から、コンテナイメージを検索する ###
### 公式で、ubuntuを含むコンテナイメージを検索している ###
> docker search --no-trunc --filter is-official=true ubuntu
NAME                 DESCRIPTION                                                                                            STARS               OFFICIAL            AUTOMATED
ubuntu               Ubuntu is a Debian-based Linux operating system based on free software.                                7991                [OK]
ubuntu-upstart       Upstart is an event-based replacement for the /sbin/init daemon which starts processes at boot         87                  [OK]
neurodebian          NeuroDebian provides neuroscience research software for Debian, Ubuntu, and other derivatives.         50                  [OK]
ubuntu-debootstrap   debootstrap --variant=minbase --components=main,universe --include=inetutils-ping,iproute2 <suite> /   39                  [OK]

### コンテナイメージをダウンロードする ###
### ubuntuの最新バージョンをダウンロードする ###
### もしDockerホストのubuntuのバージョンが古くても、Linuxカーネルは後方互換性があるため基本的には問題ない ###
> docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest

### ダウンロードしたコンテナイメージを表示する ###
> docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        5 weeks ago         81.2MB

### Dockerコンテナを起動して、nginxをインストールする ###
### 最初にapt-get updateしないとエラーとなる ###

### docker run オプション ###
### -h hostname ホスト名を指定することが可能※デフォルトではコンテナIDと同じ名前となる ###
### --cpuset-cpus 0-3 --memory 4096m などで利用するCPUやメモリ数を指定することが可能 ###
> docker run -it --name ubuntu-container ubuntu
root@b6ec500d4fd7:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS"

root@b6ec500d4fd7:/# apt-get install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package nginx

root@b6ec500d4fd7:/# apt-get update && apt-get upgrade
...

root@b6ec500d4fd7:/# apt-get install nginx
...
root@b6ec500d4fd7:/# /etc/init.d/nginx status
 * nginx is not running

root@b6ec500d4fd7:/# /etc/init.d/nginx start
 * Starting nginx nginx                                                                                                                                                      [ OK ]

root@b6ec500d4fd7:/# ps afx
   PID TTY      STAT   TIME COMMAND
     1 pts/0    Ss     0:00 /bin/bash
   920 ?        Ss     0:00 nginx: master process /usr/sbin/nginx
   921 ?        S      0:00  \_ nginx: worker process
   922 ?        S      0:00  \_ nginx: worker process
   924 pts/0    R+     0:00 ps afx

root@b6ec500d4fd7:/# exit
exit

### コンテナイメージを作成する ###
> docker commit ubuntu-container akatuki/ubuntu-nginx
sha256:507f4bf357e5a0bcb5df74d50e51fea31778fcc6f0f17938baf977aeb6db38d0

> docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
akatuki/ubuntu-nginx   latest              507f4bf357e5        5 seconds ago       196MB
ubuntu                 latest              113a43faa138        5 weeks ago         81.2MB

### 80番ポートを利用してコンテナを起動する ###
> docker run -itd -p 80:80 --name ubuntu-nginx-container akatuki/ubuntu-nginx

> docker ps
CONTAINER ID        IMAGE                  COMMAND             CREATED             STATUS              PORTS                NAMES
76c54b34974b        akatuki/ubuntu-nginx   "/bin/bash"         29 seconds ago      Up 27 seconds       0.0.0.0:80->80/tcp   ubuntu-nginx-container

> docker attach ubuntu-nginx-container

root@76c54b34974b:/# /etc/init.d/nginx start
 * Starting nginx nginx

### [Ctl]+[P]+[Q]でコンテナを終了せずに、PowerShellに戻ることが可能 ###
### exitするとPID1の /bin/bash が終了する、つまりコンテナが終了する ###
root@76c54b34974b:/# read escape sequence

localhostにアクセスすると、nginxのページが表示される。

Dockerfileを利用した場合

# Dockerfile

FROM ubuntu
MAINTAINER akatuki

RUN apt-get update && apt-get upgrade && apt-get install nginx
CMD service nginx start && bash
> docker build -t akatuki/ubuntu-nginx-2 .\docker_ubuntu_nginx\
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM ubuntu
 ---> 113a43faa138
Step 2/4 : MAINTAINER akatuki
 ---> Running in 16fcf202048b
Removing intermediate container 16fcf202048b
 ---> 216a90a83370
Step 3/4 : RUN apt-get update && apt-get -y upgrade && apt-get install -y nginx
 ---> Running in 33c5c837b636
...
Removing intermediate container 33c5c837b636
 ---> 3e4fc279fc09
Step 4/4 : CMD service nginx start && bash
 ---> Running in f71c691629b7
Removing intermediate container f71c691629b7
 ---> 1bae7466b72c
Successfully built 1bae7466b72c
Successfully tagged akatuki/ubuntu-nginx-2:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

> docker images
REPOSITORY               TAG                 IMAGE ID            CREATED              SIZE
akatuki/ubuntu-nginx-2   latest              1bae7466b72c        About a minute ago   194MB

> docker run -itd -p 80:80 --name ubuntu-nginx-container-2 akatuki/ubuntu-nginx-2

その他便利なコマンド

### dockerのバージョンを確認する ###
> docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:12:48 2018
 OS/Arch:      windows/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: true

### docker実行環境を確認する ###
> docker info
Containers: 2
 Running: 1
 Paused: 0
 Stopped: 1
Images: 2
Server Version: 18.03.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.87-linuxkit-aufs
Operating System: Docker for Windows
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.934GiB
Name: linuxkit-00155d011c1d
ID: IHML:MLXN:VWM4:BN3Q:QYWT:QJC4:QVAO:UD5Q:ZS3M:DQC7:2NVH:EP34
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 27
 Goroutines: 48
 System Time: 2018-07-16T14:06:28.8408325Z
 EventsListeners: 1
Registry: https://index.docker.io/v1/
Labels:
Experimental: true
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

### コンテナの詳細情報を取得する ###
> docker inspect ubuntu-nginx-container
[
    {
        "Id": "76c54b34974ba7c0cba4aade1875f280517e27588796b96831290386fc12e813",
        "Created": "2018-07-16T13:58:33.5983827Z",
        "Path": "/bin/bash",
        "Args": [],
...

### コンテナ内で変更があったディレクトリとファイルを表示する ###
> docker diff ubuntu-nginx-container
C /root/.bash_history
C /run/nginx.pid
C /var/log/nginx/access.log
C /var/log/nginx/error.log

### コンテナのプロセスを確認する ###
> docker top ubuntu-nginx-container
PID                 USER                TIME                COMMAND
14521               root                0:00                /bin/bash
14671               root                0:00                nginx: master process /usr/sbin/nginx
14672               xfs                 0:00                nginx: worker process
14673               xfs                 0:00                nginx: worker process

### コンテナ内部で実行された標準出力、標準エラー出力への内容を確認する ###
> docker logs ubuntu-nginx-container
root@76c54b34974b:/# /etc/init.d/nginx start
 * Starting nginx nginx

### コンテナイメージの中間イメージの履歴を表示する ###
> docker history akatuki/ubuntu-nginx
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
507f4bf357e5        30 minutes ago      /bin/bash                                       115MB
113a43faa138        5 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           5 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B
<missing>           5 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   2.76kB
<missing>           5 weeks ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
<missing>           5 weeks ago         /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   745B
<missing>           5 weeks ago         /bin/sh -c #(nop) ADD file:28c0771e44ff530db…   81.1MB

### コンテナを出力する ###
> docker export ubuntu-nginx-container > ubuntu-nginx-container.img

補足1 – コンテナ管理について

複数アプリケーション利用時のコンテナ数について

・アプリケーションごとにコンテナを分割がベストプラクティス
 ・コンテナを作り直す際に、設定変更内容が明確になるため

コンテナのスナップショット

・コンテナ起動時にスナップショットを作成する
 停止時はスナップショットを保持する
 削除時にスナップショットを削除する

補足2 – すべてのコンテナイメージを削除する

> docker rmi -f  $(docker images -aq)

参考

今、なぜ「Docker」なのか
Docker実践入門――Linuxコンテナ技術の基礎から応用まで
docker コマンド チートシート
docker初心者の方が知っておいた方がよい基礎知識
docker-compose upするとコンテナが一瞬でexited with code 1する話

Visual Studio Code のデフォルト設定変更

概要

以下を参考に、Visual Studio Code の設定を変更した。
VSCodeで文字コードを自動判別する
VS Codeのミニマップが邪魔なので消す
Visual Studio Codeでhtmlのプレビューを表示する

文字コードの自動判別をONにする

[ファイル] > [基本設定] > [設定] より、以下を追加した。

"files.autoGuessEncoding": true

左側の設定を[編集]することで、設定を追加することも可能。

ミニマップをOFFにする

右側にあるミニマップなるものが不要なため無効に。

"editor.minimap.enabled": false

HTMLファイルのライブプレビューをONにする

[Live HTML Previewer]をインストールする。

[Ctrl]+[q] → [s]にて、横にプレビュー画面が表示される。