Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@hacoq

Docker

More than 1 year has passed since last update.

こちらの記事では1からDockerについて理解するための初学者向けの内容を扱っていきます。

Dockerとは

DockerとはDocker社が提供する「コンテナ型仮想化技術」です。
Dockerは従来の仮想化に比べて別のOSを立ち上げる必要がないため軽い動作を実現できたり、その仮想環境を他の開発者と共有できたりと開発者にとっては欠かせない技術と言えるでしょう。
これらのメリットについて以下で深掘りしていきます。

コンテナ型仮想化技術

まず仮想化とは、簡単に言うとパソコンの中でパソコン(仮想環境)を立ち上げるということです。
イメージとしては下記の図を参照して下さい。
<従来の仮想化>

スクリーンショット 2019-12-13 15.18.44.png

<コンテナ型仮想化>

スクリーンショット 2019-12-13 15.18.54.png

コンテナ型仮想化による動作の軽量化

一つ目の図がコンテナ型仮想化つまりDockerで、二つ目は従来の仮想化の図です。では具体的に何が違うのか。それは、仮想環境を動かすためのゲストOSの有無です。ゲストOSを必要とする従来の仮想化とは異なり、Dockerではコンテナと呼ばれるミドルウェアの環境構築がされた実行環境を作成し、その中でアプリケーションを動作させます。ゲストOSを必要としない分、動作が従来よりとても軽くなるのです。

コンテナ型仮想化による実行環境の共有

ほとんどの場合開発は複数人で行います。プログラムコードの共有には、Gitというバージョン管理の仕組みが使用され、自分の書いたプログラムコードをチームで共有するGithubやBitbucketなどのサービスがあります。しかし、プログラムコードを共有したとしても実行環境が異なれば、コードが正常に動作しません。Dockerはプログラムの実行環境を管理するための仕組みで、それを共有するための仕組みとしてDockerHubなどのサービスがあります。実行環境を共有できるという点はDockerの最大の利点と言えるでしょう。

イメージとは

実行環境を構築するための設計書みたいなもので、オブジェクト指向でいうとクラスだと認識するのが解りやすいでしょう。
Registry(DockerHub)を使って共有が可能で、既にほとんどの実行環境の構築のための設計書(イメージ)が配布されています。
・以下のコマンドによって、テキストファイル(dockerfile)からイメージを作成することができます。

$ docker build [Docerfileのパス]

コンテナとは

・イメージという設計書から実際に構築された実行環境のことをいいます。こちらはオブジェクト指向でいうとインスタンスです。
Dockerfile→イメージ→コンテナという流れ
原則1コンテナ1アプリを公式から推奨されています。(データベースを扱うアプリであれば、データベースとアプリのコンテナにそれぞれ分けること)

・起動時のコマンド(EntryPoint)が終わると自動で終了します。

・実行時のコマンドでいろんな設定ができます。
 ○環境変数(osが定義している変数)
 ○ホスト側に解放するポート 
 ○コンテナ同士をつなぐネットワークの設定  etc

$ Docker run or $ Docker startで起動

実際にコマンドで起動と設定してみる

$ Docker run nginx

↑これだけで実際にNginx(webサーバー)のコンテナを起動できます。

Dockerしかインストールしていないにも関わらずこのコマンドだけで恐ろしいほど簡単にWebサーバーが立ち上がってしまう…

-vオプションで設定ファイルやHTMLファイルをマウントすればそれだけで思い通りに動かせる

-p 80:80(左の80=ホスト側、右の80=Docker側を表す)とすれば80番ポートで外部に公開される

Docker Composeはとても便利

これまでに説明したbuild run startやその他のコマンドをさらに簡略化できるようになります。

・yamlファイル(設定用に使用されるファイル)一つで複数コンテナを定義することが可能。

・環境変数やポートの設定がyaml形式で書くことが可能。

・ネットワークの設定が自動で楽。

以上の理由から、特別な状況でない限りは使用するのがオススメ。

Docker Compose見本(yamlファイル)↓


version:"3"
services:
    reserse-proxy:
        image:nginx
        volumes:
            ./config:/etc/nginx/nginx.conf.d #相対パス使用ok
        ports:
             "80:80"
        restart:always#再起動しても自動で起動してくれる

  web-server:
       image:nginx
       volumes:
               ./docs:/user/share/nginx/html
#二つのコンテナは同じネットワークに繋がる
#しかも"web-server"などで名前解決ができる(=ipアドレス調べる必要なし)

また後々Dockerについて深掘りした記事出したいなと思ってます。

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?