Capr1の日々

とあるゲーム好きの情報系大学生の日々を淡々と綴っていくぞい

Docker入門

Capr1です.

以前Dockerを独学で勉強していたのですが最近使ってなかったので、ここでまとめてみました.

Dockerとは?

「Docker」とはDocker社「旧dotCloud」が開発するオープンソースのコンテナー管理ソフトウェアの一つで、コンテナーとはWebサーバなどのアプリケーション実行環境を抽象化する技術であり、VMWareLinux KVMなどの「ハイパーバイザー型の仮想化」に対して、「コンテナー型の仮想化」と呼ばれることもあります.

「ハイパーバイザー型の仮想化」では、ホストマシン上でハイパーバイザーを利用しゲストOSを動かし、その上でミドルウェアなどを動かします.それに対し、コンテナーはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することであたかも別のマシンが動いているように動かすことができます.これにより軽量で高速に移動、停止などが可能です.

f:id:caprinet:20191003224748j:plain

f:id:caprinet:20191003224802j:plain

Dockerの主な機能と特徴

コンテナーでアプリケーションを実行するために以下の機能を持ちます.

  • コンピューターリソースの隔離および制限
  • 他のホスト、他のコンテナーとのネットワークの構成
  • ファイル/ディレクトリの世代と差分の管理

Dockerが使用している技術

DockerはGo言語で開発されています.またLinuxカーネルの機能やLinux向けファイルシステムに依存するため、Linuxでのみ動作します.

  • Linux Namespaces:コンピューターリソースの隔離
  • Linux cgroups:コンピューターリソースの制限
  • AUFS/Device Mappern Thin Provisioning:ファイル/ディレクトリの差分管理
  • Linux iptables:他のホスト、他のコンテナーとのネットワークの構成 

アプリケーション開発におけるDocker利用のメリット

通常のアプリケーション開発は以下のような流れで進みます.そのため、開発環境やテスト環境で正しく動作していても、ステージング環境やプロダクション環境にデプロイすると正常に動作しないことがあります.

f:id:caprinet:20191003234131p:plain

 

Dockerでは、これらのインフラ環境をコンテナとして管理します.アプリケーションの実行に必要な全てのファイル/ディレクトリ群をコンテナとしてまとめて、このコンテナの元となるDockerイメージをレポジトリで共有します.

Dockerを使うと以下のような流れで開発ができます.

f:id:caprinet:20191004001634p:plain

開発者はDockerを使って、開発したアプリケーションの実行に必要な全てが含まれるDcokerイメージを作成します.このイメージはコンテナのひな形になり、このイメージを元にして、コンテナを稼働させます.このイメージは、Dockerをインストールしている環境であれば基本的にどこでも動作するので、「開発/テスト環境では動くけど、プロダクション環境では動かない」リスクを減らすことができます.

 

Dockerコマンド

docker run
  • OSを起動したりできる
  • bashをつけることで、bash起動

docker run -it ubuntu:14.04 bash 

  • イメージを指定して起動

docker run -it capr1/testimage:1.0 

  • コンテナを生成/実行

docker container run [環境設定オプション] イメージ名 [:タグ名] [引数]

docker commit
  • 現在までのDockerコンテナの変更内容を新たなイメージとして保存

docker commit コンテナID イメージ名

Dockerfile
  • FROM:ベースイメージを指定
  • RUN:実行するためのスクリプト
  • CMD:dcoker runをした際にそのコマンドを実行可能
  • ENTRYPOINT:あらかじめ指定したコマンドを引数を指定のみで実行可能
  • EXPOSE:ポート番号を指定

イメージをビルド

docker build -t [生成するイメージ名]:[タグ名] [Dockerfileの場所]
ex) docker build -t sample:1.0 /home/docker/sample

削除コマンド
  • イメージの削除

docker rmi imageID

  • コンテナの削除

docker rm containerID

 

参考文献

dev.classmethod.jp

www.atmarkit.co.jp

www.atmarkit.co.jp

knowledge.sakura.ad.jp

akiranet.hatenablog.jp