Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンテナ技術入門/Container tech intro

__pkmiya
March 09, 2024
47

コンテナ技術入門/Container tech intro

この資料は,2024年3月に開催される「高専テクノゼミ/実践教育プログラム vol.2」の技術LT「コンテナ技術入門」にて発表した際に使用したものです.

This document was used in a presentation at the technical LT "Introduction to Container Technology" of "Techno Seminar/Practical Education Program vol.2" to be held in March 2024.

__pkmiya

March 09, 2024
Tweet

Transcript

  1. OLIENT TECH, inc. All Rights Reserved アジェンダ はじめに おわりに ハンズオン

    Dockerを使ってみよう! 4 3 2 1 応用例 Dockerをどう使うの? メリット Dockerの何がうれしいの? 基礎知識 コンテナ,Dockerってなあに?
  2. OLIENT TECH, inc. All Rights Reserved アジェンダ はじめに おわりに ハンズオン

    Dockerを使ってみよう! 4 3 2 1 応用例 Dockerをどう使うの? メリット Dockerの何がうれしいの? 基礎知識 コンテナ,Dockerってなあに?
  3. OLIENT TECH, inc. All Rights Reserved はじめに 4 / 28

    ◼ 名前 宮田優作 ◼ 所属 九州大学 工学部 電気情報工学科 3年 弊社 RE Bridge Frontend Engineer 他社 Full-stack Engineer ◼ 熊本高専 機械系学科 ◼ OLIENT TECH 英語担当(TOEIC L&R 970) ◼ スタバ/邦ロック 自己紹介 https://pkmiya.net
  4. OLIENT TECH, inc. All Rights Reserved はじめに ◼ コンテナ技術のざっくりとした説明 

    しくみ、何がうれしいのか  特徴、そのメリット、それを生かした使い方  実際にどう使うのか ◼ 後輩に伝えたいこと  コンテナを使いこなすことが本業ではない  エンジニアである以上、学びにきりはない LTの位置づけ https://pkmiya.net 扱う内容 ◼ コンテナ技術のくわしい説明  イメージ、ネットワーク、ディスクのしくみ  コンテナランタイム  セキュリティリスクとその対策 ◼ 実務の実装に関すること  実務における採用状況  パイプラインへの統合  コンテナオーケストレーションの実装 扱わない内容 本LTでは、「実践教育プログラム」の一環として、「コンテナ技術の入門」をご紹介します 5 / 28
  5. OLIENT TECH, inc. All Rights Reserved ◼ データやプログラムを 「 隔離

    」 できるしくみ コンテナ技術とは はじめに イントロダクション なぜコンテナ技術が重要か ◼ 同居だと大変!「 競合 問題を避けるため」 == 18.2 >= 19 バージョンの競合 リソースの競合 システムが動作可能な条件が異なる 同じリソースに対して読取・書込 × ◼ 自分は動いたのに!「 一貫性 をもたせるため」 開発者どうし 環境どうし OSやエディタによって動作が異なる ローカルと本番で動作が異なる 〇 × 〇 × × なんだか便利そうだね 6 / 28
  6. OLIENT TECH, inc. All Rights Reserved アジェンダ はじめに おわりに ハンズオン

    Dockerを使ってみよう! 4 3 2 1 応用例 Dockerをどう使うの? メリット Dockerの何がうれしいの? 基礎知識 コンテナ,Dockerってなあに?
  7. OLIENT TECH, inc. All Rights Reserved 基礎知識 コンテナとは 仮想化技術のひとつ ◼

    仮想化技術には種類がある ハイパーバイザ型 〇 速い、リソースを多く使える × OSが共存できない ハードウェア ハイパーバイザ ハードウェア ホストOS 仮想化ソフト 仮想マシン ホストOS型 〇 OSが共存できる × 動作が遅い ハードウェア ホストOS コンテナ型 〇 OSが共存できる、軽量 × ゲストOSのカーネルが必要 コンテナエンジン コンテナ 仮想マシン アプリ ゲストOS 仮想化レイヤ https://www.ap-siken.com/kakomon/03_aki/q14.html 8 / 28
  8. OLIENT TECH, inc. All Rights Reserved 基礎知識 dockerとは コンテナ型ソフトウェアのひとつ ◼

    ほかに、PodmanやgVisorがある  いずれもOCIという仕様に準拠しており、高い互換性をもつ ◼ OSのカーネルが別途必要  周辺の面倒な環境構築をDocker Desktopがやってくれる  Windowsでは、Docker Desktop + 仮想環境(HyperV) + Linux用サブシステム(WSL)  Macでは、Docker Desktopに仮想環境(HyperKit)が含まれる https://www.docker.com/ja-jp/ 新アイコン 旧アイコン くじらです 9 / 28
  9. OLIENT TECH, inc. All Rights Reserved アジェンダ はじめに おわりに ハンズオン

    Dockerを使ってみよう! 4 3 2 1 応用例 Dockerをどう使うの? メリット Dockerの何がうれしいの? 基礎知識 コンテナ,Dockerってなあに?
  10. OLIENT TECH, inc. All Rights Reserved メリット dockerとは 根幹となる性質 「隔離可能」

    独立している docker engine containers 複数のコンテナを載せたり、 一部のコンテナだけ差し替えたり 修正できたりする イメージ化できる 「実体」に対する「概念」 イメージ自体は、コードとして 記述/配布/持ち運びが可能 image container docker commit docker run カーネルが不要 軽量で、 OSを自由に行き来できる OSの周辺部分 11 / 28
  11. OLIENT TECH, inc. All Rights Reserved メリット dockerとは 特徴からみた、メリットと用途 (1/3)

    独立している docker engine containers 複数のコンテナを載せたり、 一部のコンテナだけ差し替えたり 修正できたりする ◼ 性質  他のコンテナやホストマシンに干渉/依存しない ◼ メリット  セキュリティを保てる、相互依存性低下 ◼ 例  新バージョンの実験につかう、複数のサーバをたてる 12 / 28
  12. OLIENT TECH, inc. All Rights Reserved メリット dockerとは 特徴からみた、メリットと用途 (2/3)

    イメージ化できる 「実体」に対する「概念」 イメージ自体は、コードとして 記述/配布/持ち運びが可能 image container docker commit docker run ◼ 性質  一度コードとして記述すれば同じ環境を再現できる ◼ メリット  移植が容易、開発効率が高い ◼ 例  全員に同じ開発環境を提供する 13 / 28
  13. OLIENT TECH, inc. All Rights Reserved メリット dockerとは 特徴からみた、メリットと用途 (3/3)

    カーネルが不要 軽量で、 OSを自由に行き来できる OSの周辺部分 ◼ 性質  仮想マシンよりはるかに軽量、スケーラビリティが高い ◼ メリット  コスト削減 ◼ 例  コンテナ・オーケストレーション(後述) 14 / 28
  14. OLIENT TECH, inc. All Rights Reserved アジェンダ はじめに おわりに ハンズオン

    Dockerを使ってみよう! 4 3 2 1 応用例 Dockerをどう使うの? メリット Dockerの何がうれしいの? 基礎知識 コンテナ,Dockerってなあに?
  15. OLIENT TECH, inc. All Rights Reserved メリット dockerとは dockerで用いられる他の技術 イメージ

    実体(コンテナ)に対する「概念」 コードとして記述、配布や 持ち運びが可能 image container docker commit docker run ボリューム コンテナは消したりすることが 多いので、別の場所にマウントし そこからデータをもってくる container Hostなど mount ネットワーク コンテナ同士を通信させるため の仮想的なネットワーク Communicate via network 16 / 28
  16. OLIENT TECH, inc. All Rights Reserved メリット dockerとは CI/CD ◼

    プロダクトをよりよくするための考え方/技術/プロセス ◼ Continuous { Integration, Delivery, Deployment} ◼ テストフェーズにおけるメリット  環境のずれがないため再現性が高い、テストの自動化によるコスト削減 ◼ 提供フェーズにおけるメリット  品質の高い+スピーディなサービス提供を実現可能 コンテナ・オーケストレーション ◼ 複数のサーバにわたる複数のコンテナを一括して管理すること ◼ メリット  コンテナは容易に数を増減できる  需要に応じてそうすれば、可用性を保ったままコストの削減が可能 ◼ kubernetesというソフトウェアを用いて実現 複数のコンテナを統括できる 開発と運用のサイクル (DevOps)をよりよく回せる 17 / 28
  17. OLIENT TECH, inc. All Rights Reserved アジェンダ はじめに おわりに ハンズオン

    Dockerを使ってみよう! 4 3 2 1 応用例 Dockerをどう使うの? メリット Dockerの何がうれしいの? 基礎知識 コンテナ,Dockerってなあに?
  18. OLIENT TECH, inc. All Rights Reserved ハンズオン 環境構築 ◼ Windowsにおけるdockerの環境構築方法をご紹介

     Macは頑張ってください 1. Windowsのアップデート バージョンが1903/1909以降であることを確認 2. WSLの有効化 1. 「コントロールパネル」→「プログラム」→「プログラムと機能」→「Windowsの機能の有効化または無効化」 2. 「Linux用Windowsサブシステム」と「仮想マシンプラットフォーム」にチェックを入れる 3. PCの再起動をおこなうよう要求されるので従う 3. Linuxカーネルのダウンロード 以下のリンクにアクセスし、msiファイルをダウンロード。管理者として実行する https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi 4. Docker Desktopのダウンロード 以下のリンクにアクセスし、Docker Desktop for Windowsのインストーラをダウンロード。実行する https://docs.docker.com/desktop/install/windows-install/ Configurationでは、2つの設定両方にチェックを入れる。インストールが終わったら再起動する 19 / 28
  19. OLIENT TECH, inc. All Rights Reserved ハンズオン 環境構築 5. Dockerの起動を確認

    タスクバーのタスクトレイにDockerのアイコンがある=Dockerがバックグラウンドで起動していることを確認 また、Dockerを開いて、画面左下のステータスが「Docker Running」であることを確認 6. Dockerの実行テスト 「Win」または「Win+R」の後、「cmd」と入力し、Enterを押す。コマンドプロンプトを開く 以下のコマンドを実行し、dockerのバージョンが表示されることを確認する $ docker -v その他 1. VS Codeのダウンロード 2. ハンズオン用レポジトリのクローン $ git clone --filter=blob:none --sparse https://github.com/pkmiya/handson.git $ cd ./handson $ git sparse-checkout set ./lt-docker $ code . 留意事項  示した方法でうまく環境構築できなかったり、エラーが発生することがあります。がんばりましょう 20 / 28
  20. OLIENT TECH, inc. All Rights Reserved ハンズオン 1. docker run

    ◼ ここで学ぶこと  docker run(コンテナを作成するコマンド)、コンテナどうしの接続方法 ◼ ハンズオンの概要  MySQLとWordPressコンテナを組み合わせ、ブログサイト用のdockerシステムを構築する  ソースコード: https://github.com/pkmiya/handson/blob/master/lt-docker/1_docker-run/run.sh 1. ネットワークの作成 $ docker network create wordpress000net1 2. MySQLコンテナの作成 $ docker run --name mysql000ex11 -dit ¥ --net=wordpress000net1 ¥ -e MYSQL_ROOT_PASSWORD=myrootpass ¥ -e MYSQL_DATABASE=wordpress000db ¥ -e MYSQL_USER=wordpress000kun ¥ -e MYSQL_PASSWORD=wkunpass ¥ mysql ¥ --character-set-server=utf8mb4 ¥ --collation-server=utf8mb4_unicode_ci ¥ --default-authentication-plugin=mysql_native_password [Tips] - $から始まるものは全てコマンド。ターミナル上に入力する($は入力しない) - 左のようなコマンドは、それぞれ「1行に全て」入力する必要がある - コマンド途中での改行に対応するため、バックスラッシュ/(日本語環境では¥)を入れた 21 / 28
  21. OLIENT TECH, inc. All Rights Reserved ハンズオン 1. docker run

    3. WordPressコンテナの作成 $ docker run --name wordpress000ex12 -dit ¥ --net=wordpress000net1 ¥ -p 8085:80 ¥ -e WORDPRESS_DB_HOST=mysql000ex11 ¥ -e WORDPRESS_DB_NAME=wordpress000db ¥ -e WORDPRESS_DB_USER=wordpress000kun ¥ -e WORDPRESS_DB_PASSWORD=wkunpass ¥ wordpress 4. 動作確認 https://localhost:8085 にアクセス WordPressの初期画面が表示されれば成功 お疲れ様でした!広告収入で一発稼ごう。 [Tips] - 長ったらしいコマンドが大変だったと思います - ハンズオン3では、この作業をファイルに手順化する方法を学びます 22 / 28
  22. OLIENT TECH, inc. All Rights Reserved ハンズオン 2. Dockerfile ◼

    ここで学ぶこと  ソースコードの記述からイメージを作成する方法(Dockerfile -> イメージ -> コンテナ) ◼ ハンズオンの概要  「乱数を生成してその平均値を表示するPythonファイルを実行」する環境を構築する  ソースコード: https://github.com/pkmiya/handson/tree/master/lt-docker/2_Dockerfile 3. ファイル./Dockerfileの作成 # ベースイメージ FROM python:3.10.12-slim # メタ情報の追加 LABEL version="1.0" LABEL description="Hello, Dockerfile!" # 作業ディレクトリの指定 WORKDIR /usr/src/app # 必要なパッケージのインストール COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # ホストマシンの現在のディレクトリからコンテナ内の作業ディレクトリへファイルをコピー COPY app.py . # コンテナ起動時に実行するコマンド CMD ["python", "./app.py"] 1. ファイル./requirements.txtの作成 numpy==1.26.2 2. ファイル./app.pyの作成 import numpy as np # 0 から 9 までの乱数で構成される 10 要素の配列を生成 array = np.random.randint(0, 10, 10) # 配列の平均値を計算 mean = np.mean(array) # 結果の出力 print(f"The mean of the array is: {mean}") [Tips] - 「./」は、現在のディレクトリ直下に各ファイルを作成することを意味します - たとえば、cmdで「copy nul ./app.py」とすれば、空ファイルを作成できます - 「#」は、コメントを意味します 23 / 28
  23. OLIENT TECH, inc. All Rights Reserved ハンズオン 2. Dockerfile ◼

    ここで学ぶこと  ソースコードの記述からイメージを作成する方法(Dockerfile -> イメージ -> コンテナ) ◼ ハンズオンの概要  「乱数を生成してその平均値を表示するPythonファイルを実行」する環境  ソースコード: https://github.com/pkmiya/handson/tree/master/lt-docker/2_Dockerfile 7. お片付け # 全コンテナの情報を表示し、削除したいコンテナのIDを確認 $ docker ps -a # いま確認したIDの冒頭2~3桁を指定して、コンテナを削除。たとえば、IDがg43…ならば、 $ docker container rm g43 # ストレージの節約のため、イメージも削除 $ docker image rm study-dockerfile 4. イメージのビルド(Dockerfile -> イメージ) # ./dockerfileをもとに、 # study-dockerfileというイメージを作成 $ docker build -t study-dockerfile . 5. コンテナの作成・起動(イメージ -> コンテナ) # study-dockerfileというイメージをもとに、 # 同じ名前のコンテナを作成・起動 $ docker run study-dockerfile 6. 動作確認 上記コマンドを叩いてしばらくして、以下がターミナルに表示されれば成功 The mean of the array is: {数値} 24 / 28
  24. OLIENT TECH, inc. All Rights Reserved ハンズオン 3. docker-compose ◼

    ここで学ぶこと  ソースコードの記述を用いて、ひとつのコマンドで、複数のコンテナ・ドライブ・ネットワークの操作を行う方法 ◼ ハンズオンの概要  ハンズオン①(MySQLとWordPressのコンテナ環境)を一発で起動・削除できる環境  ソースコード:https://github.com/pkmiya/handson/tree/master/lt-docker/3_docker-compose 1. ファイル./docker-compose.ymlの作成 長いので、以下リンクを参照 https://github.com/pkmiya/handson/blob/master/lt-docker/3_docker-compose/docker-compose.yml 2. コンテナシステムの作成・構築 $ docker compose -f ./docker-compose.yml up –d 3. 動作確認 https://localhost:8085 にアクセス WordPressの初期画面が表示されれば成功 4. コンテナシステムのストップ $ docker compose -f ./docker-compose.yml down 25 / 28
  25. OLIENT TECH, inc. All Rights Reserved アジェンダ はじめに おわりに ハンズオン

    Dockerを使ってみよう! 4 3 2 1 応用例 Dockerをどう使うの? メリット Dockerの何がうれしいの? 基礎知識 コンテナ,Dockerってなあに?
  26. OLIENT TECH, inc. All Rights Reserved おわりに まとめ 伝えたいこと=目的・目標を見据えた学習を ◼

    コンテナを使いこなすことが本業ではない  コンテナは奥が深い。インフラエンジニアになりたい/インフラを構築する必要があるなら深く学ぶべき  そうでないなら、しくみだけ知っておいてほしい。(プロダクトのコードを書く時間の方が多いから)  実務においては、使いこなせればリードエンジニアとして活躍できる ◼ エンジニアである以上、学びにきりはない  コンテナ技術理解に必要な周辺知識:コンピュータシステム、Linux、ネットワーク、ファイルシステム…  焦って一気にぜんぶ学ぼうとする必要はない  比べるべき対象は他人ではなく、「過去の自分」  「好き/興味」を一番大切にしておいてほしい ◼ 好きや興味からコードを書く例  大学の実験。コンパイル用のLinuxコマンドが多く、複雑で面倒  シェルスクリプトにすればまとめて実行できると知り、それを実装 https://github.com/pkmiya/software-exp/blob/master/software-exp-II-III/3-2_individual-task/run.sh 27 / 28
  27. OLIENT TECH, inc. All Rights Reserved おわりに ご清聴ありがとうございました 参考文献 ◼

    「Docker & Kubernetesのきほんのきほん」マイナビ出版、小笠原種高 著、2023年10月第11刷 ◼ 「開発エンジニアのためのDocker絵とき入門」秀和システム、鈴木亮 著、2024年1月第1刷 その他 ◼ わたしについて https://pkmiya.net/ ◼ 過去の登壇  2022年10月「後輩に伝えたいこと」 https://speakerdeck.com/pkmiya/hou-bei-nichuan-etaikoto  2023年2月「マスタリングWord/PowerPoint」 https://speakerdeck.com/pkmiya/powerpoint また会おう 28 / 28 もっとdockerを学びたい人へ ◼ 「Dockerというスゴイ奴をしっかりと理解する」Zenn、@hiddy、2022年10月 https://zenn.dev/hiddy0329/articles/822aa3f0903f3f ◼ 「Dockerハンズオン」Speakerdeck, @suzuki-hoge, 2024年3月 https://speakerdeck.com/suzukihoge/docker-hands-on-d50e3e1d-e669-4cb8-a143-cd1242a6f103 ◼ 「サーバ ーとは何かを理解して、コンテナ1つで 実行しよう」Speakerdeck, @sadnessOjisan, 2024年3月 https://speakerdeck.com/sadnessojisan/sahatohahe-kawoli-jie-site-kontena1tuteshi-xing-siyou-phperkaigi2024?slide=115