Docker/Kubernetes 実践コンテナ開発入門
はじめに
現在使用したことある仮想化ソフトウェアとしてはVirtualboxがありますが、Mac(ホスト)側でデスクトップアプリをパッケージ化し、そのパッケージをwindows(ゲスト)に送り... のように作業も多く、なおかつ環境を作るのにとても時間がかかり大変です。そこらへんと比べてDockerとは何か?を理解できたらと思います。
何回か記事を分けてDocker/Kubernetes 実践コンテナ開発入門を進めていきます。 gihyo.jp
Dockerとは?
- コンテナ型仮想化技術を実現するために実行される常駐アプリケーション
- 上記を操作する為のCLIから成るプロダクト
- アプリケーションをデプロイすることに特化した箱
前回書いた記事ではFlaskをDockerで動かし、APIを作成しています。 アプリケーションをデプロイすることに特化した箱なのでローカルで検証するだけでなく、実際のアプリケーションとして機能します。
Dockerの苦手なこと
- Dockerのコンテナ内部はLinux系OSのような構成をしている為、OSとしての振る舞いを完全に再現しているわけではない
あくまでもアプリケーションをデプロイすることに特化した箱です。
コンテナ型仮想化技術
- 仮想化ソフトウェアなしでOSのリソースを隔離して仮想OSにすることをコンテナと呼ぶ
- 他の仮想化ソフトウェアと比べると呼び出す負荷(オーバーヘッド)が少なくすむ
- 高速に起動・終了できる
他の仮想化技術は?
- OSの上のインストールした仮想化ソフトウェアを利用して、ゲストOSを作り出すホストOS型(例 VMware Player, VirtualBox)
- サーバーへ直接インストールし仮想マシンを稼働させるハイパーバイザ型(例 Hyper-V Server)
Dockerの利用方法
Dockerは前述の通りアプリケーションをデプロイすることに特化した箱です。
具体的にはアプリケーションと、実行環境を同梱してデプロイします。
実際に以下のスクリプトを使ってDockerの流れを追ってみたいと思います。
#! /bin/sh echo "Hello, World"
上記にhelloworldと名前をつけて保存します。
まずは普通にこのシェルスクリプトを実行させてみます。
sh helloworld
結果
Hello, World
当然ですね。
使ってるPCがmacならmacの環境で動かしたことになりますし、windowsならwindowsで動いたことになります。
ではDockerを使ってUbuntuを同梱させて実行させてみます。
上記のhelloworldスクリプトがあるディレクトリにDockerfile
という名前でファイルを作り下記の内容を書きます。
FROM ubuntu:16.04 COPY helloworld /user/local/bin RUN chmod +x /user/local/bin/helloworld CMD ["helloworld"]
今回はDockerをつかった流れの説明なのでDockerfileの詳しい説明は次回以降します。
- FROMではイメージになるOSを指定
- COPYではホスト(helloworldを作ったパソコン)のhelloworldファイルをDockerコンテナ内の/user/local/binにコピー
- RUNでは上述でコピーしたスクリプトに実行権限を与えてます
- CMDではアプリケーションを実行するコマンドを指定
*Dockerのインストールに関しては割愛
Dockerfileがあるディレクトリでビルドします。
docker image build -t helloworld:latest .
ビルドができたらコンテナを実行します。
docker container run helloworld:latest
結果
Hello, World
以上でシェルスクリプトをUbuntuに同梱してコンテナとして実行することができました。
上記でやった流れをまとめてみます。
Dockerfileとシェルスクリプト(アプリと考えて)を用意する ↓ ビルドする ↓ コンテナを起動する
これだけです。
では一連の流れをもう少し詳しくみてみます。
Dockerイメージとは
上記で述べてるビルドする
というのはDockerコンテナの元になるイメージ
を作っています。
このことをDockerイメージをビルドすると言います。
Dockerfileではイメージを構築するための手順を書いています。
DockerfileがDockerイメージになっているわけではありません。
Dockerイメージは次に説明するDockerコンテナを作成する為のテンプレートになります。
Dockerコンテナとは
一連の流れで説明したコンテナを起動する
ではDockerイメージを元に実際にアプリを実行させることを示しています。
前述の通りDockerイメージをを元にコンテナが作成されます。
DockerfileのCMD,ENTRYPOINTで定義されているアプリケーションの実行を開始します。
Dockerイメージからは複数のコンテナを作成することができます。
最後に
複雑に見えますが、Dockerの基本操作はイメージに関する操作とコンテナに関する操作です。
今回は概念とDockerを使った一連の流れをまとめたので次回以降は具体的にイメージとコンテナのそれぞれの操作についてまとめていきます。