Share
Embed
いまからでも遅くないコンテナ座学
本資料は以下connpassで実施したセッションの内容になります。
https://ibm-developer.connpass.com/event/335573/
NoMu
December 23, 2024
Transcript
50 slides
-
日本アイー・ビー・エム株式会社 テクノロジー事業本部 カスタマーサクセス 村田 憲昭 野中 佑太 いまからでも遅くない!コンテナで Webアプリを動かしてみよう入門 (3-1)コンテナ座学
2024年12月23日 17時03分まで マイクミュートにして お待ちください -
2 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation 自己紹介 村田 憲昭 北海道北斗市 スノーボード、登山、グルメ、猫 カスタマーサクセス DX人材育成/教育(IT全般) 社内SE(いわゆる「ひとり情シス」) 某コンビニのエンジニア 名前 生息地 趣味 経歴 [email protected] https://www.linkedin.com/in/noriaki-murata-nmz LinkedIn: Mail: -
3 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation 自己紹介 野中 佑太 秋田県秋田市 運動、カラオケ、温泉巡り カスタマーサクセス SE(会社員・フリーランス) 名前 生息地 趣味 経歴 [email protected] https://www.linkedin.com/in/yuta-nonaka/ LinkedIn: Mail: -
4 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation 免責事項 本資料に含まれる情報は可能な限り正確を期しておりますが、 記載された内容に関して、日本アイ・ビー・エム株式会社が 何ら保証するものではありません。 従って、本資料の情報の利用は使用者の責任において 為されるものであり、資料の内容によって受けた 如何なる被害に関しても一切の補償をするものではありません。 -
5 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation https://app.sli.do/event/w5ARpQ5uNABGLAcsvQfTCL ちょっと皆様に質問です! -
6 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation いまからでも遅くないシリーズ •(1)Gitハンズオン •(2)WebAPIハンズオン •(3)コンテナハンズオン •(4)Reactハンズオン •(5)データベースハンズオン •(6)コンテナオーケストレーションハンズオン コンテナオーケストレーション(OpenShift) Web サーバー API サーバー DB サーバー Gitサーバー Push Deploy PC ベースになる 技術「コンテナ」 -
7 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation コンテナの基本的な 概念がわかる 本Dojoのゴール -
8 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation 本日のアジェンダ 1 .コンテナ基礎 2 .podman/Docker基礎 3 .Dockerfile 4 .Docker Compose 5 .デモ 6 .コンテナオーケストレーション基礎(予習) -
9 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation 本日のアジェンダ 1 .コンテナ基礎 2 .Podman/Docker基礎 3 .Dockerfile 4 .Docker Compose 5 .デモ 6 .コンテナオーケストレーション基礎(予習) -
10 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation コンテナ基礎 コンピュータの仮想化の方式の一つで、稼働中の オペレーティングシステム(OS)の一部を分離し て他と隔離された専用のエリアを用意し、その上 でソフトウェアを動作させる方式をコンテナ型仮 想化という。隔離された領域のことをコンテナと いう。 出典:IT 用語辞典 e-Words -
11 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation コンテナ基礎 コンテナがないとき(物理マシン) ハードウェア OS ミドルウェア ライブラリ アプリ アプリ アプリ サーバー -
12 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation コンテナ基礎 コンテナがないとき(仮想マシン) ハードウェア OS ハイパーバイザー ゲストOS ミドルウェア ライブラリ アプリ ゲストOS ミドルウェア ライブラリ アプリ ゲストOS ミドルウェア ライブラリ アプリ リソース 効率 起動の 遅さ 一貫性 管理の 複雑さ サーバー仮想化 -
13 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation コンテナ基礎 コンテナがあるとき ハードウェア OS コンテナエンジン ミドルウェア ライブラリ アプリ ミドルウェア ライブラリ アプリ ミドルウェア ライブラリ アプリ 軽量化 高速 起動 一貫性 管理の 簡素化 コンテナ化 -
14 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation 本日のアジェンダ 1 .コンテナ基礎 2 .podman/Docker基礎 3 .Dockerfile 4 .Docker Compose 5 .デモ 6 .コンテナオーケストレーション基礎(予習) -
15 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Docker/podman基礎 Docker(元dotCloud社) ・ソロモン・ハイクスらが開発 ・2013年にOSSで公開 ・旧来のコンテナ技術を よりわかりやすく ・コンテナライフサイクル (Build、Share、Run) 引用:https://www.docker.com/ja-jp/ -
16 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Docker/podman基礎 podman ・ダニエル・ウォルシュらが開発 ・2018年に誕生 ・Dockerの欠点を改善 ・Dockerとの互換姓 引用:https://podman.io/ -
17 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Docker/podman基礎 Dockerfile Dockerイメージ コンテナ レジストリ 「Build、Share、Run」 Build Share ダウンロード Run -
18 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Docker/podman基礎 コマンドで表現(podman) Dockerfile Dockerイメージ コンテナ レジストリ podman build podman push podman pull podman start ※pull + start = run -
19 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation 本日のアジェンダ 1 .コンテナ基礎 2 .podman /Docker基礎 3 .Dockerfile 4 .Docker Compose 5 .デモ 6 .コンテナオーケストレーション基礎(予習) -
20 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Docker/podman基礎(再掲) コマンドで表現(podman) Dockerfile Dockerイメージ コンテナ レジストリ podman build podman push podman pull podman start ※pull + start = run -
21 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Dockerfile Dockerコンテナイ メージを作成するた めの設計図や手順書 として機能するテキ ストファイル 例)index.htmlにアクセ スすると「Hello from Dockerfile」と表示する Apacheサーバー # This is a commant line FROM rhel9:latest MAINTAINER Noriaki Murata <[email protected]> LABEL description="A custom Apache container image" RUN yum install -y httpd && ¥ yum clean all ADD training.repo /etc/yum.repo.d/training.repo RUN echo "Hello from Dockerfile" > /var/www/html/index.html EXPOSE 80 ENTRYPOINT ["httpd","-D","FOREGROUND"] -
22 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Dockerfile 基本的な考え方 1.コンテナイメージのビルドプロセスを自動化 2.再現性を確保するために使用 3.アプリケーションの依存関係やビルド手順を 明確に定義 -
23 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Dockerfile ちょっとやってみよう #Dockerイメージ作成 $ podman build –t localhost/podmansample . # Dockerイメージ作成確認 $ podman images Dockerfile Dockerイメージ podman build -
24 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Dockerfile ちょっとやってみよう # 作成したイメージでコンテナ作成して起動(※イメージはローカルにあるので、今回はpullはない) $ podman run -d --name hellopodman -p 8080:80 podmansample:latest podman pull podman start ※pull + start = run -
25 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Dockerfile ちょっとやってみよう (システム構成図) podmanコンテナ 8080ポート Apacheサーバー 80ポート ブラウザ /var/www/html/index.html -
26 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation 本日のアジェンダ 1 .コンテナ基礎 2 .podman /Docker基礎 3 .Dockerfile 4 .Docker Compose 5 .デモ 6 .コンテナオーケストレーション基礎(予習) -
27 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Docker Compose 複数のコンテナを使用するアプリケーションを定義し 実行するためのツール -
28 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Docker Compose Web3層アプリケーションを表現してみる Ngnix Node.js MySQL 8080 ポート 80 ポート 3306 ポート 3000 ポート data 例えば・・・ network host1 host2 host3 /home/hoge/data 3306 ポート -
29 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Docker Compose podmanコマンドで実施 #network作成 $ podman network create --subnet=192.168.100.0/24 --gateway=192.168.100.254 test_network1 # host1起動 $ podman run -d --name host1 --net test_network1 -p 8080:80 ngnix:latest # host2起動 $ podman run -d --name host2 --net test_network1 node:latest # host3起動 $ podman run -d --name host3 --net test_network1 -e MYSQL_USER=mysql -e MYSQL_PASSWORD=password –e ¥ -e MYSQL_DATABASE=my_database MYSQL_ROOT_PASSWORD=password ¥ -v /home/hoge/data/:/var/lib/mysql mysql:latest コマンド 複雑 標準化 デプロイ 効率化・自動化 マイクロサービス アーキテクチャの 台頭 DevOps 促進 -
30 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Docker Compose Docker composeコマンドで実施 version: '3' services: host1: image: nginx ports: - "8080:80" networks: - test_network1 host2: image: node environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: my_database MYSQL_USER: mysql MYSQL_PASSWORD: password networks: - test_network1 #host1, host2, host3起動 $ podman-compose up -d host3: image: mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: example networks: - test_network1 networks: test_network1: driver: bridge ipam: config: - subnet: 192.168.100.0/24 gateway: 192.168.100.254 ※事前にdocker-compose.ymlファイル準備 -
31 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation Docker Compose メリット 1.複数コンテナの定義 2.環境の一貫性 3.簡単な起動と停止 4.ネットワーキングの自動化 5.ボリュームの管理 -
32 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation 本日のアジェンダ 1 .コンテナ基礎 2 .podman /Docker基礎 3 .Dockerfile 4 .Docker Compose 5 .デモ 6 .コンテナオーケストレーション基礎(予習) -
33 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation デモ Web3層アプリケーションをコンテナで表現してみた -
34 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation デモ環境構成図 ハードウェア OS(Windows11) コンテナエンジン(Podman) Nginx Axios React MySQL2 Express Node.js MySQL Node.js CORS コンテナ1 (Webサーバー) コンテナ2 (APIサーバー) コンテナ3 (DBサーバー) -
35 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation デモシステム構成図 Nginx Node.js MySQL 8080ポート 80ポート 3306ポート 8000ポート data network Web サーバー API サーバー DB サーバー Local Directory 3306ポート 8000ポート ①データ取得リクエスト ②データ取得リクエスト ③DBアクセス ④DBデータ返却 ⑤レスポンス(データ)送信 ⑥レスポンス(データ)表示 -
36 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation 本日のアジェンダ 1 .コンテナ基礎 2 .podman /Docker基礎 3 .Dockerfile 4 .Docker Compose 5 .デモ 6 .コンテナオーケストレーション基礎(予習) -
37 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation コンテナオーケストレーション基礎(予習) デプロイやスケーリングを自動化したり、コン テナ化されたアプリケーションを管理したりす るための、オープンソースのシステムです。 出典:kubernates公式HP -
38 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation コンテナオーケストレーション基礎(予習) コンテナオーケストレーションしないとき コンテナ 動いてな い? スペック 足りてる? このコンテナ、 こっちのサー バーで動かして いい? -
39 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation コンテナオーケストレーションするとき コンテナ 死活確認 ロード バランシング コンテナ スケジューリング コンテナオーケストレーション コンテナオーケストレーション基礎(予習) -
40 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation つまり・・・以下のような機能を提供 1.構成ファイルの定義 2.コンテナのスケジューリング 3.リソース管理 4.ネットワーキング 5.スケーリング 6.ヘルスチェックとセルフヒーリング コンテナオーケストレーション基礎(予習) -
41 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation コンテナオーケストレーションツールいろいろ 機能/ツール名 Kubernetes OpenShift Docker Swarm デプロイ方法 手動/自動化可能 Operatorによる自動化 主に手動 拡張性 高い 高い 中程度 セキュリティ RBAC、ネットワークポリシー 強化されたセキュリティ機能 基本的な機能のみ ユーザーインターフェース ダッシュボード(オプション) Webコンソール Docker CLI CI/CD連携 Jenkins、GitLabなど外部ツー ル 組み込みのCI/CD機能 サードパーティツールが必要 マルチクラウド対応 対応 対応 限定的 コンテナオーケストレーション基礎(予習) -
42 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation 次回予告!! -
44 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation まとめ 1 .コンテナ基礎 2 .Docker/podman基礎 3 .Dockerfile 4 .Docker Compose 5 .デモ 6 .コンテナオーケストレーション基礎(予習) こんなサイトも参考に・・・ ▼Kubernetes公式 https://kubernetes.io/ja/ ▼OpenShift公式 https://www.redhat.com/ja/technologies/cloud- computing/openshift -
45 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation コンテナの基本的な 概念がわかる 本Dojoのゴール(ふりかえり) -
46 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation いろいろTry&Errorしながら 試してみてください。 ありがとうございました -
47 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation アンケートのご協 力よろしくおねが いいたします! https://app.sli.do/event/w5ARpQ 5uNABGLAcsvQfTCL -
49 Customer Success, IBM Technology, Japan / © 2024 IBM
Corporation QA タイム -
ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独自の見解を反映したものです。それらは情報提供の目的のみ で提供されており、いかなる参加者に対しても法律的またはその他の指導や助言を意図したものではなく、またIBM製品やサービスがお客様に適用ある特定の法令に適 合することを保証するものでもありません。本講演資料に含まれている情報については、完全性と正確性を期するよう努めておりますが、「現状のまま」提供され、明 示または黙示にかかわらず、商業性、特定の目的への適合性、非侵害性を含め、いかなる保証も伴わないものとします。本講演資料またはその他の資料の使用によって、 あるいはその他の関連によって、いかなる損害が生じた場合も、IBMは責任を負わないものとします。 本講演資料で言及されるIBM製品、プログラム、またはサービス は、IBMがビジネスを行っているすべての国・地域でご提供可能なわけではありません。本講演資料で言及される将来の展望(製品リリース日付や製品機能を含む)は、 市場機会またはその他の要因に基づいてIBM独自の決定権をもっていつでも変更できるものとし、将来の製品または機能が使用可能になること、もしくは特定の結果を 確約することを意図するものではありません。本講演資料は、言及される IBM製品またはサービスに適用ある契約条件を変更するものでも、追加の表明または保証を意
図するものでもありません。 本講演資料に含まれている内容は、参加者の活動によって特定の結果が生じると述べる、または暗示することを意図したものでも、またそのような結果を生むものでも ありません。 パフォーマンスは、管理された環境において標準的なIBMベンチマークを使用した測定と予測に基づいています。ユーザーが経験する実際のスループット やパフォーマンスは、ユーザーのジョブ・ストリームにおけるマルチプログラミングの量、入出力構成、ストレージ構成、および処理されるワークロードなどの考慮事 項を含む、数多くの要因に応じて変化します。したがって、個々のユーザーがここで述べられているものと同様の結果を得られると確約するものではありません。記述 されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使用したか、またそれらのお客様が達成した結果の実例として示されたものです。実際の環 境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。 • IBM、IBM ロゴ、ibm.com、IBM Cloud Pak® は、 世界の多くの国で登録されたInternational Business Machines Corporationの商標です。他の製品名およびサービス 名等は、それぞれIBMまたは各社の商標である場合があります。現時点での IBM の商標リストについては、www.ibm.com/legal/copytrade.shtmlをご覧ください。 • DockerはDocker, Inc.の米国およびその他の国における商標です。 • Kubernetesは、The Linux Foundationの米国及びその他の国における登録商標または商標です。 • OpenShiftは米国およびその他の国におけるRed Hat, Inc.の登録商標です。 • LinkedInは、サービスにおけるすべての知的所有権を保有しており、これらの商標はLinkedInの登録商標です。 • Red Hat、Red Hat Enterprise Linux、Red Hat ロゴ、OpenShift は、米国およびその他の国における Red Hat, Inc.またはその子会社の商標または登録商標です。 • podmanは、Apache License 2.0ライセンスに準拠します。https://www.apache.org/licenses/LICENSE-2.0