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
Docker入門 Github: @sor4chi 𝕏 Twitter: @monica18_pr
Slide 2
Slide 2 text
今日の目標 Dockerの基本を理解する Dockerを使えるようになる Docker-Composeを使えるようになる
Slide 3
Slide 3 text
A社ではこういう問題が起きているらしい... Aさん: 初めまして、新卒で入社したAです。よろしくお願いし ます。 Bさん: はじめまして、Bです。よろしくお願いします。 Bさん: それでは、システム開発の環境構築をするために、プロ グラムを git clone して、ビルドしてください。 Aさん: はい、わかりました。 ...数十分後...
Slide 4
Slide 4 text
Aさん: すみません、ビルドが失敗してしまいました。 Bさん: えっ、どうしてですか? Aさん: どうやら、私のPCにはJavaが入っていないようです。 Bさん: そうなんですか...。じゃあ、Javaをインストールしてく ださい。 Aさん: はい、わかりました。 ...数十分後...
Slide 5
Slide 5 text
Aさん: Javaのインストールが完了しました。もう一度ビルド してみます。 Aさん: すみません、ビルドが失敗してしまいました。 Architecture mismatch というエラーが出ています。 Bさん: えっ、使ってるPCはWindowsですよね? Aさん: え、Macなんですけど... Bさん: そうなんですか...。じゃあ、Windowsでビルドしてく ださい。 Aさん: いや、用意できないですよ...!!!
Slide 6
Slide 6 text
そんな時にDockerがあれば
Slide 7
Slide 7 text
いろいろなPC環境の開発者が同じ再現環境で開発できる 開発に必要なインストール作業を全てDocker内で完結できる 総じてキャッチアップコストを下げられる
Slide 8
Slide 8 text
Dockerとは
Slide 9
Slide 9 text
Docker(ドッカー)は、コンテナ仮想化を用いてアプリケ ーションを開発・配置・実行するためのオープンプラットフ ォームである。 https://ja.wikipedia.org/wiki/Docker
Slide 10
Slide 10 text
コンテナ仮想化とは
Slide 11
Slide 11 text
コンテナ仮想化(コンテナかそうか、英: OS-level virtualization)とは、オペレーティングシステムのカーネ ルを共有しながら、ユーザ空間を分離する仮想化の手法であ る。 https://ja.wikipedia.org/wiki/OSレベルの仮想化
Slide 12
Slide 12 text
つまり、PCの中に軽量なOSの箱のようなものを仮想的に作っ てその中で作業するようにすれば、そのOSさえ共有できればど こでも動かすことができるため、環境の違いによる問題を解決 できるということ。 この箱のことを コンテナ と呼ぶ。
Slide 13
Slide 13 text
Dockerのインストール
Slide 14
Slide 14 text
Docker Desltop という、Dockerをデスクトップアプリとし て管理できるソフトが便利なので、それをインストールしま す。 https://www.docker.com/get-started/#
Slide 15
Slide 15 text
Windowsの場合は、Docker Desktopの設定項目にWSL2を有 効にする項目があるので、それが有効になっていることを確認 してください。
Slide 16
Slide 16 text
Dockerの基本的な使い方
Slide 17
Slide 17 text
まずはとてもベーシックな使い方です
Slide 18
Slide 18 text
これを実行すると というようなメッセージが表示されます。
Slide 19
Slide 19 text
dockerでは、 docker run というコマンドでコンテナを実 行します。 コンテナ「 hello-world 」を実行したということです。 じゃあ、 hello-world コンテナはどこから来たのでしょう か?
Slide 20
Slide 20 text
コンテナはローカルを参照して、なければDocker Hubからダ ウンロードするようになっており、見てわかるように自分が作 ったコンテナをDocker Hubにアップロードして共有するなん てことができます。
Slide 21
Slide 21 text
Docker Hubは レジストリ と呼ばれるもので、コンテナのイメ ージを保存・共有するためのものです。 もちろん自分自身もレジストリに自作コンテナをアップロード することができます。
Slide 22
Slide 22 text
イメージ
Slide 23
Slide 23 text
コンテナは イメージ から作られます。 イメージは、コンテナの元となるファイルシステムのようなも のです。
Slide 24
Slide 24 text
コンテナは ビルド することができて、イメージからコンテナを 作ることができます。
Slide 25
Slide 25 text
つまり Bさん: コンテナを作る -> イメージをビルド -> イメージをレ ジストリ公開 Aさん: イメージをダウンロード -> コンテナを生成 ということができます。 これでお互いの環境を統一して開発することができますね。
Slide 26
Slide 26 text
イメージのダウンロード
Slide 27
Slide 27 text
Docker Hubにはさまざまな言語やフレームワークのイメージ が公開されています。 例えば、Pythonのイメージをダウンロードしてみましょう。 このイメージは誤解を恐れずにいうと、Pythonの3.9.6がイン ストールされたUbuntu20.04のイメージです。
Slide 28
Slide 28 text
docker pull コマンドでイメージをダウンロードすること ができます。 python:3.9.6 というのは、Pythonの3.9.6のイメージを ダウンロードするという意味です。
Slide 29
Slide 29 text
docker images コマンドで、イメージがダウンロードされ ていることを確認できます。
Slide 30
Slide 30 text
実際にコンテナを実行してみましょう。
Slide 31
Slide 31 text
-it オプションは、コンテナを対話的に実行するためのオプ ションです。 こうすることで、実際にコンテナの中に入って、実際にPython がインストールされているか確認できます。
Slide 32
Slide 32 text
No content
Slide 33
Slide 33 text
すごくないですか?今までプログラミングをするために毎回手 こずっていた環境構築を、ただDocker Hubで探してきたイメ ージをダウンロードするだけで済ませることができました。
Slide 34
Slide 34 text
Dockerfile
Slide 35
Slide 35 text
イメージをビルドするためには、 Dockerfile というファイル を作成する必要があります。 Dockerfileは、イメージをビルドするための設定ファイルで す。
Slide 36
Slide 36 text
例えば、以下のようなDockerfileを作成します。
Slide 37
Slide 37 text
このDockerfileは、Ubuntu20.04のイメージをベースに、git, vim, curl, wgetをインストールするというものです。
Slide 38
Slide 38 text
このDockerfileをビルドするには、以下のコマンドを実行しま す。
Slide 39
Slide 39 text
-t オプションは、イメージに名前をつけるためのオプション です。 my-ubuntu:20.04 という名前のイメージを作成します。
Slide 40
Slide 40 text
docker images コマンドで、イメージが作成されているこ とを確認できます。
Slide 41
Slide 41 text
コンテナの実行
Slide 42
Slide 42 text
イメージができたので、コンテナを実行してみましょう。
Slide 43
Slide 43 text
もちろん Dockerfile でインストールしたgit, vim, curl, wgetも使えます。 試してみましょう
Slide 44
Slide 44 text
コンテナの停止
Slide 45
Slide 45 text
コンテナを停止するには、 docker stop コマンドを使いま す。
Slide 46
Slide 46 text
もしコンテナIDがわからない場合は、 docker ps コマンド で確認できます。
Slide 47
Slide 47 text
ボリューム
Slide 48
Slide 48 text
コンテナは、コンテナ内で作成したファイルはコンテナが削除 されると一緒に削除されてしまいます。
Slide 49
Slide 49 text
そこで、コンテナの中にファイルを作成しても、ホスト側にも 同じファイルを作成するようにするために、 ボリューム という ものを使います。 ボリュームは、コンテナの中のファイルをホスト側にマウント するためのものです。
Slide 50
Slide 50 text
ボリュームを使うには、 -v オプションを使います。
Slide 51
Slide 51 text
こうすることで、ローカル(ホスト)の設定したディレクトリに あるファイルをコンテナ側にマウントすることができます。 ちなみにマウントは、外部記憶装置などをOSに認識させる状態 のことをい い、今回の場合はホスト側のディレクトリをコンテナ側に外部 記憶装置として認識させているということです。
Slide 52
Slide 52 text
Docker Hubに自作コンテナをアップロード する
Slide 53
Slide 53 text
自作コンテナをDocker Hubにアップロードするには、 docker push コマンドを使います。 アカウント登録など諸々必要になってしまい面倒なのでやりま せん。
Slide 54
Slide 54 text
Docker-Compose
Slide 55
Slide 55 text
Docker-Composeは、複数のコンテナを一括で管理するため のツールです。 例えば、フロントエンドを React 、バックエンドを Go 、 データベースとして MySQL を使う場合など、複数の言語やフ レームワークを同時に使って開発する場合に便利なツールで す。
Slide 56
Slide 56 text
フォーマット
Slide 57
Slide 57 text
Docker-Composeは、 docker-compose.yml というファ イルに設定を記述します。
Slide 58
Slide 58 text
例: React/Go/MySQL
Slide 59
Slide 59 text
設定:build buildはDockerfileがあるディレクトリを指定します。 もし設定しない場合はDocker Composeに記述されたイメージ を参照し、あればそれを使います。
Slide 60
Slide 60 text
設定:ports portsは、ホスト側のポートとコンテナ側のポートを紐づける 設定です。 < ホスト側のポート>:< コンテナ側のポート> という形式で記 述します。 これを ポートフォワーディング と呼びます。 例えば、 80:3000 という設定は、ホスト側の80番ポートを コンテナ側の3000番ポートに紐づけるということです。 つまり、 localhost:80 にアクセスすると、コンテナ側の
Slide 61
Slide 61 text
設定:volumes volumesは、ホスト側のディレクトリとコンテナ側のディレク トリを紐づける設定です。 < ホスト側のディレクトリ>:< コンテナ側のディレクトリ> と いう形式で記述します。
Slide 62
Slide 62 text
設定:depends_on depends_onは、コンテナの依存関係を設定するための設定で す。 例えば、 backend コンテナは db コンテナが立たないと実 際に動かせないので、 db コンテナが立つまで backend コ ンテナを立てないというようなことができます。
Slide 63
Slide 63 text
設定:image imageは、イメージを指定するための設定です。 < ユーザ名>/< イメージ名>:< タグ> という形式で記述しま す。 もちろん、これは Dockerfile + build設定で記述すること もできるので、楽な方を選びましょう。
Slide 64
Slide 64 text
最近のコンテナ仮想化技術
Slide 65
Slide 65 text
k8s
Slide 66
Slide 66 text
k8sは、コンテナのオーケストレーションを行うためのツール です。 ビルドされたイメージを複数のコンテナに分散させて、負荷分 散や冗長化を行うことができます。
Slide 67
Slide 67 text
クラウドとDocker
Slide 68
Slide 68 text
クラウドサービスでは、Dockerを使ってサービスを提供してい ることが多いです。 例えば、AWSのECSやEKS、GCPのGKEなどがあります。
Slide 69
Slide 69 text
コンテナ単位でサービスをデプロイすることができれば、バー ジョン管理や負荷分散などが簡単にでき、さらにサービス同士 が疎結合になるため、サービスの拡張性が高まります。
Slide 70
Slide 70 text
まとめ
Slide 71
Slide 71 text
Dockerはコンテナ仮想化を用いてアプリケーションを開発・ 配置・実行するためのオープンプラットフォーム Docker Hubはコンテナのイメージを保存・共有するための もの Docker-Composeは複数のコンテナを一括で管理するため のツール
Slide 72
Slide 72 text
ご清聴ありがとうございました 質問などあれば気軽にどうぞ!