SlideShare a Scribd company logo
1 of 58
Download to read offline
2014/12/19 shin1x1
DevLove 関西
ビルドサーバで使う
Docker
Agenda
(c) 2014 Masashi Shinbara @shin1x1
• 開発構成
• 旧ビルドサーバ(Docker導入前)
• 現ビルドサーバ(Docker導入後)
• Docker in CI
• 運用してみて
• まとめ
開発構成
(c) 2014 Masashi Shinbara @shin1x1
PHPプロジェクト
(c) 2014 Masashi Shinbara @shin1x1
• Web アプリケーション開発
• PHP / Webサーバ / DB / KVS 等々
• PHPUnit で自動テスト
ビルドサーバ
(c) 2014 Masashi Shinbara @shin1x1
• Jenkins サーバ
• PHPUnit によるテスト実行
• デプロイ [ステージング / 本番]
• (カバレッジ計測、静的解析等)
旧ビルドサーバ
(c) 2014 Masashi Shinbara @shin1x1
(c) 2014 Masashi Shinbara @shin1x1
構成
Mac
(1) git push
(2) hook
(3) git pull
社内サーバ
(4) notification
社内Jenkinsサーバ
(c) 2014 Masashi Shinbara @shin1x1
• 2009年頃構築
• 複数プロジェクトを管理
• 1サーバに別バージョンのPHPやDBを同居
• ビルドタスクを欲張る

(カバレッジ、APIドキュメント、静的解析等)
困っていたこと
(c) 2014 Masashi Shinbara @shin1x1
• プロジェクト毎の環境構築が面倒

(パスやポートを変えて同居)
• トラブルシューティングが面倒
• git push の度にサーバが唸る
困っていたこと
(c) 2014 Masashi Shinbara @shin1x1
• プロジェクト毎の環境構築が面倒

(パスやポートを変えて同居)
• トラブルシューティングが面倒
• git push の度にサーバが唸る
困っていたこと
(c) 2014 Masashi Shinbara @shin1x1
• プロジェクト毎の環境構築が面倒

(パスやポートを変えて同居)
• トラブルシューティングが面倒
• git push の度にサーバが唸る
現ビルドサーバ
(c) 2014 Masashi Shinbara @shin1x1
(c) 2014 Masashi Shinbara @shin1x1
構成
Mac
private repo
(1) git push
ビルドサーバ(さくらVPS)
(2) hook
(3) git pull
(4) docker build & docker run
(5) notification
現Jenkinサーバ
(c) 2014 Masashi Shinbara @shin1x1
• さくらのVPS(2G)/ 月々1,580円
• Memory: 2GB
• CPU: 仮想3Core
• HDD: 200GB
• CentOS 6.6
構成のポイント
(c) 2014 Masashi Shinbara @shin1x1
• 外部サーバ、SaaS を利用
• Dockerでビルド環境を構築
• タスクを自動テスト実行に絞る
Docker in CI
(c) 2014 Masashi Shinbara @shin1x1
Dockerの利用方針
(c) 2014 Masashi Shinbara @shin1x1
• アプリケーションが動作する環境を

1 コンテナに集約
• Dockerfile を push して、

Jenkins サーバでイメージを生成
• アプリケーションは、ホストからマウント

コンテナは、実行環境に徹する
(c) 2014 Masashi Shinbara @shin1x1
構成
Mac
private repo
(1) git push
CI サーバ(さくらVPS)
(2) hook
(3) git pull
(4) docker build & docker run
(c) 2014 Masashi Shinbara @shin1x1
Dockerfile
Mac
Dockerfile
private repo
CI サーバ(さくらVPS)
Dockerfile
(c) 2014 Masashi Shinbara @shin1x1
• Dockerfile とプロビジョンファイルを用意
• プロビジョンには Ansible を利用
• 開発プロジェクトと同じリポジトリで管理
FROM centos:centos6
# Ansible インストール、プロビジョン
RUN …
# Supervisor インストール
RUN …
# アプリケーションセットアップ、テスト実行
CMD …
Dockerfile
FROM centos:centos6
# Ansible インストール
RUN …
# Supervisor インストール
RUN …
# アプリケーションセットアップ、テスト実行
CMD …
Dockerfile
CentOS
Official Image
FROM centos:centos6
# Ansible インストール、プロビジョン
RUN …
# Supervisor インストール
RUN …
# アプリケーションセットアップ、テスト実行
CMD …
Dockerfile
プロビジョン
FROM centos:centos6
# Ansible インストール、プロビジョン
RUN …
# Supervisor インストール
RUN …
# アプリケーションセットアップ、テスト実行
CMD …
Dockerfile
サービス起動用
FROM centos:centos6
# Ansible インストール、プロビジョン
RUN …
# Supervisor インストール
RUN …
# アプリケーションセットアップ、テスト実行
CMD …
Dockerfile
コンテナ実行コマンド
Ansible
(c) 2014 Masashi Shinbara @shin1x1
• コンテナにインストール
• ローカルコネクションで自身にプロビジョン
• playbookやroleを別環境

(開発、ステージング等)と共有
• レイヤを節約
RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/
epel/6/i386/epel-release-6-8.noarch.rpm
RUN yum -y install ansible libselinux-python sudo
ADD provision /opt/provision
RUN ansible-playbook /opt/provision/docker.yml --
connection=local -i /opt/provision/localhost -vv
Ansible
RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/
epel/6/i386/epel-release-6-8.noarch.rpm
RUN yum -y install ansible libselinux-python sudo
ADD provision /opt/provision
RUN ansible-playbook /opt/provision/docker.yml --
connection=local -i /opt/provision/localhost -vv
Ansible
Ansibleインストール
RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/
epel/6/i386/epel-release-6-8.noarch.rpm
RUN yum -y install ansible libselinux-python sudo
ADD provision /opt/provision
RUN ansible-playbook /opt/provision/docker.yml --
connection=local -i /opt/provision/localhost -vv
Ansible
プロビジョンファイルをインポート
RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/
epel/6/i386/epel-release-6-8.noarch.rpm
RUN yum -y install ansible libselinux-python sudo
ADD provision /opt/provision
RUN ansible-playbook /opt/provision/docker.yml --
connection=local -i /opt/provision/localhost -vv
Ansible
ansible-playbook 実行
(ローカルコネクション)
Supervisor
(c) 2014 Masashi Shinbara @shin1x1
• デーモンプロセスを起動(死活監視込)
• 1プロセスで、複数のデーモンを起動
• Webサーバ、DB を起動
RUN yum -y install python-setuptools
RUN easy_install supervisor
ADD docker/supervisord.conf /etc/supervisord.conf
Supervisor
Supervisor インストール
RUN yum -y install python-setuptools
RUN easy_install supervisor
ADD docker/supervisord.conf /etc/supervisord.conf
Supervisor
設定ファイルをインポート
コンテナコマンド
(c) 2014 Masashi Shinbara @shin1x1
• Supervisor を起動
• composer install(依存解決)
• DBマイグレーション
• PHPUnit(自動テスト)実行
コンテナコマンド
CMD /usr/bin/supervisord -c /etc/supervisord.conf && 
cd /share && 
/usr/bin/composer install && 
php artisan migrate --env=testing && 
./vendor/bin/phpunit --log-junit 
/share/reports/junit.xml 
—coverage-html /share/reports/coverage 
—coverage-clover /share/reports/coverage.xml
CMD /usr/bin/supervisord -c /etc/supervisord.conf && 
cd /share && 
/usr/bin/composer install && 
php artisan migrate --env=testing && 
./vendor/bin/phpunit --log-junit 
/share/reports/junit.xml 
—coverage-html /share/reports/coverage 
—coverage-clover /share/reports/coverage.xml
コンテナコマンド
Supervisor 起動
CMD /usr/bin/supervisord -c /etc/supervisord.conf && 
cd /share && 
/usr/bin/composer install && 
php artisan migrate --env=testing && 
./vendor/bin/phpunit --log-junit 
/share/reports/junit.xml 
—coverage-html /share/reports/coverage 
—coverage-clover /share/reports/coverage.xml
コンテナコマンド
依存解決
CMD /usr/bin/supervisord -c /etc/supervisord.conf && 
cd /share && 
/usr/bin/composer install && 
php artisan migrate --env=testing && 
./vendor/bin/phpunit --log-junit 
/share/reports/junit.xml 
—coverage-html /share/reports/coverage 
—coverage-clover /share/reports/coverage.xml
コンテナコマンド
DBマイグレーション
CMD /usr/bin/supervisord -c /etc/supervisord.conf && 
cd /share && 
/usr/bin/composer install && 
php artisan migrate --env=testing && 
./vendor/bin/phpunit --log-junit 
/share/reports/junit.xml 
—coverage-html /share/reports/coverage 
—coverage-clover /share/reports/coverage.xml
コンテナコマンド
自動テスト実行
(c) 2014 Masashi Shinbara @shin1x1
Jenkinsで実行
Mac
private repo
CI サーバ(さくらVPS)
docker build && run
Jenkinsで実行
(c) 2014 Masashi Shinbara @shin1x1
• git pull でリポジトリから Dockerfile 取得
• docker build でイメージ生成
• docker run でコンテナ実行
• 結果レポートを Jenkins で表示
Jenkinsで実行
(c) 2014 Masashi Shinbara @shin1x1
Jenkinsで実行
(c) 2014 Masashi Shinbara @shin1x1
sudo docker build -t ${JOB_NAME} .
sudo docker run -v ${WORKSPACE}/src:/share ${JOB_NAME}
docker build
(c) 2014 Masashi Shinbara @shin1x1
• Dockerfile からイメージをビルド
• ジョブ名(${JOB_NAME})をイメージ名に
sudo docker build -t ${JOB_NAME} .
docker run
(c) 2014 Masashi Shinbara @shin1x1
• 生成したイメージからコンテナ実行
• -v で、アプリケーションディレクトリを

マウント
sudo docker run -v ${WORKSPACE}/src:/share ${JOB_NAME}
マウントディレクトリ対応
(c) 2014 Masashi Shinbara @shin1x1
${WORKSPACE}/src
+ application_code
+ build/
/share
+ application_code
+ build/
ホスト(Jenkins) コンテナ
アプリケーション
(c) 2014 Masashi Shinbara @shin1x1
${WORKSPACE}/src
+ application_code
+ build/
/share
+ application_code
+ build/
ホスト(Jenkins) コンテナ
アプリケーションを参照
結果レポート
(c) 2014 Masashi Shinbara @shin1x1
${WORKSPACE}/src
+ application_code
+ build/
/share
+ application_code
+ build/
ホスト(Jenkins) コンテナ
/share/build/ に
結果ログを出力
結果レポート
(c) 2014 Masashi Shinbara @shin1x1
${WORKSPACE}/src
+ application_code
+ build/
/share
+ application_code
+ build/
ホスト(Jenkins) コンテナ
build/ のログから
結果レポート生成
結果レポート
(c) 2014 Masashi Shinbara @shin1x1
8ヶ月運用してみて
(c) 2014 Masashi Shinbara @shin1x1
Dockerコンテナの良さ
(c) 2014 Masashi Shinbara @shin1x1
• プロジェクト毎に独立した環境
• 軽量なので、低スペック機でも利用可能
• 毎回、作って、使って、捨ててなので、管理が楽
• どこでも同じコンテナが作れるので、メンテが楽

(boot2docker で検証できる)
突然のテスト失敗
(c) 2014 Masashi Shinbara @shin1x1
• 開発環境で all green だったテストがこける
• なぜか依存解決で失敗
• コンテナから外部へ通信できない><
• docker デーモン再起動で解決
突然のテスト失敗2
(c) 2014 Masashi Shinbara @shin1x1
• docker デーモン再起動でも復旧せず
• yum install でエラー
• EPEL の CA証明書の期限切れ
• ベースイメージを更新

(yum update ca-certificates でも ok)
今後
(c) 2014 Masashi Shinbara @shin1x1
• ステージングサーバへのコンテナデプロイ
• docker コンテナ実行環境は

クラウドサービスに任せたい
• コンテナレポジトリも任せたい
• 全部自分でやるなら、PaaS の方が楽
まとめ
(c) 2014 Masashi Shinbara @shin1x1
(c) 2014 Masashi Shinbara @shin1x1
まとめ
• マルチな環境を同居させるのに便利
• ビルド、ジョブワーカーなど

使い捨ての環境なら、実用的
• 常に起動するサービスなら、

docker デーモン運用、デプロイ、監視等々を

Dockerクラウドサービスに任せたい
@shin1x1
(c) 2014 Masashi Shinbara @shin1x1

More Related Content

What's hot

Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使うMasashi Shinbara
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンMasashi Shinbara
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話Daijiro Abe
 
さくらのインフラコード
さくらのインフラコードさくらのインフラコード
さくらのインフラコードYukihiko SAWANOBORI
 
コンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chefコンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-ChefYukihiko SAWANOBORI
 
Ansibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするAnsibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするRyo Adachi
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundryコンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud FoundryKazuto Kusama
 
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? WayOpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Wayロフト くん
 
Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築Nakazawa Yuichi
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE辰徳 斎藤
 
Alpine linuxを触ってみよう
Alpine linuxを触ってみようAlpine linuxを触ってみよう
Alpine linuxを触ってみようRyo Adachi
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacTakeshi Komiya
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみようHiroaki_UKAJI
 
はじめての Cloud Foundry: .NET アプリケーションのはじめ方
はじめての Cloud Foundry: .NET アプリケーションのはじめ方はじめての Cloud Foundry: .NET アプリケーションのはじめ方
はじめての Cloud Foundry: .NET アプリケーションのはじめ方Akihiro Kitada
 
Vagrant入門以前
Vagrant入門以前Vagrant入門以前
Vagrant入門以前katanyan
 
開発環境をVagrantからdockerに移行してみた
開発環境をVagrantからdockerに移行してみた開発環境をVagrantからdockerに移行してみた
開発環境をVagrantからdockerに移行してみたpyar6329
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみようRyo Adachi
 

What's hot (20)

Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使う
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオン
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話
 
さくらのインフラコード
さくらのインフラコードさくらのインフラコード
さくらのインフラコード
 
コンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chefコンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chef
 
Ansibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするAnsibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングする
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
ProjectAtomic-and-geard
ProjectAtomic-and-geardProjectAtomic-and-geard
ProjectAtomic-and-geard
 
コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundryコンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundry
 
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? WayOpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Way
 
Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築
 
Dockerと継続的インテグレーション
Dockerと継続的インテグレーションDockerと継続的インテグレーション
Dockerと継続的インテグレーション
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
 
Alpine linuxを触ってみよう
Alpine linuxを触ってみようAlpine linuxを触ってみよう
Alpine linuxを触ってみよう
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみよう
 
はじめての Cloud Foundry: .NET アプリケーションのはじめ方
はじめての Cloud Foundry: .NET アプリケーションのはじめ方はじめての Cloud Foundry: .NET アプリケーションのはじめ方
はじめての Cloud Foundry: .NET アプリケーションのはじめ方
 
Vagrant入門以前
Vagrant入門以前Vagrant入門以前
Vagrant入門以前
 
開発環境をVagrantからdockerに移行してみた
開発環境をVagrantからdockerに移行してみた開発環境をVagrantからdockerに移行してみた
開発環境をVagrantからdockerに移行してみた
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみよう
 

Viewers also liked

Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリFirebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリFumihiko Shiroyama
 
アプリチームを支えるSlack bot
アプリチームを支えるSlack botアプリチームを支えるSlack bot
アプリチームを支えるSlack botKazuaki KURIU
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムKouhei Sutou
 
Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Futoshi Endo
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説Fumiya Sakai
 
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Fumiya Sakai
 
20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With LaravelTakumi Yoshida
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!Kouhei Sutou
 
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3Fumiya Sakai
 
Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Yuuki Takezawa
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebaseTakuji Shimokawa
 
わかってるフレームワーク Laravel
わかってるフレームワーク Laravelわかってるフレームワーク Laravel
わかってるフレームワーク LaravelMasashi Shinbara
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうSyouta Tada
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントカスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントFumiya Sakai
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付きMayumi Narisawa
 
Laravel の学び方と得られる学び
Laravel の学び方と得られる学びLaravel の学び方と得られる学び
Laravel の学び方と得られる学びMasaru Matsuo
 
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチKazuaki KURIU
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築Masashi Shinbara
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみたJaeseop Jeong
 

Viewers also liked (20)

Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリFirebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
 
アプリチームを支えるSlack bot
アプリチームを支えるSlack botアプリチームを支えるSlack bot
アプリチームを支えるSlack bot
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
 
Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
 
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
 
20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
 
Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩
 
3 tips of Laravel
3 tips of Laravel3 tips of Laravel
3 tips of Laravel
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebase
 
わかってるフレームワーク Laravel
わかってるフレームワーク Laravelわかってるフレームワーク Laravel
わかってるフレームワーク Laravel
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろう
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントカスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
 
Laravel の学び方と得られる学び
Laravel の学び方と得られる学びLaravel の学び方と得られる学び
Laravel の学び方と得られる学び
 
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみた
 

Similar to ビルドサーバで使うDocker

今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでRyo Nakamaru
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎Daisuke Hiraoka
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~decode2016
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker74th
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキングTakayuki Kondou
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコムTomoyaTakegoshi
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようTakashi Makino
 
サーバー設定自動化は経営課題
サーバー設定自動化は経営課題 サーバー設定自動化は経営課題
サーバー設定自動化は経営課題 Maho Takara
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 

Similar to ビルドサーバで使うDocker (20)

今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~
 
130412 kayac-cinnamon
130412 kayac-cinnamon130412 kayac-cinnamon
130412 kayac-cinnamon
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker
 
20170124 linux basic_2
20170124 linux basic_220170124 linux basic_2
20170124 linux basic_2
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
 
hbstudy37 doc
hbstudy37 dochbstudy37 doc
hbstudy37 doc
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
 
サーバー設定自動化は経営課題
サーバー設定自動化は経営課題 サーバー設定自動化は経営課題
サーバー設定自動化は経営課題
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Word bench7月号
Word bench7月号Word bench7月号
Word bench7月号
 

More from Masashi Shinbara

日本語消えたスライド
日本語消えたスライド日本語消えたスライド
日本語消えたスライドMasashi Shinbara
 
Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Masashi Shinbara
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-Masashi Shinbara
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2Masashi Shinbara
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPressMasashi Shinbara
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Masashi Shinbara
 
How to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationHow to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationMasashi Shinbara
 
Azure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションAzure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションMasashi Shinbara
 
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るPHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るMasashi Shinbara
 
Laravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログインLaravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログインMasashi Shinbara
 
キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!Masashi Shinbara
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようMasashi Shinbara
 
Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Masashi Shinbara
 
10分で分かる最近のCakePHP
10分で分かる最近のCakePHP10分で分かる最近のCakePHP
10分で分かる最近のCakePHPMasashi Shinbara
 

More from Masashi Shinbara (18)

日本語消えたスライド
日本語消えたスライド日本語消えたスライド
日本語消えたスライド
 
Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
 
How to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationHow to learn Laravel5 application from Authentication
How to learn Laravel5 application from Authentication
 
Azure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションAzure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーション
 
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るPHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知る
 
Laravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログインLaravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログイン
 
キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!
 
Composer 再入門
Composer 再入門Composer 再入門
Composer 再入門
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみよう
 
いまどきのPHP
いまどきのPHPいまどきのPHP
いまどきのPHP
 
PHP 5.5 Zend OPcache
PHP 5.5 Zend OPcachePHP 5.5 Zend OPcache
PHP 5.5 Zend OPcache
 
サーバの防災訓練
サーバの防災訓練サーバの防災訓練
サーバの防災訓練
 
Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告
 
10分で分かる最近のCakePHP
10分で分かる最近のCakePHP10分で分かる最近のCakePHP
10分で分かる最近のCakePHP
 

Recently uploaded

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (11)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

ビルドサーバで使うDocker

  • 2. Agenda (c) 2014 Masashi Shinbara @shin1x1 • 開発構成 • 旧ビルドサーバ(Docker導入前) • 現ビルドサーバ(Docker導入後) • Docker in CI • 運用してみて • まとめ
  • 3. 開発構成 (c) 2014 Masashi Shinbara @shin1x1
  • 4. PHPプロジェクト (c) 2014 Masashi Shinbara @shin1x1 • Web アプリケーション開発 • PHP / Webサーバ / DB / KVS 等々 • PHPUnit で自動テスト
  • 5. ビルドサーバ (c) 2014 Masashi Shinbara @shin1x1 • Jenkins サーバ • PHPUnit によるテスト実行 • デプロイ [ステージング / 本番] • (カバレッジ計測、静的解析等)
  • 7. (c) 2014 Masashi Shinbara @shin1x1 構成 Mac (1) git push (2) hook (3) git pull 社内サーバ (4) notification
  • 8. 社内Jenkinsサーバ (c) 2014 Masashi Shinbara @shin1x1 • 2009年頃構築 • 複数プロジェクトを管理 • 1サーバに別バージョンのPHPやDBを同居 • ビルドタスクを欲張る
 (カバレッジ、APIドキュメント、静的解析等)
  • 9. 困っていたこと (c) 2014 Masashi Shinbara @shin1x1 • プロジェクト毎の環境構築が面倒
 (パスやポートを変えて同居) • トラブルシューティングが面倒 • git push の度にサーバが唸る
  • 10. 困っていたこと (c) 2014 Masashi Shinbara @shin1x1 • プロジェクト毎の環境構築が面倒
 (パスやポートを変えて同居) • トラブルシューティングが面倒 • git push の度にサーバが唸る
  • 11. 困っていたこと (c) 2014 Masashi Shinbara @shin1x1 • プロジェクト毎の環境構築が面倒
 (パスやポートを変えて同居) • トラブルシューティングが面倒 • git push の度にサーバが唸る
  • 13. (c) 2014 Masashi Shinbara @shin1x1 構成 Mac private repo (1) git push ビルドサーバ(さくらVPS) (2) hook (3) git pull (4) docker build & docker run (5) notification
  • 14. 現Jenkinサーバ (c) 2014 Masashi Shinbara @shin1x1 • さくらのVPS(2G)/ 月々1,580円 • Memory: 2GB • CPU: 仮想3Core • HDD: 200GB • CentOS 6.6
  • 15. 構成のポイント (c) 2014 Masashi Shinbara @shin1x1 • 外部サーバ、SaaS を利用 • Dockerでビルド環境を構築 • タスクを自動テスト実行に絞る
  • 16. Docker in CI (c) 2014 Masashi Shinbara @shin1x1
  • 17. Dockerの利用方針 (c) 2014 Masashi Shinbara @shin1x1 • アプリケーションが動作する環境を
 1 コンテナに集約 • Dockerfile を push して、
 Jenkins サーバでイメージを生成 • アプリケーションは、ホストからマウント
 コンテナは、実行環境に徹する
  • 18. (c) 2014 Masashi Shinbara @shin1x1 構成 Mac private repo (1) git push CI サーバ(さくらVPS) (2) hook (3) git pull (4) docker build & docker run
  • 19. (c) 2014 Masashi Shinbara @shin1x1 Dockerfile Mac Dockerfile private repo CI サーバ(さくらVPS)
  • 20. Dockerfile (c) 2014 Masashi Shinbara @shin1x1 • Dockerfile とプロビジョンファイルを用意 • プロビジョンには Ansible を利用 • 開発プロジェクトと同じリポジトリで管理
  • 21. FROM centos:centos6 # Ansible インストール、プロビジョン RUN … # Supervisor インストール RUN … # アプリケーションセットアップ、テスト実行 CMD … Dockerfile
  • 22. FROM centos:centos6 # Ansible インストール RUN … # Supervisor インストール RUN … # アプリケーションセットアップ、テスト実行 CMD … Dockerfile CentOS Official Image
  • 23. FROM centos:centos6 # Ansible インストール、プロビジョン RUN … # Supervisor インストール RUN … # アプリケーションセットアップ、テスト実行 CMD … Dockerfile プロビジョン
  • 24. FROM centos:centos6 # Ansible インストール、プロビジョン RUN … # Supervisor インストール RUN … # アプリケーションセットアップ、テスト実行 CMD … Dockerfile サービス起動用
  • 25. FROM centos:centos6 # Ansible インストール、プロビジョン RUN … # Supervisor インストール RUN … # アプリケーションセットアップ、テスト実行 CMD … Dockerfile コンテナ実行コマンド
  • 26. Ansible (c) 2014 Masashi Shinbara @shin1x1 • コンテナにインストール • ローカルコネクションで自身にプロビジョン • playbookやroleを別環境
 (開発、ステージング等)と共有 • レイヤを節約
  • 27. RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/ epel/6/i386/epel-release-6-8.noarch.rpm RUN yum -y install ansible libselinux-python sudo ADD provision /opt/provision RUN ansible-playbook /opt/provision/docker.yml -- connection=local -i /opt/provision/localhost -vv Ansible
  • 28. RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/ epel/6/i386/epel-release-6-8.noarch.rpm RUN yum -y install ansible libselinux-python sudo ADD provision /opt/provision RUN ansible-playbook /opt/provision/docker.yml -- connection=local -i /opt/provision/localhost -vv Ansible Ansibleインストール
  • 29. RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/ epel/6/i386/epel-release-6-8.noarch.rpm RUN yum -y install ansible libselinux-python sudo ADD provision /opt/provision RUN ansible-playbook /opt/provision/docker.yml -- connection=local -i /opt/provision/localhost -vv Ansible プロビジョンファイルをインポート
  • 30. RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/ epel/6/i386/epel-release-6-8.noarch.rpm RUN yum -y install ansible libselinux-python sudo ADD provision /opt/provision RUN ansible-playbook /opt/provision/docker.yml -- connection=local -i /opt/provision/localhost -vv Ansible ansible-playbook 実行 (ローカルコネクション)
  • 31. Supervisor (c) 2014 Masashi Shinbara @shin1x1 • デーモンプロセスを起動(死活監視込) • 1プロセスで、複数のデーモンを起動 • Webサーバ、DB を起動
  • 32. RUN yum -y install python-setuptools RUN easy_install supervisor ADD docker/supervisord.conf /etc/supervisord.conf Supervisor Supervisor インストール
  • 33. RUN yum -y install python-setuptools RUN easy_install supervisor ADD docker/supervisord.conf /etc/supervisord.conf Supervisor 設定ファイルをインポート
  • 34. コンテナコマンド (c) 2014 Masashi Shinbara @shin1x1 • Supervisor を起動 • composer install(依存解決) • DBマイグレーション • PHPUnit(自動テスト)実行
  • 35. コンテナコマンド CMD /usr/bin/supervisord -c /etc/supervisord.conf && cd /share && /usr/bin/composer install && php artisan migrate --env=testing && ./vendor/bin/phpunit --log-junit /share/reports/junit.xml —coverage-html /share/reports/coverage —coverage-clover /share/reports/coverage.xml
  • 36. CMD /usr/bin/supervisord -c /etc/supervisord.conf && cd /share && /usr/bin/composer install && php artisan migrate --env=testing && ./vendor/bin/phpunit --log-junit /share/reports/junit.xml —coverage-html /share/reports/coverage —coverage-clover /share/reports/coverage.xml コンテナコマンド Supervisor 起動
  • 37. CMD /usr/bin/supervisord -c /etc/supervisord.conf && cd /share && /usr/bin/composer install && php artisan migrate --env=testing && ./vendor/bin/phpunit --log-junit /share/reports/junit.xml —coverage-html /share/reports/coverage —coverage-clover /share/reports/coverage.xml コンテナコマンド 依存解決
  • 38. CMD /usr/bin/supervisord -c /etc/supervisord.conf && cd /share && /usr/bin/composer install && php artisan migrate --env=testing && ./vendor/bin/phpunit --log-junit /share/reports/junit.xml —coverage-html /share/reports/coverage —coverage-clover /share/reports/coverage.xml コンテナコマンド DBマイグレーション
  • 39. CMD /usr/bin/supervisord -c /etc/supervisord.conf && cd /share && /usr/bin/composer install && php artisan migrate --env=testing && ./vendor/bin/phpunit --log-junit /share/reports/junit.xml —coverage-html /share/reports/coverage —coverage-clover /share/reports/coverage.xml コンテナコマンド 自動テスト実行
  • 40. (c) 2014 Masashi Shinbara @shin1x1 Jenkinsで実行 Mac private repo CI サーバ(さくらVPS) docker build && run
  • 41. Jenkinsで実行 (c) 2014 Masashi Shinbara @shin1x1 • git pull でリポジトリから Dockerfile 取得 • docker build でイメージ生成 • docker run でコンテナ実行 • 結果レポートを Jenkins で表示
  • 43. Jenkinsで実行 (c) 2014 Masashi Shinbara @shin1x1 sudo docker build -t ${JOB_NAME} . sudo docker run -v ${WORKSPACE}/src:/share ${JOB_NAME}
  • 44. docker build (c) 2014 Masashi Shinbara @shin1x1 • Dockerfile からイメージをビルド • ジョブ名(${JOB_NAME})をイメージ名に sudo docker build -t ${JOB_NAME} .
  • 45. docker run (c) 2014 Masashi Shinbara @shin1x1 • 生成したイメージからコンテナ実行 • -v で、アプリケーションディレクトリを
 マウント sudo docker run -v ${WORKSPACE}/src:/share ${JOB_NAME}
  • 46. マウントディレクトリ対応 (c) 2014 Masashi Shinbara @shin1x1 ${WORKSPACE}/src + application_code + build/ /share + application_code + build/ ホスト(Jenkins) コンテナ
  • 47. アプリケーション (c) 2014 Masashi Shinbara @shin1x1 ${WORKSPACE}/src + application_code + build/ /share + application_code + build/ ホスト(Jenkins) コンテナ アプリケーションを参照
  • 48. 結果レポート (c) 2014 Masashi Shinbara @shin1x1 ${WORKSPACE}/src + application_code + build/ /share + application_code + build/ ホスト(Jenkins) コンテナ /share/build/ に 結果ログを出力
  • 49. 結果レポート (c) 2014 Masashi Shinbara @shin1x1 ${WORKSPACE}/src + application_code + build/ /share + application_code + build/ ホスト(Jenkins) コンテナ build/ のログから 結果レポート生成
  • 52. Dockerコンテナの良さ (c) 2014 Masashi Shinbara @shin1x1 • プロジェクト毎に独立した環境 • 軽量なので、低スペック機でも利用可能 • 毎回、作って、使って、捨ててなので、管理が楽 • どこでも同じコンテナが作れるので、メンテが楽
 (boot2docker で検証できる)
  • 53. 突然のテスト失敗 (c) 2014 Masashi Shinbara @shin1x1 • 開発環境で all green だったテストがこける • なぜか依存解決で失敗 • コンテナから外部へ通信できない>< • docker デーモン再起動で解決
  • 54. 突然のテスト失敗2 (c) 2014 Masashi Shinbara @shin1x1 • docker デーモン再起動でも復旧せず • yum install でエラー • EPEL の CA証明書の期限切れ • ベースイメージを更新
 (yum update ca-certificates でも ok)
  • 55. 今後 (c) 2014 Masashi Shinbara @shin1x1 • ステージングサーバへのコンテナデプロイ • docker コンテナ実行環境は
 クラウドサービスに任せたい • コンテナレポジトリも任せたい • 全部自分でやるなら、PaaS の方が楽
  • 56. まとめ (c) 2014 Masashi Shinbara @shin1x1
  • 57. (c) 2014 Masashi Shinbara @shin1x1 まとめ • マルチな環境を同居させるのに便利 • ビルド、ジョブワーカーなど
 使い捨ての環境なら、実用的 • 常に起動するサービスなら、
 docker デーモン運用、デプロイ、監視等々を
 Dockerクラウドサービスに任せたい
  • 58. @shin1x1 (c) 2014 Masashi Shinbara @shin1x1