Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
2022年度 新入社員研修 コンテナ 開発本部CTO室 SREG 栗原 尚弘
Slide 2
Slide 2 text
自己紹介 ● 栗原 尚弘 ○ 18新卒 ● 社歴 ○ ライブエクスペリエンス事業本部 18-20半ば ○ 開発本部CTO室SREG 20半ば-今 ● Androidエンジニアとして入社しましたが 紆余曲折あり今は、クラウドインフラを用いた インフラの構築&運用、ゲームの認証認可基盤の運用、 ETLとDWH構築をやっています。 ● SNS ○ https://www.instagram.com/k__naohiro
Slide 3
Slide 3 text
自己紹介 ● 浅野 大我 ○ 20新卒 ○ などと言いつつ2018〜2019までインターンや内定者バイトをしていました ● モンスト事業本部 ゲーム運営部 モンストサーバ2グループ サーバチーム ○ 兼務: 開発本部 セキュリティ室(4月〜) ● モンストの開発や運用を していたりします ● https://twitter.com/atpons ● Google CloudのProfessional Cloud Architectを最近(?)とりました
Slide 4
Slide 4 text
本研修の目的 • コンテナを利用して環境構築が出来る • 簡単なサイトを構築し挙動を理解しコンテナへの理解を深めていく
Slide 5
Slide 5 text
流れ ● 前半の部 (13時ぐらいまで) ○ コンテナについての基礎&ハンズオン ● 後半の部 ○ kubernetesについての基礎&ハンズオン
Slide 6
Slide 6 text
なぜコンテナ技術を学ぶのか ● 弊社のプロジェクトに広く利用されているため ● 弊社以外でも多くの企業で利用されている技術だから ● コンテナ技術を雰囲気ではなく少し踏み込んで知って欲しいから
Slide 7
Slide 7 text
dockerを利用しているproject (一例)
Slide 8
Slide 8 text
コンテナ技術を少し踏み込んで知るメリット ● docker以外のコンテナを選定できるようになる ○ docker desktopの有料化に伴いdocker以外の選択する記事を見るようになりました ○ dockerの有料が悪とかそういう意味ではなく、選択できるほどの知識を身につけよう
Slide 9
Slide 9 text
docker architecture (一部省略) docker docker engine runc docker cli docker api containerd volumes buildkit networking
Slide 10
Slide 10 text
docker architecture (一部省略) docker docker enging runc docker cli docker api containerd volumes buildkit networking ここの技術について知って欲しい
Slide 11
Slide 11 text
containerd ● 2016年12月14日 docker社がdocker engineのコアコンポーネントであるcontainerdをスピンア ウト ● container imageのpull, push、コンテナの実行と監視等が利用できる ● runcを利用している
Slide 12
Slide 12 text
runc ● OCI(Open Container Initiative)のリファレンス実装 ● containerdで利用されている ● linux namespace, cgroups等をコンテナでも利用できるようにする ○ macOSには上記に相当するものが無いのでコンテナを利用したい場合は linuxを動かす必要がある ○ windowsにはHCS(Host Compute Service)といった上記に相当するものが実装されていてwindows containerを起動する際に利用される
Slide 13
Slide 13 text
Open Container Initiative ● コンテナの業界標準となる仕様を決めている ○ Google, AWS, Microsoft, Docker等数々の名だたる企業が参加している ● runtime-spec, image-specの二つの仕様がある ○ runtime-spec ■ コンテナのライフサイクル等動作に関わる標準化 ○ image-spec ■ コンテナイメージ仕様の標準化
Slide 14
Slide 14 text
なぜdockerを使うのか? ● コンテナを利用するためにはlinuxを動かす必要がある ○ macOS上でVMかhypervisorなどを利用する必要がある ○ docker desktopではその当たりが利用者に気にしなくても使える仕組みになっている ■ Mac OS上でdocker desktopを起動するとappleのhypervisor frameworkを利用しlinuxを起動している ■ kernel patches, security fixesは良い感じにdockerが適用している ■ この楽さがここまで普及した理由の一つだと個人的には思っている
Slide 15
Slide 15 text
結局docker以外のコンテナって何選べば良いのよ? ● containerdを利用するのが無難です ○ dockerから移行とかになったとき、そもそもdockerはcotainerdを利用しているので 動作に差異が生じない ○ docker cliによせたcliが存在する https://github.com/containerd/nerdctl
Slide 16
Slide 16 text
step1 静的サイトを動かしてみよう ● dockerを利用してnginxから静的サイトを配信できるようにする ● 起動に必要なファイルは 2022BeginnerTraningContainer/step1 に入ってます
Slide 17
Slide 17 text
step1のファイル構成 • Dockerfile • コンテナの起動に必要 • index.html • 今回配信する静的ファイル • nginx.conf • 静的ファイルを配信するのに必要な nginxの設定 • コンテナと関係ないのでこの内容には 触れません
Slide 18
Slide 18 text
Dockerfileとコンテナの関係性 Dockerfile コンテナイメージ コンテナ build create
Slide 19
Slide 19 text
Dockerfileとコンテナの関係性 • Dockerfile • コンテナイメージを構築するための設計書 • コンテナイメージ • コンテナを作成するための手順が記載された読み取り専用のテンプレート • コンテナ • アプリケーションが実行される
Slide 20
Slide 20 text
step1のディレクトリに移動しコンテナイメージの作成 Dockerfile コンテナイメージ build docker build -t $IMAGE_NAME . イメージの作成 タグの命名 (これが無いと何のイメージを作成したのか分からなくなる) contextの指定
Slide 21
Slide 21 text
コンテナの作成 コンテナイメージ コンテナ create docker run -d -p 80:80 $IMAGE_NAME コンテナの起動と作成 portの指定
Slide 22
Slide 22 text
ブラウザを通してlocalhostに接続してよう
Slide 23
Slide 23 text
コンテナを止めてみよう • docker container ls • 起動しているコンテナを一覧表示する • docker stop $CONTAINER_ID • 指定したコンテナを止める • (例) docker stop 9b18a51729d3
Slide 24
Slide 24 text
Dockerfileの見方
Slide 25
Slide 25 text
Dockerfileの見方
Slide 26
Slide 26 text
FROMについて Docker社のContainer Registryである Docker hubからダウンロードしている
Slide 27
Slide 27 text
コンテナイメージを選ぶときの目安 FROMは必ずDocker Official Imagesから選択しましょう
Slide 28
Slide 28 text
コンテナイメージを選ぶときの目安 • 身元の分からないコンテナイメージを選択するとバックドアが仕掛けられていた ケースがあります • https://www.bleepingcomputer.com/news/security/17-backdoored-docker-images-removed-from-do cker-hub/ • 暗号通貨がマイニングされていたとのこと
Slide 29
Slide 29 text
Dockerfileの見方
Slide 30
Slide 30 text
Dockerfileの見方
Slide 31
Slide 31 text
Dockerfileの見方
Slide 32
Slide 32 text
Dockerfileの見方
Slide 33
Slide 33 text
Dockerfileの見方
Slide 34
Slide 34 text
Dockerfileの見方
Slide 35
Slide 35 text
step2 混乱しやすい命令たち このDockerfileもstep1と同じ動作をします
Slide 36
Slide 36 text
step2 混乱しやすい命令たち
Slide 37
Slide 37 text
step2 混乱しやすい命令たち
Slide 38
Slide 38 text
動作に違いが無いのになぜ宣言が異なるのか…?
Slide 39
Slide 39 text
ADDとCOPYの違い ● ADD ○ .tar の展開とコピーが同時に出来る ○ 外部ファイルのダウンロードが出来る ● COPY ○ コピーしか出来ない
Slide 40
Slide 40 text
どっち使えば良いのか? ● .tarを展開したいなど明確な理由が無い場合はCOPYでよい ○ ADDだといろいろ機能がつきすぎて透過的では無いため ○ 公式のベストプラクティスにもそう書いてある ■ https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#add-or-copy
Slide 41
Slide 41 text
CMDを利用した例
Slide 42
Slide 42 text
ENTRYPOINTを利用した例
Slide 43
Slide 43 text
CMDとENTRYPOINTを利用した例
Slide 44
Slide 44 text
違いから分かる注意点 ● DockerfileにCMDしか書かない場合はFROMで指定するイメージで 利用されるENTRYPOINTに注意する必要がある ○ CMDに書かれたコマンドが意図通りに動作するとは限らないため ○ 不安なら自分でENTRYPOINTで指定してあげると良い ■ 複数ENTRYPOINTがある場合、一番最後に書かれたENTRYPOINTが 有効になる
Slide 45
Slide 45 text
step3 動的サイトをdocker composeを利用して起動する ● Goで作られたAPIサーバをdocker composeを用いて構築する localhost
Slide 46
Slide 46 text
docker composeとは ● 開発環境で複数のコンテナを動かすときに使うことが多い ● 何のコンテナがどのように動いているのかが定義されていたりコンテナの起動順序を指定で きたりする ● AWS ECSではdocker composeのファイルをそのまま利用できるサービスを提供している ○ https://aws.amazon.com/jp/blogs/news/automated-software-delivery-using-docker-compose-and-a mazon-ecs/
Slide 47
Slide 47 text
step3のファイル構成 ● step3/docker/app/Dockerfile ○ アプリケーションコンテナの起動に必要 ● step3/docker/mysql/volumes ○ mysqlのデータを保存する場所 ● step3/docker-compose.yml ○ アプリケーションコンテナとmysqlコンテナを 制御するために必要
Slide 48
Slide 48 text
実際に動かして見よう ● コマンド実行時のディレクトリは 2021BeginnerTraningContainer/step3 直下を想定していま す ○ M1 Macの方は必ずdocker-compose.ymlの33行目のコメントアウトを外してください ● docker compose build ○ docker-compose.ymlの内容に沿ってイメージを作成 ● docker compose up -d ○ docker-compose.ymlの内容に沿ってコンテナの起動 ● docker compose exec app ./bin/generator ○ appコンテナにあるgeneratorを起動し databaseのmigrationを行います ● docker compose stop ○ docker-compose.ymlに定義されているコンテナが停止する
Slide 49
Slide 49 text
ブラウザを通してlocalhostに接続しよう http://localhost:8081/users/1/image http://localhost:8081/users/1
Slide 50
Slide 50 text
docker-compose.yml の見方
Slide 51
Slide 51 text
docker-compose.yml の見方
Slide 52
Slide 52 text
docker-compose.yml の見方
Slide 53
Slide 53 text
docker-compose.yml の見方
Slide 54
Slide 54 text
docker-compose.yml の見方
Slide 55
Slide 55 text
docker-compose.yml の見方
Slide 56
Slide 56 text
docker-compose.yml の見方
Slide 57
Slide 57 text
docker-compose.yml の見方
Slide 58
Slide 58 text
docker-compose.yml の見方