Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014

  • View
    22.179

  • Download
    7

  • Category

    Internet

Preview:

DESCRIPTION

 

Citation preview

Docker で遊んでみよっかーYAPC::Asia Tokyo 2014

Masahiro Nagano / @kazeburo

Me• 長野雅広 Masahiro Nagano

• @kazeburo

• Operations Engineer / Site Reliability

• LINE Corp.

• YAPC::Asia 2013 Tokyo ベストトーク賞3位

• ISUCON3 優勝

ISUCON4

ISUCON4かかってこいや!!1

調子乗りました(_ _)

本題

その前に

質問

(1) Dockerを使った事がある方?

• Yes

• No

(2) Dockerをどのplatform上で使っていますか?

• MacOS X (boot2docker,仮想マシン含む)

• Linux

• Windows

Docker で遊んでみよっかー

「遊ぶ」というタイトルにした理由• Dockerはまだ若い技術。しかし、大きな可能性がある技術であり、数えきれないほどの周辺ツールがリリースされている

• つまり、ベストプラクティスが定まっていない• 新しい技術に対して「使う」「使わない」の2つのスタンスしかないことはない

• 手元で「遊んでみる」ことから始めよう

真剣に「遊ぶ」

• 基礎を身につける• 実践的なノウハウを貯める

今日の内容• Docker の基本

• Docker!leとDockerイメージのビルド

• DockerでPerlを使う

• Dockerで自動化

• DockerでWebアプリケーション

Docker の基本

Docker とは• Docker (旧dotcloud) 社が開発したコンテナ管理ツール

Docker とは• Docker (旧dotcloud) 社が開発したコンテナ管理ツール

Docker とは

Docker とは• アプリケーションの開発・配布・実行のためのオープンなプラットフォーム

• Dockerを使ってパッケージング(Dockerized)されたアプリケーションはポータビリティが高く、Mac

OS Xの開発環境、Linux上のQA環境、オンプレミス・クラウド上の本番環境など、(Dockerがサポートされている環境なら)どこでも実行が可能

Docker プラットフォームDocker Hub

Docker!le DockerEngine

アプリケーションの共有と配布

アプリケーションのパッケージング

アプリケーションの実行

コンテナ技術

開発環境 クラウド オンプレミス

コンテナ とは• アプリケーションを実行する環境をHostOS

から隔離させ、それぞれに異なるリソースを提供する。その隔離されたプロセスの組を「コンテナ」という

• アプリケーション毎に隔離された実行環境を用意する手段としてはVM(仮想マシン)もある

Server

Host OS

Hypervisor

VM

Guest OS

Apps

VM

Bin/Libs

VM

Guest OS

Apps

Bin/Libs

VM

Guest OS

Apps

Bin/Libs

Server

Host OS

Docker Engine

Container

Apps

Bin/Libs

Container

Apps

Bin/Libs

Container

Apps

Bin/Libs

VMとコンテナ

Container

同じ独立性を確保しながら、より少ないリソースで動作する

kernelは共有

コンテナの動作

Server

Host OS

Docker Engine

ContainerPr

oces

sContainer

Proc

ess

proc

ess A

proc

ess B

proc

ess C

Docker EngineがHost OSから各リソースを隔離する

Proc

ess

コンテナの動作隔離されるリソース

• ファイルシステム• ネットワーク・ホスト名• プロセステーブル• ユーザ権限• CPU・メモリなどのリソース制御

* Linux Kernelの機能を利用

Docker のインストール(Mac OS Xの場合)

Docker のインストール

1) boot2dockerを導入し、Mac上のdocker

コマンドからAPIを経由して操作

2) Vagrantで任意のLinuxディストリビューションを入れる

Linux Kernel が必要なので、Virtulbox, VMware

などで仮想マシンを起動する必要がある

boot2docker• Dockerの起動に特化した軽量Linuxディストリビューション

boot2docker

Container

Proc

ess

Container

Proc

ess

Proc

ess

Mac OS X

DockerCommand VirtualBox

boot2docker (linux)

Docker DaemonTCP 2375

APIを使ってDockerを制御

Mac用DockerはAPIを呼ぶように作られている

Vagrant• 仮想環境構築ツール。Vagrant!leと言われる設定ファイルを使うことで、自動的に仮想環境の構築ができる

boot2docker vs. Vagrantpros cons

boot2docker・インストールが楽・Mac上からDockerを透過的に扱える

・ファイル共有に難あり

Vagrant・ファイル共有がしやすく

柔軟に設定可能・Guest OSの機能を活用

・Guest OSにログインする必要あり

* 迷いにくい Vagrant を使っていきます

Install VirtualBox & Vagrant

このあたりからダウンロードしてください

VagrantでDocker 手作業編

$ mkdir vagrant-docker$ cd vagrant-docker$ vagrant init chef/centos-6.5$ vagrant up$ vagrant ssh

Mac OS X

VagrantでDocker 手作業編

$ sudo yum install -y http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm$ sudo yum install -y docker-io$ sudo service docker start$ sudo /sbin/chkconfig docker on$ sudo usermod -a -G docker vagrant# ログインしなおして

$ docker -vDocker version 1.1.2, build d84a070/1.1.2

Guest OS

VagrantでDocker 自動化編$ cat Vagrantfile$script = <<EOFyum install -y http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmyum install -y docker-io/sbin/chkconfig docker onusermod -a -G docker vagrantEOFVagrant.configure(2) do |config| config.vm.box = "chef/centos-6.5" config.vm.provision "shell", inline: $scriptend$ vagrant up

Mac OS X

初回起動時に自動で実行

“Hello World”

$ docker run ubuntu:14.04 echo Hello WorldUnable to find image 'ubuntu:14.04' locallyPulling repository ubuntuc4ff7513909d: Download complete 511136ea3c5a: Download complete ...cc58e55aa5a5: Download complete Hello World$

Guest OS起動するベースDockerイメージ

bash で入ってみる$ docker run -i -t ubuntu:14.04 bashroot@0840910014be:/# cat /etc/lsb-release | grep DESCRIPTIONDISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"root@0840910014be:/# exit$

Guest OSstdinの維持とttyの割り当て

コンテナのライフタイム

• OSではなくプロセス

• プロセスの終了でコンテナが終了する• ファイルシステムへの変更も破棄される

time

`echo Hello World`コンテナ起動プロセス終了コンテナも終了

“揮発性のあるコンテナ”

揮発性の確認$ docker run -i -t ubuntu:14.04 bashroot@0840910014be:/# echo “hello world” > /tmp/fooroot@0840910014be:/# exitexit$ docker run -i -t ubuntu:14.04 bashroot@0840910014be:/# ls -l /tmp/fools: cannot access /tmp/foo: No such file or directory

Guest OS

time`bash`

ファイルシステム破棄echo > /tmp

`bash`

新しいコンテナ!

Docker の特徴まとめ

• コンテナ技術を活用したアプリケーションの配布・実行のプラットフォーム

• 揮発性のあるコンテナ• Docker!leと階層化イメージ

次の話題

今日の内容• Docker の基本

• Docker!leとDockerイメージのビルド

• DockerでPerlを使う

• Dockerで自動化

• DockerでWebアプリケーション

Docker!leとDockerイメージのビルド

Docker!le とは• Dockerでコンテナを起動する際のイメージを作る手続きを記したファイル

Docker!le

FROM centos:centos6MAINTAINER Masahiro Nagano <kazeburo@gmail.com>

RUN yum install -y http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmRUN yum install -y sl

CMD sl

Docker!le元となるイメージ

build時に実行するコマンド

docker run時に実行するコマンド

Dockerイメージの作成 #0

$ lsDockerfile Vagrantfile$ vagrant ssh

Mac OS X

$ cd /vagrant$ lsDockerfile Vagrantfile$ docker build -t localdev/sl .

Guest OS

自動でGuestOSにマウントされる

イメージに付けるTag名

Dockerイメージの作成 #1

Dockerイメージの作成 #2

docker build ログ$ docker build -t localdev/sl .Step 0 : FROM centos:centos6 Step 1 : MAINTAINER Masahiro Nagano <kazeburo@gmail.com>Step 2 : RUN yum install -y http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm ---> Running in 2207ff8a8f8c...Step 3 : RUN yum install -y sl...Step 4 : CMD sl ---> Running in 65df9252f6ff ---> a8d304eb9f7cRemoving intermediate container 65df9252f6ffSuccessfully built a8d304eb9f7c$

Guest OS

docker build とイメージの作成

FROM centos:centos6

MAINTAINER Masahiro Nagano

<kazeburo@gmail.com>

RUN yum install -y epel-

release-6-8.noarch.rpm

RUN yum install -y sl

CMD sl

Docker!le

centos6

ファイルシステムの変更点差分イメージを重ねて行く

Dockerはaufs、device-mapper、brtfsなどを使い、差分ファイルシステムを実現している

docker build とイメージの作成

FROM centos:centos6

MAINTAINER Masahiro Nagano

<kazeburo@gmail.com>

RUN yum install -y epel-

release-6-8.noarch.rpm

RUN yum install -y sl

CMD sl

Docker!le

centos6

epel

ファイルシステムの変更点差分イメージを重ねて行く

Dockerはaufs、device-mapper、brtfsなどを使い、差分ファイルシステムを実現している

docker build とイメージの作成

FROM centos:centos6

MAINTAINER Masahiro Nagano

<kazeburo@gmail.com>

RUN yum install -y epel-

release-6-8.noarch.rpm

RUN yum install -y sl

CMD sl

Docker!le

centos6

epel

sl

ファイルシステムの変更点差分イメージを重ねて行く

Dockerはaufs、device-mapper、brtfsなどを使い、差分ファイルシステムを実現している

docker build とイメージの作成

FROM centos:centos6

MAINTAINER Masahiro Nagano

<kazeburo@gmail.com>

RUN yum install -y epel-

release-6-8.noarch.rpm

RUN yum install -y sl

CMD sl

Docker!le

centos6

epel

sl

ファイルシステムの変更点差分イメージを重ねて行く

CMD

Dockerはaufs、device-mapper、brtfsなどを使い、差分ファイルシステムを実現している

差分イメージの枝構造FROM centos:centos6

RUN yum install -y epel.rpm

RUN yum install -y sl

CMD sl

centos6base

epel

sl

CMD

差分イメージの枝構造FROM centos:centos6

RUN yum install -y epel.rpm

RUN yum install -y sl

CMD sl

FROM centos:centos6

RUN yum install -y epel.rpm

RUN yum install -y fortune

CMD fortune

centos6base

epel

sl

CMD

差分イメージの枝構造FROM centos:centos6

RUN yum install -y epel.rpm

RUN yum install -y sl

CMD sl

FROM centos:centos6

RUN yum install -y epel.rpm

RUN yum install -y fortune

CMD fortune

centos6base

epel

sl

CMD

差分イメージの枝構造FROM centos:centos6

RUN yum install -y epel.rpm

RUN yum install -y sl

CMD sl

FROM centos:centos6

RUN yum install -y epel.rpm

RUN yum install -y fortune

CMD fortune

centos6base

epel

sl

Docker!leに変更を加えるとそこから枝が分かれる。

幹は共有する

CMD

差分イメージの枝構造FROM centos:centos6

RUN yum install -y epel.rpm

RUN yum install -y sl

CMD sl

FROM centos:centos6

RUN yum install -y epel.rpm

RUN yum install -y fortune

CMD fortune

centos6base

epel

sl fortune

Docker!leに変更を加えるとそこから枝が分かれる。

幹は共有する

CMD CMD

差分イメージの利点• イメージをネットワーク転送する際に差分のみの転送することで、通信にかかる時間を減らす

• ビルド時に変更点がない箇所の再ビルドを行わずに済み、効率がよい

docker build --no-cache で強制再ビルドできる

Docker!leのよく使うコマンド

“FROM”ベースDockerイメージの指定

FROM <name>:<tag>Docker!le

ベースとなるDockerイメージ名tagを省略すると、latestを使用

“RUN”コマンドの実行

RUN command args argsRUN [“command”,”args”,”args”]

Docker!le

上は [“bash”, ”-c”, “command args args”]

RUN curl -L http://cpanmin.us/ | perl - -n App::cpanminusDocker!le

“COPY”HostOSからコンテナへのファイルコピー

COPY src destDocker!le

“COPY”HostOSからコンテナへのファイルコピー

COPY src destDocker!le

COPY ../src destDocker!le

“COPY”HostOSからコンテナへのファイルコピー

COPY src destDocker!le

COPY ../src destDocker!le

docker build時にDocker!leのあるディレクトリを一時的に領域にコピーしてからビルド開始するのでディレクトリをさかのぼることはできない

“COPY”HostOSからコンテナへのファイルコピー

FROM centos:centos6

COPY README.md /opt/README.md

RUN yum install -y sl

CMD sl

centos6base

COPY

sl

CMD

$ touch README.md

$ docker build .

“COPY”HostOSからコンテナへのファイルコピー

FROM centos:centos6

COPY README.md /opt/README.md

RUN yum install -y sl

CMD sl

centos6base

COPY

sl

CMD

$ touch README.md

$ docker build .

“COPY”HostOSからコンテナへのファイルコピー

FROM centos:centos6

COPY README.md /opt/README.md

RUN yum install -y sl

CMD sl

centos6base

COPY

sl sl’

CMD CMD’

$ touch README.md

$ docker build .

“ADD”

“ADD”COPYより前からあるコマンド

URIを指定できたり、tarファイルを自動解凍できる

必要なければ使わない方がよい

“ENV”環境変数

ENV PLACK_ENV productionENV PATH $PATH:/opt/local/perl-5.20/bin

Docker!le

ENV KEY NAMEDocker!le

変数も使用できる

“CMD”docker run時に起動するコマンド

CMD command args argsDocker!le

CMD [“command”,”args”,”args”]

上は [“bash”, ”-c”, “command args args”]  “RUN” と一緒

“EXPOSE”コンテナ内のプロセスがListenするポート

EXPORT PORT_NUMDocker!le

EXPORT 11211CMD memcached -p 11211 -u nobody -m 1024 -c 100000

Docker!le

docker run -p 22122:11211 localdev/memcached

Host側のPort

コンテナのPort

Docker!le Reference

https://docs.docker.com/reference/builder/

今日の内容• Docker の基本

• Docker!leとDockerイメージのビルド

• DockerでPerlを使う

• Dockerで自動化

• DockerでWebアプリケーション

DockerでPerlを使う

System Perl$ docker run -i -t ubuntu:14.04 bashroot@8ac58f29a17a:/# perl -v

This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi(with 41 registered patches, see perl -V for more detail)

Copyright 1987-2013, Larry Wall

Perl may be copied only under the terms of either the Artistic License or theGNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found onthis system using "man perl" or "perldoc perl". If you have access to theInternet, point your browser at http://www.perl.org/, the Perl Home Page.

root@8ac58f29a17a:/#

Guest OS

ubuntuの場合

System Perl$ docker run -i -t centos:centos6 bash

Guest OS

CentOSの場合

System Perl$ docker run -i -t centos:centos6 bashbash-4.1# perl -v

Guest OS

CentOSの場合

System Perl$ docker run -i -t centos:centos6 bashbash-4.1# perl -vbash: perl: command not foundbash-4.1#

Guest OS

CentOSの場合

CentOSはイメージサイズを小さくするために perl は削られている!

Perlの入ったイメージを使う

registry.hub.docker.com

Perlで検索!

registry.hub.docker.com

53件

registry.hub.docker.com

53件

どれを使えば良いんだろう~

Dockerイメージを選ぶ基準• official repository

• Docker!leが公開されている

• Description、Docker!leをみてニーズを満たしているかどうか確認する

• Automated build repository を利用している

Automated build repository

Dockerfile

push

Automated build repository

Dockerfile

push

webhook

Automated build repository

Dockerfile

push

webhook docker build

Automated build repository

Dockerfile

push

webhook docker build

push

Automated build repository

Dockerfile

push

webhook docker build

pushbuildの過程に人の手が入らない

Dockerイメージを選ぶ基準

Dockerイメージを選ぶ基準

automated build

Docker!le

github repository

おすすめ Docker イメージ

• perl

• jmmills/plenv

• kazeburo/perl

• 自分で作る

kazeburo/perl の使い方$ docker run -i -t kazeburo/perl:v5.18 perl -vThis is perl 5, version 18, subversion 1 (v5.18.1) built for x86_64-linux

Copyright 1987-2013, Larry Wall..$

Guest OS

kazeburo/perl の使い方

FROM kazeburo/perl:v5.18RUN cpanm -n PlackCMD plackup -v

Docker!le

cpanmも導入済み

$ docker build -t localdev/perl .$ docker run localdev/perl Plack 1.0031$

GuestOS

今日の内容• Docker の基本

• Docker!leとDockerイメージのビルド

• DockerでPerlを使う

• Dockerで自動化

• DockerでWebアプリケーション

Docker で自動化

Docker の主な利用法

(Web)アプリケーションの実行≒

Docker を利用したperl-buildスクリプトのfatpack

Docker の活用例速い起動速度と揮発性を利用

fatpack• 依存モジュールをすべてひとつのscript

!leにまとめ、配布しやすくする

• App::FatPacker が使われる

• cpamn でも使用

perl-build• tokuhiromによるPerlをビルドするためのユーティリティモジュール・スクリプト

• ダウンロードとビルドを面倒見てくれる• plenvやxbuildで利用されている

• co-maintainerやってます

perl-build 使い方

$ curl -s https://raw.githubusercontent.com/tokuhirom/Perl-Build/master/perl-build | perl - 5.20.0 ~/local/perl-5.20

shell

依存モジュールのインストールなく使える

fatpackの手順• サポートしたい一番古いperlを用意

perl-buildでは “5.8.5”

• ExtUtils::MakeMaker のアップデートperl-5.12以前なら “6.56” をいれる

• cpanm, App::FatPacker をインストール

• 依存モジュールのインストール・アップデート

• fatpack

fatpackの手順• サポートしたい一番古いperlを用意

perl-buildでは “5.8.5”

• ExtUtils::MakeMaker のアップデートperl-5.12以前なら “6.56” をいれる

• cpanm, App::FatPacker をインストール

• 依存モジュールのインストール・アップデート

• fatpack

再利用が可能

Dockerを使ってみよっかー

FROM jmmills/plenv-base:latestRUN plenv install 5.8.5ENV PLENV_VERSION 5.8.5RUN curl -L http://cpanmin.us/ | plenv exec perl - -n ExtUtils::MakeMaker@6.56RUN curl -L http://cpanmin.us/ | plenv exec perl - -n App::cpanminusRUN curl -L http://cpanmin.us/ | plenv exec perl - -n Perl::Strip App::FatPackerRUN plenv rehashCMD bash -l -c 'cd /perl-build; cpanm -n --installdeps . ; bash author/fatpack.sh'

Docker!le

Dockerを使ったfatpack

$ git clone https://github.com/tokuhirom/Perl-Build.git$ cd Perl-Build/author$ docker build -t perl-build .$ docker run -v ../:/perl-build perl-build

GuestOS

Dockerを使ったfatpack

“Perl-Build” ディレクトリをコンテナ内の”/perl-build”にマウント

-v オプション毎回指定するの面倒だし、もっと言うと、Docker のインストールから

自動化したい。そうすると誰でも簡単に確実に

perl-buildのfatpackが実行できる

Vagrant + Docker の合わせ技

Vagrant+DockerVagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.synced_folder "../", "/perl-build" config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" end config.vm.provision "shell", run: "always", inline: "docker run -v /perl-build:/perl-build perl-build" config.vm.provision "destroy", destroy: false, run: "always"end

Vagrant!le

Vagrant+DockerVagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.synced_folder "../", "/perl-build" config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" end config.vm.provision "shell", run: "always", inline: "docker run -v /perl-build:/perl-build perl-build" config.vm.provision "destroy", destroy: false, run: "always"end

Vagrant!le/path/to/perl-buildをGuestOSの

/perl-buildにマウント

Vagrant+DockerVagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.synced_folder "../", "/perl-build" config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" end config.vm.provision "shell", run: "always", inline: "docker run -v /perl-build:/perl-build perl-build" config.vm.provision "destroy", destroy: false, run: "always"end

Vagrant!le/path/to/perl-buildをGuestOSの

/perl-buildにマウント

docker provisionerを使うと自動でGuestOSにdockerが入る

Vagrant+DockerVagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.synced_folder "../", "/perl-build" config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" end config.vm.provision "shell", run: "always", inline: "docker run -v /perl-build:/perl-build perl-build" config.vm.provision "destroy", destroy: false, run: "always"end

Vagrant!le/path/to/perl-buildをGuestOSの

/perl-buildにマウント

docker provisionerを使うと自動でGuestOSにdockerが入る

shell provisionerでdocker run

Vagrant+DockerVagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.synced_folder "../", "/perl-build" config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" end config.vm.provision "shell", run: "always", inline: "docker run -v /perl-build:/perl-build perl-build" config.vm.provision "destroy", destroy: false, run: "always"end

Vagrant!le/path/to/perl-buildをGuestOSの

/perl-buildにマウント

docker provisionerを使うと自動でGuestOSにdockerが入る

shell provisionerでdocker runGuestOSを自動で停止余計なリソース使わない

docker provisionerでdocker runを行わない理由

config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" d.run “perl-build”end

Vagrant!le

docker provisionerで run

これだと、fatpackが終わる前に、vagrant upが終わり、元のシェルにもどってしまい、いつfatpackが完了するか分からない

Vagrant+Docker$ vagrant plugin install vagrant-destroy-provisioner$ vagrat up=> GuestOSの起動

=> docker provisionerでDockerイメージのビルド

=> shell provisioner経由でdocker run

==> 依存モジュールのインストール

==> fatpack$ git status ../perl-build..# modified: ../perl-build..$

MacOS X

fatpackしたperl-buildコマンドの動作チェックも Docker でやると

捗ると思うのでpull-req お待ちしています(_ _)

今日の内容• Docker の基本

• Docker!leとDockerイメージのビルド

• DockerでPerlを使う

• Dockerで自動化

• DockerでWebアプリケーション

DockerでWebアプリケーション

題材

WebアプリケーションのDocker への Deploy

FROM perl:v5.20

COPY . /opt/app

RUN carton install

CMD carton exec -- plackup

docker イメージ

docker buildFROM kazeburo/perl:v5.20RUN mkdir -p /opt/appCOPY ./cpanfile /opt/app/cpanfileCOPY ./cpanfile.snapshot /opt/app/cpanfile.snapshotWORKDIR /opt/appRUN carton install --deploymentEXPOSE 5000COPY . /opt/appCMD carton exec -- plackup -s Starlet --port 5000 -a app.psgi

Docker!le 先にcpan!leをコピーしcarton installを行う事で

cacheを有効活用

残りをコピー

docker build

local

.dockerignore

.gitignore と同じような役割local をコンテナ内にコピーしない

アプリケーションの起動$ docker build -t app .$ docker run -p 15000:5000 app

GuestOS

コンテナのPortHost側のPort

Vagrantでport_forward

Vagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.network "forwarded_port", guest:15000, host:25000 config.vm.provision "docker", run: "always" do |d| d.pull_images "kazeburo/perl:v5.20" endend

Vagrant!le

Macのtcp 25000 をGuestOSの 15000 に

forward

Mac/Vagrant GuestOS コンテナ

50001500025000

ブラウザでの確認

http://127.0.0.1:25000/

Docker でWebアプリケーション残りの課題

• ログの取り扱い• MySQLなどの接続情報の受け渡し

• 性能評価• イメージビルド・デプロイ手段• 監視

まだまだ厳しい...

引き続き Docker で遊びながら最新情報を追っていきたいと

考えております

ご清聴ありがとうございました