【行ってきた】(20190716)[Osaka]nakanoshima.dev #5
こんにちは。
連休も終わりますねー。(自分は7/16まで休みでした)
連休の〆に密林でお勉強しにいってきました。
目次
これに参加してきました
どうしてこれに参加したの?
- コンテナに前から興味があり、どういうものなのか理解したかった。
- AWSのサービスを触ってみたかった。
プログラム内容
「今日からはじめるコンテナ入門」
今日のゴール
- コンテナを自分で「設計」できるようになる
- Amazon EKS/ECS 導入前の知識
アジェンダ
- イントロダクション
- 利用準備
- コンテナとは何か
- Dockerを使ってみる
- コンテナアプリの開発
- 設計ワークショップ
- コンテナの課題
当日やったこと・メモ
イントロダクション
コンテナとは何か(座学)
ソフトウェアをOS内の独立した環境で実行する技術のこと
- 代表的な実装:Docker
- ソフトの依存関係をパッケージング
- 既存の環境を気にすることなく任意のバージョンで構成が作れる
- すべての環境で同じコンテナが動作する
仮想化(VMWare)と何が違うの?
仮想化 :ハイパーバイザ上で動く。オーバヘッドが大きい。
コンテナ:OSのカーネル上で動く。軽快に動く。
コンテナレジストリ
- コンテナイメージを補完、取り出せる場所
- DockerHub
- Amazon Elastic Container Registory(ECR)
使いどころ
- マイクロサービスのアプリケーション
- ジョブ実行
- CI/CD
- 機械学習
- アプリケーションの提供
Dockerを使ってみる
- Dockerコマンドの体系変更(1.13~)
- ネットワークは「docker0」に接続される
- 「docker0」は名前解決ができない。(変動するから)
- 解決するにはユーザ定義のネットワークを利用する。
Dockerの性質
- 変更は永続化されない。
- ファイルを保存した後再起動すると、保存したファイルがなくなっている。
- データファイルは個別のストレージを指定してそこで読み書きすること
- イメージとコンテナは残り続ける
- どんどん不要なimageファイルが残るので、ディスクフルにならないように適宜消すこと
- ホストが再起動したときにコンテナが起動しない
- コンテナをサーバ用途で使いたいなら、「docker update --restart always」を付けると良い。
コンテナアプリの開発
- コンテナ設計は「1コンテナ、1プロセス」が原則。
- Gracefulシャットダウン(安全にシャットダウンできる仕組みを)
- セキュリティ
- ベースイメージ
- 「offial」を選ぶ
- 「automated」ビルドを選ぶ
- 出来上がったイメージ
- イメージスキャンで脆弱性を検知する
- ベースイメージ
- 「AlpineLinux」・・・コンテナ用のLinux。非常に軽い。(4MB!)
- 「マルチステージビルド」すると、軽量なコンテナを作成できる
- 「docker-compose.yaml」で複数コンテナの管理を1ファイルでできる
- 「gunicorn」・・・python用のアプリケーションサーバ
- データの永続化にはAmazon ElasticCache使うと便利
設計ワークショップ
時間の関係で省略。
コンテナの課題
- コンテナを動かす親玉ホストが落ちると道連れでコンテナ全滅する。
- ホスト間をまたいだ通信をどうするか
- 負荷に応じたコンテナのスケール
気づき・メモ
- 開発環境の構築がかなり楽になりそう。
- コンテナ1個作って開発メンバに配布して開発・テスト環境として使うようにするとよきなのかな。
- 「こっちでは再現するけど、むこうの環境だと再現しない」みたいな不具合の再現問題にも重宝しそう。
- 勉強会でハンズオン研修的なものをやるときに事前にDockerHubからコンテナpullして環境構築してねーとかすると便利そう。
- 今日の参加者はインフラエンジニアの比率が高い。そしてコンテナをすでに使ったことある参加者が多い。
- ゴール(コンテナを設計すること)への到達はまだまだだけど、流れはなんとなくわかった。
- 電源コードもう少し長めのやつもってこよう。。。