継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Docker 実践活用ガイド 11章~13章

タダです。

今回はDocker実践活用ガイドの11~13章を読んだ内容をまとめていきます。 ※記事は理解ができるたびに何度もアップデートしていこうと思います。 book.mynavi.jp

なお、副教材としてドットインストールも使っていこうと思います。

目次

なお、各章の内容は次の通りです。

  • 1章 Dockerとは
  • 2章 Dockerの仕組み
  • 3章 Dockerのインストール
  • 4章 Dockerを使ってみよう(コマンド編)
  • 5章 Dockerを使ってみよう(Kitematic(GUI)編)
  • 6章 Dockerイメージの操作
  • 7章 Dockerを使いこなす
  • 8章 複数のDokcerを使う(Docker Machine、Docker Swarm、Docker Compose)
  • 9章 Dockerをクラウドで使う(Docker Cloud)
  • 10章 DockerとJavaScriptウェブサービスを作る(簡易オンラインジャッジシステム)
  • 11章 Dockerを利用した実運用ウェブサービス構築事例(paizaオンラインジャッジシステム)
  • 12章 paizaの実行環境APIを使いウェブサービスを作る(簡易オンラインジャッッジシステム)
  • 13章 Dockerの内部

11章

  • paiza.IOでは、コードの実行にDockerの基盤に利用している
    • Dockerの実行基盤はAWSを使っている(EC2)
  • DockerのコンテナごとにCPUを割り当てることで各コンテナは確実に1つのCPUを占有できる
  • AWSでは、論理CPU番号と物理CPU番号の対応は以下のようになっている(/proc/cpuinfoから確認できる)
論理CPUコアの番号 物理CPUコアの番号
0 0
1 1
2 2
3 3
4 0
5 1
6 2
7 3
  • DockerのCPUコア割り当ては、 docker run --cpuset-cpus=1,5で割り当てる
  • メモリは、言語によって個別のメモリ設定を行う
    • Javaは、-Mxオプションで明示的にメモリ使用量を指定する
    • PHPは、memory_limitオプションでメモリ使用量を指定する
  • プロセスの制限は、個別にユーザーを作り、コンテナごとに実行ユーザーを変えてプロセス数の制限を行う
  • ディスク容量の制限には、ディスクquotaを利用する
  • Dockerイメージ・コンテナはメモリ上に保存することで常にファイルの読み込みをメモリから読み込む時間を早くしている
    • Dockerイメージ・コンテナなどのデータは/var/lib/dockerに保存されているためtmpfsを使ってRAMディスクを作成し、このディレクトリにマウントする
sudo service docker stop
mv /var/lib/docker /var/lib/docker-orig
mkdir /var/lib/docker
mount -t tmpfs -o size=10G none /var/lib/docker
cp -rp /var/lib/docker-orig/* /var/lib/docker
sudo service docker start
  • 負荷分散は、ELB->Web(APIサーバー)->RabbitMQ(AMQP)->Dockerホストで処理を行っている

12章

  • paizaのコード実行環境APIでは、3つのAPIが利用できる
    • create
    • get_status
    • get_details
  • createでは、コードを提出してコードを実行できる
  • get_statusでは、提出コードの実行状態を取得する
  • get_detailsでは、提出コードの実行結果を取得する
  • HTMLとNode.jsのプログラムを実行して上記のAPIを叩くことを行う

13章

  • Dockerコンテナのディレクトリの/var/lib/dockerには、Dockerデータが保存されて、コンテナで利用するファイルシステムの階層も作られる
  • cgroupsは、/sys/fs/cgroups/memory/docker/コンテナIDで確認できる
  • コンテナ内のプロセスの名前空間は、/proc/プロセスID/nsで確認できる

振り返り

  • Dockerコンテナについてなんとなくの理解だったところを手を動かしての学ぶきっかけとなりました。
    • 3月~4月にかけてはコンテナ技術に触れてきました。Kubernetesも書籍を買ったので継続して学んでいきます。
  • Docker ComposeやSwarmはもうちょっと勉強したいです。
  • 5月始まってしまいましたが、以下のことを取り組み始めました
  • 5月からはサーバーレスの本を読んでいきます www.oreilly.co.jp

  • 関連ブログ yoshidashingo.hatenablog.com kakakakakku.hatenablog.com