LoginSignup
47
52

More than 5 years have passed since last update.

Dockerの基礎知識

Posted at

はじめに

Introduction Dockerのメモ。
なんとなくしかDockerを使えてなかったが、ちゃんと使おうと思ったのでチュートリアルからやり始めた。
動画がめちゃくちゃわかりやすいが、毎回動画をみるのも大変なのでメモに残す。

Dockerとは

コンテナ仮想化技術をつかった、サービス開発/デプロイ基盤。
以下の製品/ツールなどを含んだサービスのことを指す。

  • Docker Engine
  • Docker Hub
  • Docker Machine
  • Docker Swarm
  • Docker Compose
  • Kitematic (Docker DaemonをGUIで操作する際に利用)

何を解決できるか

  • 長いデプロイ時間
  • コスト/リソースの無駄遣い
  • スケールがむずかしい
  • 移行がむずかしい
  • ベンダーロックインへの対応

コンテナとは

概要

分離されたアプリケーションごとの環境。
以下の要素を含む。

  • ファイルシステム
  • プロセス
  • メモリ
  • ポート

DockerContainer.png
出典 : https://training.docker.com/self-paced-training

VirtualMachineとの違い

  • VMは各アプリケーションごとにゲストOSが必要

そのため

  • コンテナの方が軽い
  • コンテナのほうがCPU, RAM, ストレージが少なくて済む

つまり

コンテナの方が一つのマシンに多く置ける。

Docker Engine

コンテナをbuilt, ship, runするプログラム
LinuxKernel namespacesとcontrol groupsを利用している
隔離した環境を作ってくれる

Docker Client / Daemon

概要

  • Client/Server構造
  • Clientは入力をデーモンに伝える
  • デーモンはコンテナをつくる
  • Clientとデーモンは同じホストでも違うホストでも動作する

DockerClient.png
出典 : https://training.docker.com/self-paced-training

各バージョンの確認方法

docker@default:~$ docker version
Client: # DockerClientの情報
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 21:49:11 2016
 OS/Arch:      linux/amd64

Server: # Daemon情報
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 21:49:11 2016
 OS/Arch:      linux/amd64

Docker Images

  • ReadOnlyなコンテナ用のテンプレート
  • Dockerユーザならだれでも作れる
  • DockerHubやローカルに保存できる
  • Imageは「レポジトリ名:タグ」で特定する
    • デフォルトのタグは、「latest」
  • コンテナは1つ以上のイメージを元にして作られる

Dockerの編成を管理するツール

  • Docker Machine
    • DockerEngineをインストールするためのツール
  • Docker Swarm
    • 複数のエンジンとコンテナを持つツール
  • Docker Compose
    • 複数コンテナを管理するツール

詳しくは別記事にした。
[Docker]複数ホスト管理ツールのまとめ

Dockerの利点

  • 担当者のやるべきことをはっきりさせる
    • 開発者はアプリケーションをつくること
    • システム管理者はデプロイ
  • 開発速度を上げる
  • どんな環境でも動作する
  • スケールしやすい
  • 1つのホストで複数アプリを作れる

その他 (すでに導入済みだったので軽いメモ)

DockerHubの使い方 : 22分ころ
Dockerでの作業方法 : 33分ころ

コンテナ内のプロセスの構造について

コンテナ内でのコマンドのPIDは1になる。

Container ID

  • コンテナはnameかIdで区別する
  • LongIdと ShortId (docker psで確認)がある

コンテナをデーモンとして使う-dオプション

  • docker psでLongIdを確認
  • docker logs <コンテナId> で標準出力を確認

コンテナのポートを紐付ける-Pオプション

$ docker run -d -P tomcat:7
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
d286e3524ef2        tomcat:7            "catalina.sh run"   4 seconds ago       Up 4 seconds        0.0.0.0:32768->8080/tcp   distracted_panini

↑で<マシンのIP>:8080に行くと、tomcatが動いている。

コンテナのポートとマシンのポートを指定して紐付ける-pオプション

$ docker run -d -p 8080:80 nginx:1.7
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
48a1ef8df772        nginx:1.7           "nginx -g 'daemon off"   6 seconds ago       Up 6 seconds        443/tcp, 0.0.0.0:8080->80/tcp   big_lalande

↑で<マシンのIP>(:80)に行くと、nginxが動いている。

47
52
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
47
52