9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker 入門 Dockerの説明からhello-worldまで

Last updated at Posted at 2018-09-26

Dockerとは

Docker社が提供しているコンテナ型のアプリケーション実行環境
Go言語で書かれている

コンテナ型?

アプリケーション実行環境の構築には2パターンある。
・ ハイパーバイザー型
・ コンテナ型

###ハイパーバイザー型
ホストと仮想環境をつなげる 役割としてハイパーバイザーというのが存在している。
このハイパーバイザーでCPUの割縁とかを行っている。
ホストOSと仮想マシンが隔離された状態である。
そのため、仮想マシンには任意のOSをいれることができる。(WindowsにLinuxとか)

OSをいれているためファイルサイズも大きく、起動も遅い

###コンテナ型
Docker Engineというものを介して行われる(ハイパーバイザーの代わり)
ゲストOSを持たず、ホストOSのカーネルを使用して特定のプログラムを実行する。
Linux, CentOS等のイメージを入れることができるが、ごっそりOSをいれているのではなく、ホストOSのカーネルを使用して上記OSのコマンドをつかえる ようにしている
ハイパーバイザー型と異なり、WindowsでLinuxを動かすようなことはできない。

ハイパーバイザー型とコンテナ型の比較

###仮想化のオーバーヘッド
オーバーヘッド: ある処理を実行するのに間接的にかかるコスト
####ハイパーバイザー型

  • リソース(CPUの使用率等)を大きく使う、起動、停止に時間を要する。

####コンテナ型

  • コンテナをアプリケーション実行に必要なものだけを含み、ホストのカーネルを実行するため、動作が早くリソースの使用率を減らすことができる。

###アプリケーション実行の再現性
####ハイパーバイザー型

  • 仮想マシンの環境の違いによりアプリケーションで不具合が起こることがある。

####コンテナ型

  • 特定のアプリケーションを動作させるために必要なものはDockerイメージにまとまっているため、同じコンテナを起動する場合は環境が変わっても動作する

###OSの自由度
####ハイパーバイザー型

  • 好きなOSを使用することができる。

####コンテナ型

  • コンテナはホストSOのカーネルを使用して動作するため、カーネルをサポートしていないOSをうごかすことはできない

###分離レベル
####ハイパーバイザー型

  • ハードウェアレベルでの仮想化が行われているため、マシンに侵入された際も、影響が及びにくい。

####コンテナ型

  • ホストOSの1プロセスとして機能するため、分離レベルが引く
  • 不用意なパッケージ等のインストールは避けるべき
  • Publicで公開しないようにする

##Dockerのインストール
Dockerの公式サイトからダウンロード
https://www.docker.com/

アプリケーションフォルダに移動して、起動させる
スクリーンショット 2018-09-27 0.47.40.png

ナビゲーションバーにDockerのマークがあったらOK
スクリーンショット 2018-09-27 0.47.00.png

* ログイン等の設定もあるが、一旦スキップ。

##hello-workdを表示させてみる

ターミナルにて下記コマンドを実行

$docker run hello-world

すると、うひゃ~といろいろ出てくる
おめでとうございます!成功です。

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

とりあえずもう一度実行してみる

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

さっきより行数が減り、そして処理も早くなった!

これはどういうことか!?
1回目と2回目の差分に注目!!

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

hello-worldイメージがローカルにないので、library/hello-worldからPullしてきてくれています。

逆に2回目は、hello-worldイメージは1回めでローカルにもってきてあるため、上記の時間が削減された。

ということで、

$docker run hello-world

というコマンドには、
ただ実行するだけでなく、

docker pull    イメージの取得
docker create    コンテナの作成
docker start      コンテナの起動

が含まれてる。
そして、2回目の実行では、pullとcreateの時間がカットされたことになるのです!!

##感想
意外とサクッとコンテナ作れてビビったw
なぜDockerが良いのかというのを今後のレッスンを通してより深く理解できたらと思う。

##参考
ゼロからはじめる Dockerによるアプリケーション実行環境構築
https://www.udemy.com/docker-k/

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?