Your SlideShare is downloading. ×

Docker 基本のおさらい

103

Published on

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

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
103
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×