インフラエンジニアBooks 30分でわかる「Dockerコンテナ開発・環境構築の基本」登壇資料です。
30分でわかるDockerコンテナ開発・環境構築の基本#インフラエンジニアBooks2022.5.12Yutaka Ichikawa (@cyberblack28)
View Slide
ProfileName• Yutaka Ichikawa/市川 豊Belong• Oracle Corporation Japan• Solutions ArchitectRole• Principal Cloud Solution EngineerSNS• Twitter/GitHub/Qiita:cyberblack28Blog• https://cyberblack28.hatenablog.com/Materials• https://speakerdeck.com/cyberblack28/Community• Oracle Cloud Hangout Cafe #ochacafe• CloudNative Days Tokyo #cndt2021 #o11y2022Certified• Certified Kubernetes Administrator• Certified Kubernetes Application Developer• Certified Kubernetes Security Specialist• Kubernetes and Cloud Native AssociatePublicationsNew
Agenda• 第1章 コンテナの世界に飛び込む前に• 第2章 コンテナアプリケーション開発に必要なソフトウェア• 第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・Run• 第4章 コンテナオーケストレーション• 第5章 Kubernetesでコンテナアプリケーションを動かすまで• 第6章 ローカル開発の準備• 第7章 コンテナアプリケーションにおけるCI/CD
本書専用GitHubリポジトリhttps://github.com/cyberblack28/docker-development-environment-construction-basic
第1章 コンテナの世界に飛び込む前に
第1章 コンテナの世界に飛び込む前に1章のポイント既存のアプリケーション開発仮想化の仕組みコンテナアプリケーション開発スタイル従来のオンプレミスや仮想マシン環境で稼働させるアプリケーション開発の流れを確認し、開発における課題からコンテナアプリケーション開発によってどのように変化するかを理解仮想マシンとコンテナの違いを理解コンテナアプリケーション開発のライフサイクル Build(ビルド)Ship(シップ)Run(ラン)の概要を理解
第1章 コンテナの世界に飛び込む前に既存のアプリケーション開発物理マシン仮想マシン仮想マシン(クラウド)コンテナ物理サーバでアプリケーションを稼働VM 物理サーバ上に複数の仮想マシンでアプリケーションを稼働クラウドをベースとしたスケーラブルな仮想マシンでアプリケーションを稼働物理マシン・仮想マシンもノードとして束ねて、コンテナという小さい単位でアプリケーションを稼働
第1章 コンテナの世界に飛び込む前にアプリケーションコードをソースコードリポジトリにコミット/プッシュCI/CDパイプラインによるテスト、ビルド、デプロイDeveloper Code Repository CI/CD Pipelineすべて自動化されている場合もあれば、手動で行う場合もあります。本番環境ステージング環境検証環境OperatorInfrastructureEngineer開発環境OS/ライブラリVM物理マシン 仮想マシン仮想マシン(クラウド)
第1章 コンテナの世界に飛び込む前にOS/ライブラリとアプリケーションの分離アプリケーション本番環境ステージング環境検証環境開発環境OS/ライブラリVM物理マシン 仮想マシン仮想マシン(クラウド)アプリケーションは物理マシンや仮想マシンのOS/ライブラリ上で稼働稼働するアプリケーションは実行環境に依存する環境差異が原因で他の環境で稼働するけど、本番環境で稼働しない等の障害が発生するOSのパッチバージョンが異なる、このライブラリが無かった、関係ないものがインストールされている…
第1章 コンテナの世界に飛び込む前にアプリケーションOS/ライブラリ• 仮想マシンイメージがベンダー製品特有(ベンダーロックイン)• 容量も重い(数ギガ~数十ギガ)• 可搬性(Portability)が低い• 運用負荷XenServer仮想マシンイメージKVMVMWareハイパーバイザーハードウェアVMWare Xen/Server KVM物理/仮想マシンにおける、OS/ライブラリのアップデートには人手や時間を要するため、アプリケーションのリリースに影響する…仮想マシン
第1章 コンテナの世界に飛び込む前にこれまでのアプリケーション開発OS/ライブラリが既に整っている実行環境にアプリケーションをデプロイするという形式1.アプリケーション• 環境差異による問題が発生• OS/ライブラリ側に何かあるとアプリケーションに影響2.インフラ• 仮想マシンイメージがベンダー製品特有(ベンダーロックイン)• 仮想マシンイメージの容量が重く可搬性(Portability)が低い• 物理/仮想マシンの特性上、OS/ライブラリのアップデートに時間を要して、アプリケーションのリリースに影響する
第1章 コンテナの世界に飛び込む前に仮想マシンとコンテナの違いハードウェアハイパーバイザーOS/Hyper Visor OS/Hyper Visorカーネル カーネルアプリケーション アプリケーションライブラリ ライブラリ仮想マシン 仮想マシンハードウェアカーネルOS/Hyper Visor OS/Hyper Visorコンテナ コンテナコンテナエンジン各仮想マシンのカーネル上で実行、隔離性が高いが、起動が遅く(数分)オーバヘッドが大きい。カーネルを共有しているため、隔離性は低いが、起動が高速(数秒)でオーバヘッドが小さい。仮想マシン コンテナアプリケーション アプリケーションライブラリ ライブラリ
第1章 コンテナの世界に飛び込む前にOS/ライブラリとアプリケーションの統合• OS/ライブラリとアプリケーションをパッケージイメージ化• 技術としてはOSSのため、ベンダーロックインは発生しない• イメージはこれまでの仮想マシンイメージに比べるとはるかに軽いのでポータビリティ性が高い• 自動化との親和性もあり、運用負荷を軽減OS/ライブラリアプリケーションコンテナイメージ1.ビルド(Build)ビルド(Build)OS/ライブラリ
第1章 コンテナの世界に飛び込む前に• イメージをレジストリに保存して、共有2.シップ(Ship)OS/ライブラリOS/ライブラリOS/ライブラリイメージレジストリPush Pullシップ(Ship)イメージの共有OS/ライブラリコンテナプラットフォーム
第1章 コンテナの世界に飛び込む前に• コンテナイメージを基にコンテナを起動3.ラン(Run)コンテナプラットフォーム上でイメージからコンテナを起動して、アプリケーションを稼働。イメージもプラットフォームも特定ベンダー技術に依存しないため、ベンダーロックインも無い。OS/ライブラリラン(Run)OS/ライブラリコンテナプラットフォームコンテナコンテナイメージ
第1章 コンテナの世界に飛び込む前にコンテナアプリケーション開発OS/ライブラリとアプリケーションを統合して、軽量イメージ化して、コンテナプラットフォームにコンテナとしてデプロイする形式1.アプリケーション• OS/ライブラリとアプリケーションが一つに統合されているため、環境差異による問題が起きにくい2.インフラ• 仮想マシンイメージと仕組みが異なり、OSSベースでベンダーロックインもなく、軽量で可搬性(Portability)が高い• OS/ライブラリのアップデートも容易なため、リリースサイクルを速め、スピード(Agility)が向上
第2章 コンテナアプリケーション開発に必要なソフトウェア
第2章 コンテナアプリケーション開発に必要なソフトウェア2章のポイントDockerのアーキテクチャDockerのアーキテクチャ イメージ、レジストリ、コンテナを一つずつ理解し、Dockerをベースに Build(ビルド)Ship(シップ)Run(ラン)というコンテナアプリケーション開発のライフサイクルを理解Docker環境のセットアップクラウド環境、Dockerインストール、Docker Hubのセットアップを手順に従い実施
第2章 コンテナアプリケーション開発に必要なソフトウェアDockerコンテナランタイムとLinuxカーネルの機能(名前空間、cgroups)を利用してコンテナを作成して、コンテナイメージをもとにアプリケーションを稼働させるOSSであり、Build/Ship/Runを実現
第2章 コンテナアプリケーション開発に必要なソフトウェアDockerを構成する主要コンポーネント1.ImageOS/ライブラリDockerfile イメージBuild2.RegistryOS/ライブラリイメージShipOS/ライブラリレジストリ3.ContainerOS/ライブラリOS/ライブラリOS/ライブラリOS/ライブラリイメージRunOS/ライブラリコンテナ
第2章 コンテナアプリケーション開発に必要なソフトウェアDockerで実現するBuild/Ship/Run1.Build読み込み専用(ReadOnly)ベースイメージCentOSイメージ層ContainerImageFROM centos:7RUN yum -y install epel-releaseRUN yum -y install nginxCOPY index.html /usr/share/nginx/htmlENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;“]Dockerfile①②③④⑤⑤④③②①$ docker image buildBuildDockerfileからビルドして、コンテナイメージを作成する
第2章 コンテナアプリケーション開発に必要なソフトウェア2.Shipコンテナエンジン(dockerd)ハードウェアpullコンテナレジストリCentOSリポジトリUbuntuリポジトリContainerImagepushtag:latesttag:6.7・・tag:latesttag:14.04・・ShipNginxリポジトリtag:latesttag:19.1・・カーネルrunbuildContainerImageContainerImage$ docker image pull$ docker image pushDockerfileレジストリにイメージのアップロード(push)とダウンロード(pull)して、イメージの共有を行う
第2章 コンテナアプリケーション開発に必要なソフトウェア3.RunpullコンテナImageRegistryContainerImagepushRunrunbuildContainerImageContainerImage$ docker container runDockerfileベースイメージCentOSイメージ層書き込み可能イメージ層ContainerImage⑤④③②①6読み込み専用(ReadOnly)FROM centos:7RUN yum -y install epel-releaseRUN yum -y install nginxCOPY index.html /usr/share/nginx/htmlENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;“]Dockerfile①②③④⑤コンテナエンジン(dockerd)ハードウェアカーネルイメージをもとにコンテナを起動する
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・Run
3章のポイントBuild / イメージビルドDockerfileを作成して、イメージのビルドを行う上で必要となる、Dockerfile書式の整理、イメージの軽量化、ビルドツールの理解第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・RunShip / イメージレジストリイメージレジストリの紹介、イメージセキュリティとしてTrivyを理解Run / コンテナ実行コンテナの起動、停止、接続などDockerの基本コマンドを理解永続化データとネットワークモデル単体コンテナとしての永続化デートとネットワークモデルの整理と理解
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・RunBuild / イメージビルドDockerfileの作成$ docker image buildイメージビルドコマンドの実行ContainerImageイメージ生成#ベースイメージのPullFROM centos:7#epel-releaseインストールRUN yum -y install epel-release#nginxインストールRUN yum -y install nginx#index.htmlを/usr/share/nginx/index.htmlにコピーCOPY index.html /usr/share/nginx/html#nginxのフォアグラウンド処理ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;“]「docker image build」コマンドでは、Dockerfileの上から順番に処理が実行されます。Dockerfile
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・RunDockerfile、ビルド、イメージの関係性#ベースイメージのPullFROM centos:7#epel-releaseインストールRUN yum -y install epel-release#nginxインストールRUN yum -y install nginx#index.htmlを/usr/share/nginx/index.htmlにコピーCOPY index.html /usr/share/nginx/html#nginxのフォアグラウンド処理ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]Dockerfile# docker image build -t cyberblack28/sample-nginx .Sending build context to Docker daemon 29.18kBStep 1/5 : FROM centos:7・・<省略>・---> 7e6257c9f8d8Step 2/5 : RUN yum -y install epel-release---> Running in 1a6ea01a9382・・<省略>・---> b58fcc402d22Step 3/5 : RUN yum -y install nginx---> Running in 9eacd9b3caa1・・<省略>・---> cc0ba96f9da7Step 4/5 : COPY index.html /usr/share/nginx/html---> 481e53617e12Step 5/5 : ENTRYPOINT [“nginx”, “-g”, “daemon off;”]---> Running in 33a4c5304825Removing intermediate container 33a4c5304825---> 124f75914199Successfully built 124f75914199Successfully tagged cyberblack28/sample-nginx:latestビルド# docker image history cyberblack28/sample-nginxIMAGE CREATED CREATED BY SIZE COMMENT124f75914199 10 minutes ago /bin/sh -c #(nop) ENTRYPOINT ["/bin/sh" "-c… 0B481e53617e12 10 minutes ago /bin/sh -c #(nop) COPY file:764d0af30d8866d5… 130Bcc0ba96f9da7 11 minutes ago /bin/sh -c yum -y install nginx 206MBb58fcc402d22 11 minutes ago /bin/sh -c yum -y install epel-release 91.7MB7e6257c9f8d8 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B 4 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B 4 weeks ago /bin/sh -c #(nop) ADD file:61908381d3142ffba… 203MBイメージ①②③④⑤①②③④⑤①②③④⑤
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・RunDockerfileリファレンス1.ADDとCOPYファイル tar形式ファイルディレクトリリモートファイルADDファイルディレクトリCOPYローカルにあるファイルやディレクトリをビルドするイメージに含める命令として、ADD命令とCOPY命令がある• ローカルにあるファイル、ディレクトリ、tar形式ファイル、リモートファイルを指定先(パス)に配置• tar形式ファイルは自動展開される• ZIP形式ファイルは解凍されない• ローカルにあるファイル、ディレクトリを指定先(パス)に配置ビルド中、ファイルやディレクトリを配置する場合はCOPY命令を使用、リモートからのファイルおよびtarファイルを展開する場合は、ADD命令を推奨
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・Run2. CMDとENTRYPOINTDockerfileでコマンドを実行する命令としてCMD命令とENTRYPOINT命令があり、書式としてshellとexecの形式があるDockerfileでCMD命令とENTRYPOINT命令で指定した内容も、「$ docker container run」コマンドのオプション、引数を実行時に指定した場合、CMDとENTRYPOINTおよびshellとexec形式とで挙動が変わる(上書きされるされない)項目 説明CMD(shell形式 / exec形式) コンテナ起動時に変更可能なデフォルトコマンド「$ docker container run」実行時の引数等で上書き可能ENTRYPOINT(shell形式) コンテナ起動時に実行を必須とするコマンド「$ docker container run」実行時の引数等で上書き不可、ただし「--entrypoint」オプションを指定すると上書き可能ENTRYPOINT(exec形式) コンテナ起動時に実行を必須とするコマンド「$ docker container run」実行時の引数等で上書き不可、ただしexec形式の場合は引数だけ追加可能、「--entrypoint」オプションを指定すると上書き可能
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・Runイメージの軽量化イメージはレイヤ数が増えるほど容量が多くなり、サイズが増えると以下の弊害が生じる• イメージのビルド時間が増える• イメージレジストリへのアップロード(Push)時間が増える• イメージレジストリからのダウンロード(Pull)時間が増える• ホストでのディスク消費軽量化のチューニング方法を取り入れて軽量化を図る• 軽量なベースイメージの利用• 不要ファイルの削除• 不要プログラムの削除• 依存ライブラリの削除
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・RunマルチステージビルドApp Build イメージソースコードBuild(Compile)ビルドライブラリExecution イメージ実行環境CopyExecutionイメージサイズ:Heavy イメージサイズ:LightOne Dockerfile BuildStage1 Stage2アーティファクト アーティファクトコンパイル用のイメージとコンパイルして生成された成果物を展開するイメージ、つまりアプリケーションビルド用と実行用のイメージを分けて、1つのDockerfileで行う手法。必要なものはコンパイルされた成果物(バイナリファイル等)であり、コンパイラ等を含むビルド資材は、実行用のイメージには不要。実行用のイメージには成果物を実行できる環境があればよいので、イメージの軽量化を実現。#Stage1#Goのビルドを実行するベースイメージを取得FROM golang:1.16.4-alpine3.13 as builder#ローカルのmain.goをイメージ内にコピーCOPY ./main.go ./#main.goをソースからビルド(コンパイル)して、msbというビルド成果物を生成RUN go build -o /msb ./main.go#Stage2#alpineのベースイメージを取得FROM alpine:3.13#ビルドイメージからビルド成果物のmsbをコピーして配置COPY --from=builder /msb /usr/local/bin/msb#msbの実行ENTRYPOINT ["/usr/local/bin/msb"]
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・RunShip / イメージレジストリImage Registry 参考URL 種別Docker Hub https://hub.docker.com/ パブリックレジストリDocker Trusted Registry (DTR) https://docs.mirantis.com/docker-enterprise/v3.0/dockeree-products/dtr.html プライベートレジストリRed Hat Quay.io https://quay.io/ プライベートレジストリAmazon Elastic Container Registry(ECR) https://aws.amazon.com/jp/ecr/ プライベートレジストリAzure Container Registry(ACR) https://docs.microsoft.com/ja-jp/azure/container-registry/ プライベートレジストリGoogle Container Registry(GCR) https://cloud.google.com/container-registry?hl=ja プライベートレジストリOracle Cloud Infrastructure Container Registry (OCIR) https://www.oracle.com/jp/cloud-native/container-registry/ パブリック/プライベートレジストリHarbor https://goharbor.io/ パブリック/プライベートレジストリGitHub Container Registry https://docs.github.com/ja/packages/getting-started-with-github-container-registry/about-github-container-registryパブリックレジストリGitLab Container Registry https://docs.gitlab.com/ee/user/packages/container_registry/ パブリック/プライベートレジストリ主なイメージレジストリDocker Hubを利用して、イメージのPushとPullを実施
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・Runコンテナイメージとセキュリティ脆弱性を持つコンテナイメージをもとに起動したコンテナは脆弱性を含むため、イメージを保護する必要があるパブリックなコンテナイメージレジストリにあるコンテナイメージが安全とは限らないOSSコミュニティの公式イメージだから安心できるとも限らない
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・RunTrivyコンテナイメージの脆弱性を静的に診断するツールで、OSパッケージ情報、アプリケーションの依存関係などから脆弱性を検出、Aqua Security社がOSSとして公開しているhttps://github.com/aquasecurity/trivy主な特徴• ワンバイナリでインストール、操作が簡単• 脆弱性データベースから診断• スキャンと結果出力が速い• コンテナイメージだけでなくローイカルファイルシステムやリモートgitリポジトリなどサポート
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・RunContainerImage2022-03-03T07:19:27.161Z INFO Detected OS: debian2022-03-03T07:19:27.162Z INFO Detecting Debian vulnerabilities...2022-03-03T07:19:27.167Z INFO Number of language-specific files: 1icn.ocir.io/orasejapan/ochacafe5-3:arm (debian 11.2)====================================================Total: 4 (HIGH: 1, CRITICAL: 3)+---------+------------------+----------+-------------------+---------------+---------------------------------------+| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |+---------+------------------+----------+-------------------+---------------+---------------------------------------+| libc6 | CVE-2021-33574 | CRITICAL | 2.31-13+deb11u2 | | glibc: mq_notify does || | | | | | not handle separately || | | | | | allocated thread attributes || | | | | | -->avd.aquasec.com/nvd/cve-2021-33574 |+ +------------------+ + +---------------+---------------------------------------+| | CVE-2022-23218 | | | | glibc: Stack-based buffer overflow || | | | | | in svcunix_create via long pathnames || | | | | | -->avd.aquasec.com/nvd/cve-2022-23218 |+ +------------------+ + +---------------+---------------------------------------+| | CVE-2022-23219 | | | | glibc: Stack-based buffer || | | | | | overflow in sunrpc clnt_create || | | | | | via a long pathname || | | | | | -->avd.aquasec.com/nvd/cve-2022-23219 |+ +------------------+----------+ +---------------+---------------------------------------+| | CVE-2021-3999 | HIGH | | | glibc: Off-by-one buffer || | | | | | overflow/underflow in getcwd() || | | | | | -->avd.aquasec.com/nvd/cve-2021-3999 |+---------+------------------+----------+-------------------+---------------+---------------------------------------+$ trivy image --severity HIGH,CRITICAL イメージ名
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・RunRun / コンテナ実行以下コンテナのライフサイクルをベースに、Dockerコマンドを実行して体感
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・Run永続化データとネットワークモデルDockerにおける、コンテナホストとコンテナとの間でデータを共有する3つのマウント形式の説明と実装コンテナホストContainerファイルシステムDockerエリア メモリー一時ファイルシステムのマウントバインドマウントボリュームバインドマウント (bind mount)コンテナホストのファイル・ディレクトリをコンテナ上でマウントボリューム (volume)Dockerが管理するデータ領域をコンテナ上にマウント一時ファイルシステムのマウント (tmpfs mount)コンテナホストに保存したくないデータを一時的にデータ領域のメモリ上に保存1.永続化データ
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・Runデータボリュームコンテナ複数のコンテナ間でボリュームを共有する仕組みの説明と実装コンテナホストContainerContainer Containerdata-volume share02share01データボリュームマウント/tmp/data/tmp/data /tmp/data
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・RunDockerをベースにコンテナのネットワークモデル(none/host/bridge)の説明と実装コンテナホストContainernone• コンテナにネットワーク・インターフェイスを持たせないモデル• コンテナの内外通信が不可2.ネットワークモデルeth0コンテナホストContainerhost• コンテナがコンテナホストのネットワーク・インターフェイスを共有するモデル• コンテナホストと同じネットワーク・インターフェイスとIPを持つeth0
第3章 コンテナアプリケーション開発のライフサイクル Build・Ship・RunLinuxのブリッジ機能を利用して仮想ブリッジ上のネットワークにコンテナを作成して、NATで外部ノード、インターネットにルーティング可能bridgeコンテナホストeth0wordpress-networkbr-xxxxxPort:80 Port:3306Port:8080
第4章 コンテナオーケストレーション
4章のポイントKubernetesの概要Kubernetesが登場した経緯、実現するコンテナオーケストレーションの役割を分散処理としての捉え方を説明第4章 コンテナオーケストレーションクラウドネイティブへの取り組み2019年「KubeCon + CloudNativeCon North America 2019」で発表された事例を軸にクラウドネイティブの取り組み紹介KubernetesアーキテクチャKubernetesクラスタを構成するControl PlaneとNodeの詳解Kubernetesのリソース基本となるKubernetesのリソースとラベルやkubectlコマンドの説明Kubernetesクラスタの構築Kubernetesクラスタ構築のセットアップ手順
単一ホスト(シングルホスト)から複数ホスト(マルチホスト)第2章から第3章まで、Dockerをベースに単一ホスト上でコンテナを実行&実習第4章 コンテナオーケストレーション第4章からは、Kubernetes&Dockerをベースに複数ホスト上でコンテナを実行&実習
Kubernetes概要第4章 コンテナオーケストレーションKubernetesは、Google社内のコンテナーオーケストレーションシステムであるBorgからインスパイアされて開発されたOSSのコンテナーオーケストレーション。読み方:クーバーネーティス、クーバネティス、クバネティス等略称:K8s(Kubernetes)8文字現在は、CNCF(Cloud Native Computing Foundation)で管理され、多数の企業が参加するコミュニティで開発。
第4章 コンテナオーケストレーションKubernetesの主な役割と実現• コンテナのスケジューリング• ローリングアップデート• オートスケーリング• 死活監視• 頻繁なアプリケーションのデプロイを可能にするシステム基盤• 無停止によるリリース、高可用なシステム基盤• 負荷に応じた伸縮自在なシステム基盤主な役割 実現• コンテナの自動修復• サービスディスカバリ• ロードバランシング
第4章 コンテナオーケストレーションKubernetesは分散処理基盤Kubernetesは、複数のサーバ(仮想マシン/ベアメタル)をクラスタとして1つに束ねて、その上でコンテナというプロセス、アプリケーションを稼働させる分散処理基盤と捉える仮想マシンベアメタルKubernetesコンテナ
第4章 コンテナオーケストレーションControl PlaneとNodeクラスタの制御を受け持ち、クラスタ全体に関わる管理を担うControl Planeコンテナランタイムが稼働して、Control Planeからの指示を受けて、コンテナの起動や削除などを担う。NodeControl Plane• kube-apiserver• Etcd• kube-controller-manager• kube-scheduler• cloud-controller-managerNode• kubelet• kube-proxy• Container Runtime
第4章 コンテナオーケストレーションKubernetesのリソース• Podの概要• コンテナランタイム• デザインパターンサイドカーアンバサダーアダプターPod• ReplicaSetの概要• Deploymentの概要ReplicaSet & Deployment• Serviceの概要• サービスタイプClusterIPNodePortLoadBalancerService• Ingressの概要Ingress• PersistentVolume & PersistentVolumeClaimの概要PersistentVolume & PersistentVolumeClaim• ConfigMapの概要• Secretの概要ConfigMap & Secret• Labelの概要Label• Namespaceの概要Namespace• kubectlの概要kubectl• Reclaim PolicyDeleteRetainRecycle• Storage Class• アクセスモードRWOROXRWXこの章で、Kubernetesの基本となるリソースの概要を掴んで、次章で実際にセットアップしたKubernetesクラスタ上でオブジェクトとして作成します
第5章 Kubernetesでコンテナアプリケーションを動かすまで
5章のポイントkubectlコマンドPod、Deployment、Service、ConfigMap、Secret、Multi Container Podなど前章で概要を学んだリソースをマニフェストから登録、kubectlコマンドにおけるcreateとapplyの整理第5章 Kubernetesでコンテナアプリケーションを動かすまでKubernetesでアプリケーションを動かすNFSを作成して、実際にPersistentVolume/PersistentVolumeClaimを利用したWordPress環境の構築、WordPressPodのスケールアウト/イン、アプリケーションの削除マニフェストファイルの管理WordPress環境構築に利用した複数のマニフェストを、Helmを利用してテンプレートに置き換えてマニフェストの効率化を体感、OSSとして公開されているWordPressのHelm Chartを利用したデプロイを実践
第5章 Kubernetesでコンテナアプリケーションを動かすまでKubernetesでアプリケーションを動かすWordPress環境の構築(マニフェスト)WordPress Pod数の増減値を変更してスケールアウト/インを実施「$kubectldelete」コマンドを実行してアプリケーションの削除を行い、従来のアプリケーションのアンインストールとは違うことを体験
第5章 Kubernetesでコンテナアプリケーションを動かすまでKubernetesでアプリケーションを動かすWordPress環境の構築(独自Helm Chart)「$kubectldelete」コマンドと「$helmuninstall」コマンドでのアプリケーション削除の違いを確認マニフェストとHelmChartにおけるマニフェスト管理の効率化を確認
第5章 Kubernetesでコンテナアプリケーションを動かすまでKubernetesでアプリケーションを動かすWordPress環境の構築(OSS Helm Chart)OSS Helm Chartでのデプロイを確認、他のOSSHelm Chartを利用する場合のシミュレーション
第6章 ローカル開発の準備
6章のポイントローカル開発環境の構築これまで学んできたBuild/Ship/Runをローカル開発環境で効率的に行う方法を学ぶ第6章 ローカル開発の準備Skaffoldを利用したローカル開発環境Skaffoldを利用したローカル開発環境を構築して、ローカル開発環境におけるBuild/Ship/Runを実践
ローカル開発環境の種別第6章 ローカル開発の準備Authors: Michael Hausenblas (Red Hat), Ilya Dmitrichenko (Weaveworks) (Tuesday, May 01, 2018) Developing on Kubernetes,Kubernetes Blog.オフラインタイプ(pure off-line) プロキシタイプ(proxied)ライブタイプ(live)オンラインタイプ(pure on-line)ローカルの開発マシン(ラップトップまたはデスクトップ)内で完結アプリケーション作成やイメージのビルドはローカル開発環境、Kubernetesクラスタはリモート実装開発もKubernetesクラスタもすべてリモート
オフラインタイプ第6章 ローカル開発の準備MinikubeプロキシタイプDocker Desktopライブタイプオンラインタイプ
Skaffoldを利用したローカル開発環境第6章 ローカル開発の準備
Skaffoldを利用したローカル開発実践第6章 ローカル開発の準備DockerfileSample ApplicationSurce CodeYaml(Deployment/Service)skaffold.yamlDockerHubYaml(Deployment/Service/values)HelmapiVersion: skaffold/v2beta10kind: Configbuild:artifacts:- image: docker.io/DOCKERHUB_REPO_NAME/practice-skaffold # 変更箇所 DOCKERHUB_REPO_NAMEdocker:dockerfile: ./DockerfiletagPolicy:dateTime: {}local:push: truedeploy:helm:releases:- name: practice-skaffoldchartPath: skaffold-helmvaluesFiles: [ skaffold-helm/values.yaml ]artifactOverrides:image: docker.io/DOCKERHUB_REPO_NAME/practice-skaffold # 変更箇所 DOCKERHUB_REPO_NAMEapiVersion: skaffold/v2alpha3kind: Configbuild:artifacts:- image: DOCKERHUB_REPO_NAME/practice-skaffold # 変更箇所 DOCKERHUB_REPO_NAMEdocker:dockerfile: ./DockerfiletagPolicy:dateTime: {}local:push: truedeploy:kubectl:manifests:- practice-skaffold-*Helm & Skaffold$ skaffold dev -f skaffold.yamlBuild Ship Run
第7章 コンテナアプリケーションにおけるCI/CD
7章のポイント継続的インテグレーションと継続的デリバリーコンテナアプリケーション開発における、継続的インテグレーション(CI:Continuous Integration)と継続的デリバリー(CD:Continuous Delivery)第7章 コンテナアプリケーションにおけるCI/CDCIOpsとGitOpsコンテナアプリケーション開発のCI/CDをベースとしたCIOpsとGitOpsの整理コンテナアプリケーション開発におけるCI/CD環境Docker、Kubernetes、Helm、GitHub、GitHub Actions、Argo CDを利用したGitOps環境の構築と理解
継続的インテグレーション第7章 コンテナアプリケーションにおけるCI/CDソースコードからアプリケーションをビルドするタイミングでテストを行い、完成した成果物(アーティファクト)を保存するまでの過程を自動化して継続的に実行するプロセス継続的デリバリー継続的インテグレーションによって生み出された成果物(アーティファクト)をステージング環境や本番環境に配置し、安全にリリースするプロセス• 早期バグの発見、対処、品質向上• 自動化による検証時間の短縮• 開発者がアプリケーションロジックに専念• ヒューマンエラーの回避• リリース作業の自動化による安全(人による判断/エンドユーザ影響を抑える)• スピード(アジリティ)の向上• ヒューマンエラーの回避
CIOps第7章 コンテナアプリケーションにおけるCI/CDCIOpsは、既存のCI/CDツールと連携して、アプリケーションのデプロイを実行するPush型の手法
CIOpsにおける課題第7章 コンテナアプリケーションにおけるCI/CDデプロイする側であるCI/CDツールなどに認証情報を持たせる必要があるRead/WriteRead/WriteCI/CDCI/CDデプロイ先が多いほど認証情報の管理が煩雑になる可能性が高まる
GitOps第7章 コンテナアプリケーションにおけるCI/CDGitOpsは、コードとマニフェストのリポジトリを分けて、Kubernetesクラスタ上で稼働するGitOpsツールからマニフェストリポジトリの更新をトリガーにデプロイを実行するPull型の手法
GitOps 認証情報の内部管理第7章 コンテナアプリケーションにおけるCI/CDConfigRepositoryPull型のため認証情報は内部管理、デプロイ先のクラスタが増えても管理が容易Read OnlyReadWriteGit
GitOpsの実装と実践第7章 コンテナアプリケーションにおけるCI/CD以下の環境を構築して、サンプルアプリケーションコードの更新、プルリクエストマージ、Kubernetesクラスタへのデプロイ、そしてブラウザ確認まで、GitOpsによる自動化されたCI/CDを体験
Promotion
<詳細・お申し込み>http://oracle.com/goto/emp-oradevDeveloper Days未来を創造する最新テクノロジーを今、あなたの手に。ITに携わるすべての開発者とエンジニアに オラクル テクノロジー最新情報をお届けするオンラインイベントを2日間開催!❃━━━…‥・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・DB Day : 2022年5月20日 (金) 13:00 ~Cloud Day : 2022年5月27日 (金) 13:00 ~オンライン開催参加費:無料 (事前登録制)ハッシュタグ: #oradev22・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・‥…━━━❃
今回は MLOps がテーマです。MLOpsの全体的なフェーズを俯瞰しながら、各フェーズでどのようなことを実施すべきかを解説します。 また、MLOpsを実現するためのプラットフォームやエコシステムなども紹介します。OCHa Café 開催情報MLOps を始めよう!https://ochacafe.connpass.com/event/#ochacafe◼ 2022年6月8日(水)◼ 19:00 – 21:00 *18:50 接続開始
Thank You !!