Docker入門
Capr1です.
以前Dockerを独学で勉強していたのですが最近使ってなかったので、ここでまとめてみました.
Dockerとは?
「Docker」とはDocker社「旧dotCloud」が開発するオープンソースのコンテナー管理ソフトウェアの一つで、コンテナーとはWebサーバなどのアプリケーション実行環境を抽象化する技術であり、VMWareやLinux KVMなどの「ハイパーバイザー型の仮想化」に対して、「コンテナー型の仮想化」と呼ばれることもあります.
「ハイパーバイザー型の仮想化」では、ホストマシン上でハイパーバイザーを利用しゲストOSを動かし、その上でミドルウェアなどを動かします.それに対し、コンテナーはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することであたかも別のマシンが動いているように動かすことができます.これにより軽量で高速に移動、停止などが可能です.
Dockerの主な機能と特徴
コンテナーでアプリケーションを実行するために以下の機能を持ちます.
- コンピューターリソースの隔離および制限
- 他のホスト、他のコンテナーとのネットワークの構成
- ファイル/ディレクトリの世代と差分の管理
Dockerが使用している技術
DockerはGo言語で開発されています.またLinuxカーネルの機能やLinux向けファイルシステムに依存するため、Linuxでのみ動作します.
- Linux Namespaces:コンピューターリソースの隔離
- Linux cgroups:コンピューターリソースの制限
- AUFS/Device Mappern Thin Provisioning:ファイル/ディレクトリの差分管理
アプリケーション開発におけるDocker利用のメリット
通常のアプリケーション開発は以下のような流れで進みます.そのため、開発環境やテスト環境で正しく動作していても、ステージング環境やプロダクション環境にデプロイすると正常に動作しないことがあります.
Dockerでは、これらのインフラ環境をコンテナとして管理します.アプリケーションの実行に必要な全てのファイル/ディレクトリ群をコンテナとしてまとめて、このコンテナの元となるDockerイメージをレポジトリで共有します.
Dockerを使うと以下のような流れで開発ができます.
開発者はDockerを使って、開発したアプリケーションの実行に必要な全てが含まれるDcokerイメージを作成します.このイメージはコンテナのひな形になり、このイメージを元にして、コンテナを稼働させます.このイメージは、Dockerをインストールしている環境であれば基本的にどこでも動作するので、「開発/テスト環境では動くけど、プロダクション環境では動かない」リスクを減らすことができます.
Dockerコマンド
docker run
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
参考文献
プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化
- 作者: WINGSプロジェクト阿佐志保
- 出版社/メーカー: 翔泳社
- 発売日: 2018/04/11
- メディア: Kindle版
- この商品を含むブログを見る