
マイケル
みなさんこんにちは!
マイケルです!
マイケルです!

エレキベア
こんにちクマ〜〜

マイケル
今日はみんな大好き Docker を触ってみるよ!

エレキベア
Dockerってクジラのキャラのやつクマね
どんな機能なのクマ?
どんな機能なのクマ?

マイケル
説明しよう!
Dockerとは・・・
Dockerとは・・・
Dockerとは
- アプリケーションやOSの開発・配備を行うためのコンテナを利用した基盤ソフトウェア

エレキベア
よく分からないクマ・・・。

マイケル
簡単にいうとコンテナという技術を利用して環境を構築できる仕組みみたいな感じだよ!
アプリケーションと実行環境を同梱してデプロイできるから、ポータビリティに優れているのが特徴なんだ!
アプリケーションと実行環境を同梱してデプロイできるから、ポータビリティに優れているのが特徴なんだ!

エレキベア
アプリケーションや環境をまとめて配布できたりするわけクマね

マイケル
ほぼ同じ環境を別のマシンでも構築できるから、本番環境への移行もコストが少なくて済むんだ!
他にも、以下のような特徴があるよ!
他にも、以下のような特徴があるよ!
[メリット]
・数行の構成ファイルとコマンドを1つ叩くだけで同等の環境が再現できる。
・コンテナ型仮想化技術を利用し、オーバーヘッドが少ない。
・コンテナにアプリケーションと実行環境を同梱してデプロイできる。
[デメリット]
・あくまでアプリケーションを入れるための箱であるため、OSとしての振る舞いを再現することはできない。
そのため起動するホストによっては影響を受けてしまうこともある

エレキベア
だんだん気になってきたクマ
使ってみるクマ!
使ってみるクマ!

マイケル
それじゃ早速触ってみよう!
参考書籍

マイケル
Dockerの使い方を勉強するにあたって参考にした書籍はこちらです!

マイケル
ハンズオンで実際に手を動かしながら学習できるので中々楽しいです!
Kubernetesの内容もしっかり書かれているので、そちらが気になる方にもおすすめです!
Kubernetesの内容もしっかり書かれているので、そちらが気になる方にもおすすめです!

エレキベア
内容もかなりみっちりしているクマね
Dockerの使い方

マイケル
Dockerコンテナを起動するまでのフローはこんな感じ!

マイケル
まず、Dockerfileというファイルを作成 して
ビルドすることでDockerImageを作成 します!
そして DockerImageを元にコンテナを起動 するという流れになります!
ビルドすることでDockerImageを作成 します!
そして DockerImageを元にコンテナを起動 するという流れになります!

エレキベア
ビルドして実行クマね
Dockerイメージのビルド

マイケル
まずはビルド処理から!
ビルドの元になるDockerfileは下記のように記述することができます!
ビルドの元になるDockerfileは下記のように記述することができます!

マイケル
こちらの記述は下記のような内容になります!
詳細を知りたい方はDockerの公式リファレンスを参照してください!
詳細を知りたい方はDockerの公式リファレンスを参照してください!
1. busyboxのベースイメージを指定
2. 環境変数fooに「/bar」を設定
3. 「/bar」を作業ディレクトリに設定
4. ホストのカレントディレクトリファイルを「/bar」に追加
5. 「/bar」のファイルを「/quux」にコピー

エレキベア
こんな感じで環境を構築できるクマね〜〜

マイケル
作成したイメージは下記のようなコマンドで操作することができます!

マイケル
そして作成したイメージは下記コマンドでDockerHub(※)に公開することができます!
公開後はDockerfile無しでpullコマンドで取得できるようになります!
公開後はDockerfile無しでpullコマンドで取得できるようになります!
※)コンテナをアップロードして公開・共有できるサービス
Docker Hub
Dockerコンテナの操作

マイケル
イメージをビルド又は取得したら、コンテナを起動しましょう!
下記コマンドで起動することができます!
下記コマンドで起動することができます!

マイケル
起動したら下記のようなコマンドで操作することができます!
こちらも詳細は公式リファレンスを参照しましょう!
こちらも詳細は公式リファレンスを参照しましょう!

エレキベア
これで大体操作できるクマね
使ってみよう!

マイケル
それじゃ試しにコンテナ起動までやってみましょう!
今回は下記Pythonスクリプトを動かす環境を構築します!
今回は下記Pythonスクリプトを動かす環境を構築します!
↑Excelファイルの内容を出力するPythonスクリプト
↑読み込むExcelファイル

エレキベア
Excelファイルを読み込んで出力するプログラムクマね
ディレクトリ構成

マイケル
ディレクトリ構成は下記の通り!
先ほどのpythonファイル、Excelファイルに加えてDockerfileを作成しましょう!
先ほどのpythonファイル、Excelファイルに加えてDockerfileを作成しましょう!
Dockerイメージのビルド

マイケル
Dockerfileを下記のように記述してビルドします!
ベースイメージは「python:3.9」、そしてExcel読み込みのために「openpyxl」というライブラリのインストールコマンドも記述しています!
ベースイメージは「python:3.9」、そしてExcel読み込みのために「openpyxl」というライブラリのインストールコマンドも記述しています!

マイケル
これで「sample/pythonpj01」という名前でイメージが作成されました!
↑イメージファイルの作成
Dockerコンテナの起動

マイケル
そして次はコンテナの起動です!
下記のようにオプションを指定して起動しましょう!
下記のようにオプションを指定して起動しましょう!

マイケル
–mountオプションでフォルダを紐づけることで、pythonファイルとExcelファイルを同期しています!
↑コンテナの起動

マイケル
これでコンテナを起動できました!
下記コマンドでコンテナのターミナルに入り、pythonファイルを実行してみましょう!
下記コマンドでコンテナのターミナルに入り、pythonファイルを実行してみましょう!
↑コンテナ内でのコマンド実行

マイケル
無事、Excelファイル内の「ハローマイケル」が表示されました!

エレキベア
(それは何なんだクマ・・・。)
Docker Composeの使い方

マイケル
Dockerの基本的な使い方は以上ですが、複雑な環境を構築するためには複数のコンテナを起動する必要があります!

マイケル
そこで登場するのが docker compose です!
docker composeとは
- Dockerコンテナを複数起動できる仕組みのこと

マイケル
docker-compose.yml というファイルを用意することで複数のコンテナを同時に起動・停止できます!

エレキベア
それは便利クマ〜〜〜
Docker Composeの操作

マイケル
docker-compose.ymlは下記のように記述できます!

マイケル
処理内容は下記の通り!
詳細は公式リファレンスを参照しましょう!
詳細は公式リファレンスを参照しましょう!
[webコンテナ]
1. カレントディレクトリのDockerfileをビルド
2. ポートを「5000:5000」に設定
[redisコンテナ]
1. 「redis:alpine」ベースイメージを使用

マイケル
コンテナの操作コマンドは以下の通りです!

エレキベア
簡単クマ〜〜〜
使ってみよう!

マイケル
こちらも試しに触ってみましょう!
今回は下記のようなSQLを発行するPythonスクリプトを実行します!
今回は下記のようなSQLを発行するPythonスクリプトを実行します!

マイケル
Python環境に加えてMySQL環境もコンテナとして作成する必要があります!
これをdocker-compose.ymlファイルに記述して起動しましょう!
これをdocker-compose.ymlファイルに記述して起動しましょう!

エレキベア
よくある構成クマね
ディレクトリ構成

マイケル
ディレクトリは下記のような構成にします!
Dockerfileの作成

マイケル
Dockerfileは下記の通りです!
今度はmysqlclientというライブラリをインストールしましょう!
今度はmysqlclientというライブラリをインストールしましょう!

マイケル
そしてdocker-compose.ymlの記述は以下になります!
Python環境とMySQL環境で二つコンテナを記述しましょう!
Python環境とMySQL環境で二つコンテナを記述しましょう!
Dockerコンテナの起動

マイケル
ファイルの準備ができたら下記コマンドで起動しましょう!
↑コンテナの起動

マイケル
そしてMySQLに接続できる確認してデータを作成します!
↑MySQLの接続

マイケル
最後にPythonファイルの実行!
検索結果が表示されれば成功です!!
検索結果が表示されれば成功です!!
↑Pythonファイルの実行

エレキベア
やったクマ〜〜〜〜〜
実践的な使い方

マイケル
使い方は一通り学んだので、少し実践的な使い方をしてみます!
以前つくったLaravelプロジェクトをDocker環境に移行 してみます!
以前つくったLaravelプロジェクトをDocker環境に移行 してみます!
以前作ったシステム:

エレキベア
これは楽しみクマね〜〜

マイケル
環境を構築するにあたっては、下記サイトを参考にさせていただきました!
詳細を知りたい方は是非みてみてくださいね!
詳細を知りたい方は是非みてみてくださいね!
参考:
docker-composee
Laravelの開発環境を整える方法とその解説

エレキベア
分かりやすい記事クマ〜〜
LaravelプロジェクトのDocker環境化
ディレクトリ構成

マイケル
ディレクトリ構成は下記の通り!
Laravelプロジェクトの他に、
・Laravelプロジェクト用のDockerfile
・Nginxの設定ファイル
を作成しましょう!
Laravelプロジェクトの他に、
・Laravelプロジェクト用のDockerfile
・Nginxの設定ファイル
を作成しましょう!
Dockerfileの記述

マイケル
こちらはLaravelプロジェクト用のDockerfileの記述です!
LaravelとPHPの操作に必要なライブラリを記載しています!
LaravelとPHPの操作に必要なライブラリを記載しています!

マイケル
そしてこちらがdocker-compose.ymlの記述!
Webコンテナ: Nginxをアプリ前段に置くためのコンテナ
Appコンテナ: Laravelプロジェクト用のコンテナ
mysqlコンテナ: MySQL用のコンテナ
phpmyadminコンテナ: phpMyAdminを使用するためのコンテナ(※任意)
といった構成になっています!
Webコンテナ: Nginxをアプリ前段に置くためのコンテナ
Appコンテナ: Laravelプロジェクト用のコンテナ
mysqlコンテナ: MySQL用のコンテナ
phpmyadminコンテナ: phpMyAdminを使用するためのコンテナ(※任意)
といった構成になっています!
接続設定

マイケル
そしてこちらが接続の設定!
Default.confファイルにNginxの設定として、Laravelプロジェクトに向けるよう記述します!
Default.confファイルにNginxの設定として、Laravelプロジェクトに向けるよう記述します!
↑Nginxの設定

マイケル
そしてLaravelプロジェクトの.envファイルには、MySQLコンテナの設定に修正しておきましょう!
↑MySQL接続の設定
動作確認

マイケル
以上で設定は完了です!
下記のようにコンテナ起動とデータ登録を完了させたら画面を開いてみましょう!
下記のようにコンテナ起動とデータ登録を完了させたら画面を開いてみましょう!
↑コンテナ起動とデータ登録

マイケル
このように画面が開けば成功です!

エレキベア
やったクマ〜〜〜!!!
おわりに

マイケル
というわけで今回はDockerの使い方についてでした!
どうだったかな?
どうだったかな?

エレキベア
難しそうなイメージだったクマが
やってみたらすごく便利だったクマ
やってみたらすごく便利だったクマ

マイケル
環境構築がこんなに手軽にできると便利だよね!
今度はKubernetesとかオーケストレーションシステムにも挑戦してみよう!
今度はKubernetesとかオーケストレーションシステムにも挑戦してみよう!

エレキベア
やったるクマ〜〜〜

マイケル
それでは今日はこの辺で!
アデュー!!
アデュー!!

エレキベア
クマ〜〜〜〜
【Docker】Dockerの基本的な使い方についてまとめる 〜完〜