akiranetの日々淡々と頑張っていこう

akiranetのコンピューターと遊ぶ

Docker再入門

ak1raです! 以前Dockerをつかって遊んでいたのですが、最近使っていなかったので再度入門してみました。

Dockerってなんぞ?

Dockerは、Docker社(旧dotCloud)が開発するオープンソースコンテナー管理ソフトウェアの1つでコンテナー型仮想化を行います。 よく見かけるのが、VMM( 仮想マシン・モニタ)でVM(仮想マシン)を作り、仮想環境を作るというのがあると思います。 そこで、上記2つがどう違うのかを以下の図がとてもわかり易いと思います。

VMとコンテナ仮想化の違い

  • コンテナーでアプリケーションを実行するために以下の機能を持ちます。
    • コンピューターリソースの隔離および制限
    • 他のホスト、他のコンテナーとのネットワークの構成
    • ファイル/ディレクトリの世代と差分の管理

構造は以下の図のようになっています。 imagelayer

Docker入門

docker run

  • OSを起動したりできる
  • bashをつけることで、bash起動
docker run -it ubuntu:14.04 bash
  • イメージを指定して起動
docker run -it akira/testimage:1.0

docker commit

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

Dockerfile

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

Docker build

イメージをビルド!!

docker build [options] [paths]
ex) docker build -t akira/testimage:1.0 .

docker exec

docker exec -it コンテナID bash

指定したコンテナIDをbash起動

削除コマンド

  • イメージの削除
docker rmi imageID
  • コンテナの削除
docker rm コンテナID

VOLUMEってなぁに〜〜

  • 永続するデータを保存するためにコンテナ
  • コンテナ間での共有が可能

ポート変更

  • nginxのポートを80->8080
docker run -d -P 8080:80 nginx
  • -Pによって自動的にポート割当

コンテナ間のリンク

docker run -d --name dbms postgres
 
docker run -it --name website --link dbms:db ubuntu:14.04 bash

まとめ

 今回の再入門で、Dockerに使い方を思い出せました。次は、Dockerを用いてWebアプリケーションの環境やいろいろなサーバーを作りたいと考えています。また、Dockerクラスタ環境構築に「Docker Swarm」や「Kubernotes」があるらしいのでそのへんも勉強して詳しくなっていきたいです!

参考

dev.classmethod.jp

いまさら聞けないDocker入門(1):アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識 - @IT

仮想化技術はじめの一歩 − @IT