Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Docker入門
Search
Sor4chi
August 22, 2023
0
56
Docker入門
Sor4chi
August 22, 2023
Tweet
Share
More Decks by Sor4chi
See All by Sor4chi
Reactを極めよう
sor4chi
0
110
TypeScriptハンズオン
sor4chi
0
68
JavaScriptハンズオン
sor4chi
0
100
DI/DIPを体験してみよう
sor4chi
0
430
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1366
200k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Navigating Team Friction
lara
183
15k
Into the Great Unknown - MozCon
thekraken
33
1.5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
Facilitating Awesome Meetings
lara
50
6.1k
Optimising Largest Contentful Paint
csswizardry
33
3k
Code Reviewing Like a Champion
maltzj
520
39k
Scaling GitHub
holman
458
140k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Transcript
Docker入門 Github: @sor4chi 𝕏 Twitter: @monica18_pr
今日の目標 Dockerの基本を理解する Dockerを使えるようになる Docker-Composeを使えるようになる
A社ではこういう問題が起きているらしい... Aさん: 初めまして、新卒で入社したAです。よろしくお願いし ます。 Bさん: はじめまして、Bです。よろしくお願いします。 Bさん: それでは、システム開発の環境構築をするために、プロ グラムを git
clone して、ビルドしてください。 Aさん: はい、わかりました。 ...数十分後...
Aさん: すみません、ビルドが失敗してしまいました。 Bさん: えっ、どうしてですか? Aさん: どうやら、私のPCにはJavaが入っていないようです。 Bさん: そうなんですか...。じゃあ、Javaをインストールしてく ださい。 Aさん:
はい、わかりました。 ...数十分後...
Aさん: Javaのインストールが完了しました。もう一度ビルド してみます。 Aさん: すみません、ビルドが失敗してしまいました。 Architecture mismatch というエラーが出ています。 Bさん: えっ、使ってるPCはWindowsですよね?
Aさん: え、Macなんですけど... Bさん: そうなんですか...。じゃあ、Windowsでビルドしてく ださい。 Aさん: いや、用意できないですよ...!!!
そんな時にDockerがあれば
いろいろなPC環境の開発者が同じ再現環境で開発できる 開発に必要なインストール作業を全てDocker内で完結できる 総じてキャッチアップコストを下げられる
Dockerとは
Docker(ドッカー)は、コンテナ仮想化を用いてアプリケ ーションを開発・配置・実行するためのオープンプラットフ ォームである。 https://ja.wikipedia.org/wiki/Docker
コンテナ仮想化とは
コンテナ仮想化(コンテナかそうか、英: OS-level virtualization)とは、オペレーティングシステムのカーネ ルを共有しながら、ユーザ空間を分離する仮想化の手法であ る。 https://ja.wikipedia.org/wiki/OSレベルの仮想化
つまり、PCの中に軽量なOSの箱のようなものを仮想的に作っ てその中で作業するようにすれば、そのOSさえ共有できればど こでも動かすことができるため、環境の違いによる問題を解決 できるということ。 この箱のことを コンテナ と呼ぶ。
Dockerのインストール
Docker Desltop という、Dockerをデスクトップアプリとし て管理できるソフトが便利なので、それをインストールしま す。 https://www.docker.com/get-started/#
Windowsの場合は、Docker Desktopの設定項目にWSL2を有 効にする項目があるので、それが有効になっていることを確認 してください。
Dockerの基本的な使い方
まずはとてもベーシックな使い方です
これを実行すると というようなメッセージが表示されます。
dockerでは、 docker run というコマンドでコンテナを実 行します。 コンテナ「 hello-world 」を実行したということです。 じゃあ、 hello-world
コンテナはどこから来たのでしょう か?
コンテナはローカルを参照して、なければDocker Hubからダ ウンロードするようになっており、見てわかるように自分が作 ったコンテナをDocker Hubにアップロードして共有するなん てことができます。
Docker Hubは レジストリ と呼ばれるもので、コンテナのイメ ージを保存・共有するためのものです。 もちろん自分自身もレジストリに自作コンテナをアップロード することができます。
イメージ
コンテナは イメージ から作られます。 イメージは、コンテナの元となるファイルシステムのようなも のです。
コンテナは ビルド することができて、イメージからコンテナを 作ることができます。
つまり Bさん: コンテナを作る -> イメージをビルド -> イメージをレ ジストリ公開 Aさん: イメージをダウンロード
-> コンテナを生成 ということができます。 これでお互いの環境を統一して開発することができますね。
イメージのダウンロード
Docker Hubにはさまざまな言語やフレームワークのイメージ が公開されています。 例えば、Pythonのイメージをダウンロードしてみましょう。 このイメージは誤解を恐れずにいうと、Pythonの3.9.6がイン ストールされたUbuntu20.04のイメージです。
docker pull コマンドでイメージをダウンロードすること ができます。 python:3.9.6 というのは、Pythonの3.9.6のイメージを ダウンロードするという意味です。
docker images コマンドで、イメージがダウンロードされ ていることを確認できます。
実際にコンテナを実行してみましょう。
-it オプションは、コンテナを対話的に実行するためのオプ ションです。 こうすることで、実際にコンテナの中に入って、実際にPython がインストールされているか確認できます。
None
すごくないですか?今までプログラミングをするために毎回手 こずっていた環境構築を、ただDocker Hubで探してきたイメ ージをダウンロードするだけで済ませることができました。
Dockerfile
イメージをビルドするためには、 Dockerfile というファイル を作成する必要があります。 Dockerfileは、イメージをビルドするための設定ファイルで す。
例えば、以下のようなDockerfileを作成します。
このDockerfileは、Ubuntu20.04のイメージをベースに、git, vim, curl, wgetをインストールするというものです。
このDockerfileをビルドするには、以下のコマンドを実行しま す。
-t オプションは、イメージに名前をつけるためのオプション です。 my-ubuntu:20.04 という名前のイメージを作成します。
docker images コマンドで、イメージが作成されているこ とを確認できます。
コンテナの実行
イメージができたので、コンテナを実行してみましょう。
もちろん Dockerfile でインストールしたgit, vim, curl, wgetも使えます。 試してみましょう
コンテナの停止
コンテナを停止するには、 docker stop コマンドを使いま す。
もしコンテナIDがわからない場合は、 docker ps コマンド で確認できます。
ボリューム
コンテナは、コンテナ内で作成したファイルはコンテナが削除 されると一緒に削除されてしまいます。
そこで、コンテナの中にファイルを作成しても、ホスト側にも 同じファイルを作成するようにするために、 ボリューム という ものを使います。 ボリュームは、コンテナの中のファイルをホスト側にマウント するためのものです。
ボリュームを使うには、 -v オプションを使います。
こうすることで、ローカル(ホスト)の設定したディレクトリに あるファイルをコンテナ側にマウントすることができます。 ちなみにマウントは、外部記憶装置などをOSに認識させる状態 のことをい い、今回の場合はホスト側のディレクトリをコンテナ側に外部 記憶装置として認識させているということです。
Docker Hubに自作コンテナをアップロード する
自作コンテナをDocker Hubにアップロードするには、 docker push コマンドを使います。 アカウント登録など諸々必要になってしまい面倒なのでやりま せん。
Docker-Compose
Docker-Composeは、複数のコンテナを一括で管理するため のツールです。 例えば、フロントエンドを React 、バックエンドを Go 、 データベースとして MySQL を使う場合など、複数の言語やフ
レームワークを同時に使って開発する場合に便利なツールで す。
フォーマット
Docker-Composeは、 docker-compose.yml というファ イルに設定を記述します。
例: React/Go/MySQL
設定:build buildはDockerfileがあるディレクトリを指定します。 もし設定しない場合はDocker Composeに記述されたイメージ を参照し、あればそれを使います。
設定:ports portsは、ホスト側のポートとコンテナ側のポートを紐づける 設定です。 < ホスト側のポート>:< コンテナ側のポート> という形式で記 述します。 これを ポートフォワーディング
と呼びます。 例えば、 80:3000 という設定は、ホスト側の80番ポートを コンテナ側の3000番ポートに紐づけるということです。 つまり、 localhost:80 にアクセスすると、コンテナ側の
設定:volumes volumesは、ホスト側のディレクトリとコンテナ側のディレク トリを紐づける設定です。 < ホスト側のディレクトリ>:< コンテナ側のディレクトリ> と いう形式で記述します。
設定:depends_on depends_onは、コンテナの依存関係を設定するための設定で す。 例えば、 backend コンテナは db コンテナが立たないと実 際に動かせないので、 db
コンテナが立つまで backend コ ンテナを立てないというようなことができます。
設定:image imageは、イメージを指定するための設定です。 < ユーザ名>/< イメージ名>:< タグ> という形式で記述しま す。 もちろん、これは Dockerfile
+ build設定で記述すること もできるので、楽な方を選びましょう。
最近のコンテナ仮想化技術
k8s
k8sは、コンテナのオーケストレーションを行うためのツール です。 ビルドされたイメージを複数のコンテナに分散させて、負荷分 散や冗長化を行うことができます。
クラウドとDocker
クラウドサービスでは、Dockerを使ってサービスを提供してい ることが多いです。 例えば、AWSのECSやEKS、GCPのGKEなどがあります。
コンテナ単位でサービスをデプロイすることができれば、バー ジョン管理や負荷分散などが簡単にでき、さらにサービス同士 が疎結合になるため、サービスの拡張性が高まります。
まとめ
Dockerはコンテナ仮想化を用いてアプリケーションを開発・ 配置・実行するためのオープンプラットフォーム Docker Hubはコンテナのイメージを保存・共有するための もの Docker-Composeは複数のコンテナを一括で管理するため のツール
ご清聴ありがとうございました 質問などあれば気軽にどうぞ!