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.

Infrastructure.nagoya ~Dockerで、何をする?~

http://infta-nagoya.connpass.com/event/10540/

  • Login to see the comments

  • Be the first to like this

Infrastructure.nagoya ~Dockerで、何をする?~

  1. 1. Infrastructure.nagoya 2015/01/17 Vol.2 Dockerで、何をする?
  2. 2. 自己紹介 ● はまじ (@HmjKRS) ○ 来栖川電算 社内ニート ○ 元インフラ担当 → 認識系エンジニア見習い ○ Chef, Vagrant, docker を広めようとした人 ○ 変なことが好き
  3. 3. 自己紹介 ● はまじ (@HmjKRS) ○ 来栖川電算 社内ニート ○ 元インフラ担当 → 認識系エンジニア見習い ○ Chef, Vagrant, docker を広めようとした人 ○ 変なことが好き 最近、さらに引きこもりました。
  4. 4. 自己紹介 ● はまじ (@HmjKRS) ○ 来栖川電算 社内ニート ○ 元インフラ担当 → 認識系エンジニア見習い ○ Chef, Vagrant, docker を広めようとした人 ○ 変なことが好き 先日、社内勉強会を行いました。 開発メンバーみんなの環境にdocker を入れさせることに成功。 docker 広まってます!
  5. 5. 今日の目的 実運用で使えそうな docker 周辺ツールを紹介したい
  6. 6. 今日やること ● Packer で docker イメージをつくろう ● docker registry を立てよう ● ngrok を使ってみよう
  7. 7. Packer で docker の イメージをつくろう
  8. 8. Dockerfile 書きたくない ● いままでの資産を再利用できない Dockerfile は独自の DSL で記述する必要があり、 これまで使用していたChef の Cookbook を再利用できない。 ● レイヤー数に制限がある Docker の AUFS レイヤーは最大 127 個まで。 Dockerfile だけで複雑なイメージを作成するには限界がある。
  9. 9. Packer って何? ● Packer とは イメージの作成を行うツール。 統一された手順で、対応するプラットフォーム用のイメージを、 対応するプロビジョニングツールで作成できる。 $ packer build hoge.json ● 対応プラットフォーム Amazon EC2 (AMI)、DigitalOcean、Docker、Google Compute Engine、 OpenStack、Parallels、KVM、Xen、VirtualBox、VMware ● 対応プロビジョニングツール ShellScript、Chef、Puppet、Ansible、Salt
  10. 10. Packer を使いたい理由 ● これまでの資産を再利用できる せっかく Cookbook があるのに、同じことをするDockerfile を イチから書き直すのはもったいない。 Packer なら既存の Cookbook をそのまま再利用できる。 ● docker 以外のプラットフォームにも簡単に移行できる Dockerfile は docker 専用。 Vagrant などに移行するときはCookbook に書き直さないといけないし、 イメージの作成手順も異なる。 Packer なら Cookbook は使いまわせるし、イメージの作成手順も統一されている。
  11. 11. Packer をインストールしよう ● CentOS 6 系 $ curl -LO https://dl.bintray.com/mitchellh/packer/packer_0.7.5_linux_amd64.zip $ sudo unzip -d /usr/local/packer packer_0.7.5_linux_amd64.zip $ echo 'export PATH=/usr/local/packer:$PATH' | sudo tee /etc/profile.d/packer.sh ● 確認 $ packer usage: packer [--version] [--help] <command> [<args>] Available commands are: build build image(s) from template fix fixes templates from old versions of packer inspect see components of a template push push template files to a Packer build service validate check that a template is valid version Prints the Packer version
  12. 12. Packer で build するには? ● build コマンド $ packer build Usage: packer build [options] TEMPLATE ● TEMPLATE(json ファイル)の書き方 ○ builders どのような種類のイメージを作るか。 例えば、「iso ファイルを指定して VirtualBox のイメージを作る」など。 ○ provisioners プロビジョニングについて。 ShellScript、Chef、Puppet、Ansible、Salt などを使用できる。 ○ post-processors 作成されたイメージに対する後処理。 例えば、「作成されたVirtualBox の Box の名前を変更する」など。
  13. 13. docker + Chef の TEMPLATE ● 実際の TEMPLATE ファイルの内容 $ cd ~/sample $ cat packer.json { "builders":[{ "type": "docker", "image": "centos:centos6", "export_path": "image.tar" }], "provisioners":[ { "type": "shell", "inline": ["yum -y install sudo"] }, { "type": "chef-solo", "cookbook_paths": ["cookbooks"], "run_list": ["apache::default"] } ], "post-processors": [{ "type": "docker-import", "repository": "hamaji/sample", "tag": "0.1" }] }
  14. 14. build してみよう ● TEMPLATE ファイルを指定して build コマンドを実行 $ packer build packer.json docker output will be in this color. ==> docker: Creating a temporary directory for sharing data... ==> docker: Pulling Docker image: centos:centos6 docker: Pulling repository centos Build 'docker' finished. ==> Builds finished. The artifacts of successful builds are: --> docker: Imported Docker image: hamaji/sample:0.1 ● 確認 $ docker images hamaji/test REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hamaji/sample 0.1 55648676db6c 3 minutes ago 393 MB
  15. 15. docker のバージョンに注意 ● docker のバージョンによっては build に失敗する docker 1.2.0 => docker 側のバグで失敗 docker 1.4.1 => packer 側が未対応 docker 1.3.3 => 動いた ※ packer のログレベルを指定するには環境変数PACKER_LOG をセットする。 $ PACKER_LOG=debug packer build packer-test.json ● 古いバージョンの docker を入れるには docker 1.3.3 のバイナリをダウンロードして入れ替えればOK。 $ sudo su # service docker stop # curl -L https://get.docker.com/builds/Linux/x86_64/docker-1.3.3 -o /usr/bin/docker # chmod +x /usr/bin/docker # service docker start
  16. 16. Packer でできないこと ● ビルド途中のイメージキャッシュ docker はイメージのビルド中に、コマンドごとにキャッシュを残すので、 ビルドを中断したときでも、途中から再開できる。 Packer にはまだこの機能がないので、ビルドを中断すると毎回はじめから ビルドすることになる。 ● EXPOSE や ENTRYPOINT の指定 Dockerfile では EXPOSE や ENTRYPOINT などのメタデータを埋め込むことが できるが、Packer にはこの機能がない。 これらのメタデータはdocker run のときに指定できるので大きな問題ではない。
  17. 17. docker registry を立てよう
  18. 18. docker registry を立てよう ● なぜ registry を立てたいか DockerHub では全世界にイメージが公開されてしまう。 社内だけでイメージを共有したいときには使えない。 ● docker registry の起動 公式イメージがあるので、run するだけで OK。 $ docker run -d --name registry -p 5000:5000 -v $(pwd):/tmp/registry registry
  19. 19. push してみよう ● イメージを push $ docker tag centos:centos6 localhost:5000/centos:centos6 $ docker push localhost:5000/centos:centos6 ● push されているイメージを見るには registry 単体では UI が無いので、REST API 経由で確認する。 $ curl -X GET http://localhost:5000/v1/search | jq '.' { "num_results": 1, "query": "", "results": [ { "description": "", "name": "library/centos" } ] }
  20. 20. web インタフェースを使ってみよう ● web インタフェースの起動 $ docker run -d --name registry-frontend --link registry:registry -e ENV_DOCKER_REGISTRY_HOST=registry -e ENV_DOCKER_REGISTRY_PORT=5000 -p 8080:80 konradkleine/docker-registry-frontend ● ブラウザで確認 ブラウザで http://localhost/ にアクセス
  21. 21. ngrok を使ってみよう docker とは関係ないです
  22. 22. ngrok でできること ● ローカルマシンの任意のポートを ngrok.com を経由して全世界に公開できる コマンドひとつで公開できて、煩わしい設定は一切無し。
  23. 23. ngrok のインストール ● CentOS 6 系 $ curl -LO https://dl.ngrok.com/linux_386/ngrok.zip $ sudo unzip ngrok.zip -d /usr/bin ● 確認 $ ngrok -help Usage: ngrok [OPTIONS] <local port or address>
  24. 24. ローカルのポートを公開してみよう ● 8080 ポートを全世界に公開 $ ngrok 8080 ngrok (Ctrl+C to quit) Tunnel Status online Version 1.6/1.7 Forwarding http://1c93e4cf.ngrok.com -> 127.0.0.1:8080 Forwarding https://1c93e4cf.ngrok.com -> 127.0.0.1:8080 Web Interface 127.0.0.1:4040 ● 生成された URL にアクセスして確認 ブラウザで http://1c93e4cf.ngrok.com にアクセス。
  25. 25. おわり

×