Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Docker 基本のおさらい

83,608 views

Published on

Docker の基本的な使い方をkwskrb で紹介した時の資料です。

本スライドは次の資料の抜粋+α版です。もう少し詳細を知りたい場合にあわせて御覧ください。

『そろそろ知っておきたい!!コンテナ技術とDockerのキホン』
http://www.slideshare.net/ngzm/lxc-and-dockerbasic

Published in: Technology

Docker 基本のおさらい

  1. 1. 2015/5/27 kawasaki.rb Docker 基本のおさらい
  2. 2. 自己紹介  長住 直樹(ながずみ なおき)/ Twitter @nk_ngzm  会社内で技術者育成活動(通称:CORETECH)を推進しています。
  3. 3. はじめに このスライドは、先日社内の講習会で発表した資 料の抜粋版です!! そろそろ知っておきたい!!コンテナ技術 と Dockerのキホン http://www.slideshare.net/ngzm/lxc-and-dockerbasic Docker とか コンテナ技術について、もうすこし 詳しい情報を知りたい場合は、上記資料も併せて 御覧ください。
  4. 4. Docker 「Docker」は、米国 Docker社(旧dotCloud)が開 発するオープンソースのコンテナ管理ソフトウェ アのひとつ。Go言語で実装されている。 アプリケーション実行環境をそのままを、コンテ ナに格納して実行するツール。 仮想サーバではなくアプリケーションに最適化さ れているため、原則的に、ひとつのコンテナに、 ひとつのアプリケーションが実行する構成となる。
  5. 5. Docker の利点 コンテナなのでオーバヘッドが少なく、 動作が軽い コンテナイメージを手軽にやり取りでき る コンテナは様々な環境で等しく動く
  6. 6. Docker の利点 各コンテナは、いろいろなディストリ ビューションやバージョンで構成できる コンテナ(インフラ)をコードで表現で きる コンテナ(環境)を壊して作りなおす運 用が可能となる
  7. 7. DockerイメージとDockerコンテナ Dockerイメージとは、Docker コ ンテナ生成のベースとなるひな形。 代表的な例として ubuntu や centos 等のディストリビュー ションがイメージ化されている。 Dockerコンテナとは、ある Dockerイメージをベースにして 個別アプリケーションの環境を セットアップして作成するコンテ ナ実行環境。 Docker コンテナ Docker イメージ Docker イメージ docker run docker commit
  8. 8. Docker Hub Docker社は、Docker Hub というクラウド上のリポジトリ を提供しており、様々な団体や個人が作成した Dockerイ メージを利用したり、自分で作成したイメージを共有する ことが可能。 https://hub.docker.com/ Docker コンテナ Docker イメージ Docker イメージ docker run docker commit docker pull docker push
  9. 9. カスタム Docker イメージ作成 Docker コンテナ Docker イメージ Docker イメージ docker run docker commit Docker コンテナ docker run httpd install httpd 起動 with httpd
  10. 10. AUFS 親コンテナか らの差分管理 ができるため、 コンテナイ メージの容量 を軽量化でき る。 引用 : http://gesellix.github.io/gradle-summit-2014/
  11. 11. Dockerfile Dockerには、Dockerコンテナ の構成情報をテキスト形式で記 述できる「Dockerfile」という 仕様がある。 そして、Dockerfile を解釈し Dockerイメージを作成する 「docker build」コマンドが用 意されている。 Dockerfile docker build Docker イメージ
  12. 12. Dockerfile FROM ubuntu MAINTAINER hoge<hoge@sample.net> RUN apt-get install -y httpd EXPOSE 80 CMD ["httpd", "-D" "FOREGROUND"] ① ubuntu(latest)をベースとする ② 管理者はhoge <hoge@sample.net> ③ httpdをインストール ④ ポート80番をオープン ⑤ httpdサーバをフォアグランドに起動(上書き可能) 以上の手順が実行された Docker イメージを作成
  13. 13. Dockerfile コマンド 意味 FROM 元となるDockerイメージの指定 MAINTAINER 作成者の情報 RUN コマンドの実行 ADD ファイル/ディレクトリの追加 CMD コンテナーの実行コマンド 1 ENTRYPOINT コンテナーの実行コマンド 2 WORKDIR 作業ディレクトリの指定 ENV 環境変数の指定 USER 実行ユーザーの指定 EXPOSE ポートのエクスポート VOLUME ボリュームのマウント
  14. 14. Dockerイメージのビルド  Dockerfile をビルドし hoge/ubu:1.0 という Dockerイメージを生成 $ cd [Dockerfileがあるディレクトリ] $ sudo docker build –t hoge/app:1.0 ./ Dockerfile docker build Docker イメージ hoge/app:1.0
  15. 15. 引用 : http://www.slideshare.net/durdn/be-a-better-developer-with-docker Dockerイメージのビルド
  16. 16. Data Volume 複数のコンテナ間で永続的なデータや共有データ を扱うための特別なヴォリューム (ディレクトリ)。 Data Volume に対する変更は直接反映され、イ メージの変更に含まれない。 Data Volume は参照するコンテナがなくなって も存続する。
  17. 17. Data Volume ホストとのヴォリューム共有 引用 : http://www.slideshare.net/durdn/be-a-better-developer-with-docker
  18. 18. Data Volume  ホストの /opt/test-app/ をコンテナの /app と してマウントさせる $ sudo docker run -it -v /opt/test-app:/app ubuntu /bin/bash ホスト側 マウントされるディレクトリ コンテナ側 マウントディレクトリ
  19. 19. Data Volume Container コンテナ間のヴォリューム共有 引用 : http://www.slideshare.net/durdn/be-a-better-developer-with-docker -v /var/volume1 -v /var/volume2 Data Volume Container
  20. 20. Data Volume Container  /var/volume を共有するデータボリュームコン テナを生成+起動する  上記コンテナの /var/volume を共有するコン テナを生成+起動する $ sudo docker run -it -v /var/volume --name vol1 ubuntu /bin/bash $ sudo docker run -it --volumes-from vol1 ubuntu /bin/bash FROM ubuntu ... ... VOLUME ["/var/volume"] CMD ["/bin/bash"]
  21. 21. Data Volume Container ユーザデータなど、壊せない情報の格納場所とし て Data Volume Container を利用する。 Webサーバ コンテナ APサーバ コンテナ DBサーバ コンテナ Data Volume コンテナ ログ保存先 Volume DB データ格納 Volume
  22. 22. ネットワークポートマッピング コンテナを起動するときに、コンテナ内部で使用 するポートを、任意のホスト側ポート番号 (49152以降推奨)に割り当てることができる。 ホスト側のポート番号は、49000 ~ 49900 の 範囲で自動的にランダムな番号を割り当てたり、 ユーザが任意の番号を指定したりすることが可能。 ホスト コンテナ IP :X PORT:X IP :Y PORT:Y ポート マッピング
  23. 23. ネットワークポートマッピング  コンテナ内でオープンしているポートをホスト 側ランダムなポート番号にマッピング  コンテナのポート22がホストのどのポートに マッピングされたか知る方法 $ sudo docker run -d -P ubuntu:latest /usr/sbin/sshd -D $ sudo docker port [コンテナID] 22 $ sudo docker run -d -p 22 ubuntu:latest /usr/sbin/sshd -D
  24. 24. ネットワークポートマッピング  コンテナのポート22をユーザが指定するホスト 側ポート番号2222にマッピング $ sudo docker run -d -p 2222:22 ubuntu:latest /usr/sbin/sshd -D ホスト コンテナ IP :X PORT:2222 IP :Y PORT:22 ポート マッピング ホスト側ポート コンテナ側ポート
  25. 25. コンテナ・リンク 複数のコンテナ間で、専用のネットワークを構築 することができる。 コンテナA (コンテナBに接続) コンテナB (リンク元)
  26. 26. コンテナ・リンク  リンク元のコンテナA  コンテナAに接続するコンテナB $ sudo docker run –d --name pg ubuntu:latest postmaster -D /usr/local/pgsql/data $ sudo docker run -d --link pg:db ubuntu:latest /someService コンテナB 環境変数 DB_PORT_5432_TCP_ADDR=172.17.0.2 DB_PORT=tcp://172.17.0.2:5432 DB_5432_TCP=tcp://172.17.0.2:5432 DB_PORT_5432_TCP_PORT=5432 /etc/hosts 172.17.0.2 db
  27. 27. ホストサーバ (storage) Data Volume コンテナ WordPressシステム構築 (wpap) WordPress コンテナ (wpdb) MySQL コンテナ データベース ファイル /var/lib/mysql ポート フォワード 8080:80 コンテナ リンク DB接続 利用者
  28. 28. WordPressシステム構築  Data Volume コンテナ $ cd [Dockerfileのディレクトリ] $ vi Dockerfile # Dockerfile作成 $ sudo docker build -t storage . $ sudo docker run -it --name storage storage ROM ubuntu:latest MAINTAINER ngzm <nk.ngzm@gmail.com> VOLUME /var/lib/mysql CMD /bin/bash
  29. 29. WordPressシステム構築  MySQLコンテナ  WordPressコンテナ $ sudo docker run --name wpdb ¥ --volumes-from storage ¥ -e MYSQL_ROOT_PASSWORD=password ¥ -d mysql:5.7 $ sudo docker run --name wpap ¥ --link wpdb:mysql ¥ -p 8080:80 ¥ -d wordpress:latest
  30. 30. Docker Compose コンテナ間のシステム構成を docker run コマンドのオプションで指定する のが微妙だ! Docker Compose を使ってみる。
  31. 31. Docker Compose  docker-compose.yml storage: build: ./storage wpdb: image: mysql:5.7 volumes_from: - storage ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: password wpap: image: wordpress:latest links: - wpdb:mysql ports: - "8080:80" コンテナ間のシステム 構成を YAMLファイル で定義できる!!! 定義内容は、docker runのオプションとほぼ 対応しておりうれしい ~ Data Volume コンテナ MySQL コンテナ WordPress コンテナ
  32. 32. Docker Compose  WordPressシステムを構成するコンテナを一気 にビルド  WordPressシステムを構成するコンテナを一気 に起動 $ sudo docker-compose build $ sudo docker-compose up -d
  33. 33. Docker は、コンテナを簡単に、便利に扱え るようにしたツール。 Docker Hubというリポジトリを経由すると、 インターネットを介して、コンテナをポー タブルにできる。 Dockerfile という形式で、サーバインフラ をコード化することができる。
  34. 34. 複数のコンテナ間で永続的なデータや共有 データを扱うためのData Volumeも作成で きる。 ネットワークポートマッピングやコンテナ リンクを組み合わせると、いろいろ柔軟な システム構成が検討できる。 Docker Compose を使えば、複数コンテナ の構成をまとめてコード化し管理できる!
  35. 35. 皆さんも ぜひ Docker を さわってみて下さい!!
  36. 36. デベロッパとは、けっこう相性が いいと思います。
  37. 37. おしまい ご静聴ありがとう ございました

×