SlideShare a Scribd company logo
1 of 37
Download to read offline
Dockerでローカルテストを
良い感じに実装した話
(株)エーピーコミュニケーションズ
山岡 亮
自己紹介
• 日常の仕事
• NEEDLEWORK(自社製FWテストツール)
のバックエンド
• Webアプリのバックエンド
• 普段使い: Go, GCP, CircleCI, Docker
• 趣味: 料理、ゲーム、コーディング、インフラいじり
• 大学生(計算機科学)の片手間に会社員やってます
Twitter: @mountainhill14
Blog: https://dokupe.hatenablog.com/
GitHub: https://github.com/ryo-yamaoka
今日話すこと
• 少しだけ自社アプライアンスの紹介
• 本題の前提知識として軽く(営業目的ではありません)
• Dockerを使って手元のテストを良い具合に実装した事例
• ↑の実装で困ったこととその解決方法
NEEDLEWORKの紹介
https://www.ap-com.co.jp/ja/needlework/
開発で考慮しなければならない特性
• アプライアンスであること
• オフラインでの利用が前提
• ファームウェアのアップデート等もユーザー自身で作業する
開発における課題
開発における課題
ファームウェアアップデーターのテストが辛い
どう辛いか
どう辛いか
• アプライアンスのOS上でファイルやサービスの操作がある
• ローカルで動作テストをすると開発環境に影響が出る
• オフライン&ユーザー作業が前提なのでファーム更新は可能な
限りトラブルを少なくしたい
どう辛いか
• アプライアンスのOS上でファイルやサービスの操作がある
• ローカルで動作テストをすると開発環境に影響が出る
• オフライン&ユーザー作業が前提なのでファーム更新は可能な
限りトラブルを少なくしたい
• 実機でしか動作確認できないのは不便
• 勿論最終的には実機確認もやらなければならないが、
開発環境でできないのはしんどい
• VMとスナップショットでもできるがもっと手軽にやりたい
解決方法
解決方法
• Dockerを使い試験環境を使い捨てる
解決方法
• Dockerを使い試験環境を使い捨てる
• コンテナ内部で実際のファイル操作を行えるので限りなく
実環境に近いテストを行える
• 各種OSの公式コンテナがある
実際の動作
実際の動作
• make test で実行開始
実際の動作
• make test で実行開始
• 試験に必要な各種ファイルを生成する
(ダミーのDaemonとかアップデートファイル等)
実際の動作
• make test で実行開始
• 試験に必要な各種ファイルを生成する
(ダミーのDaemonとかアップデートファイル等)
• テスト用のネットワークを作成しコンテナを起動、
生成したファイルを配置する
• アプライアンスの仕様で 192.0.2.0/24 を使う必要がある
実際の動作
• make test で実行開始
• 試験に必要な各種ファイルを生成する
(ダミーのDaemonとかアップデートファイル等)
• テスト用のネットワークを作成しコンテナを起動、
生成したファイルを配置する
• アプライアンスの仕様で 192.0.2.0/24 を使う必要がある
• Goのテストで実際にAPIを操作してアップデートや
ダウングレードを実行する
良かったこと
良かったこと
• 手元で気軽に何度でもテストを流せるようになった
• 安心感すごい
良かったこと
• 手元で気軽に何度でもテストを流せるようになった
• 安心感すごい
• 品質が向上した
• コード変更の影響がすぐわかる
• テスト実装中にいくつか未発見だったバグを潰せた
良かったこと
• 手元で気軽に何度でもテストを流せるようになった
• 安心感すごい
• 品質が向上した
• コード変更の影響がすぐわかる
• テスト実装中にいくつか未発見だったバグを潰せた
• CIに乗せられるようになった(はず)
• 試していないがDockerで動くのでCircleCIとかに持っていけるはず
(現状はCIに乗せる要件はない(実質1人開発)のでやってない)
ハマったところ
ハマったところ
• Dockerの本来の用途から外れているので色々辛い
• systemdを使う前提になっていない
• コンテナ内部で複数プロセスを立てるのが面倒
ハマったところ
• Dockerの本来の用途から外れているので色々辛い
• systemdを使う前提になっていない
• コンテナ内部で複数プロセスを立てるのが面倒
• Dockerfileのビルド時になぜかyumコマンドがコケる
Docker(CentOS)でsystemdを使うには
Docker(CentOS)でsystemdを使うには
• 普通にsystemdを叩くと Failed to get D-Bus connection: No
connection to service manager. になる
Docker(CentOS)でsystemdを使うには
• 普通にsystemdを叩くと Failed to get D-Bus connection: No
connection to service manager. になる
• DockerfileのCMDを/sbin/initにする
Docker(CentOS)でsystemdを使うには
• 普通にsystemdを叩くと Failed to get D-Bus connection: No
connection to service manager. になる
• DockerfileのCMDを/sbin/initにする
• コンテナ起動時に --privileged を付ける
• サービスなら避けるべきだが今回は使い捨て環境なのでリスクは無い
複数プロセス立て+オペレーションする
複数プロセス立て+オペレーションする
• Dockerfileのハックとかsystemdでどうにかする事は諦めて
愚直にコマンド羅列
複数プロセス立て+オペレーションする
• Dockerfileのハックとかsystemdでどうにかする事は諦めて
愚直にコマンド羅列
• テストシナリオに docker exec (中略) systemctl start xxx
みたいなのをたくさん書く
Dockerfileのビルド時にyumがコケる
Dockerfileのビルド時にyumがコケる
• overlayfs絡みの問題で Rpmdb checksum is invalid:
dCDPT(pkg checksums) が出た
Dockerfileのビルド時にyumがコケる
• overlayfs絡みの問題で Rpmdb checksum is invalid:
dCDPT(pkg checksums) が出た
• yum-plugin-ovl を入れて解決
おわりに
まとめ
• コンテナをVMのように扱うのは一般にアンチパターンだが
特徴と制約を把握して上手く使えば結構便利
• 但しそれなりに面倒事は出てくる
• 重要な部分のテストがあると変更時の安心感と品質が段違い
• ローカルでやりづらいテストもDocker内ならへっちゃら
ガンガンテストしよう

More Related Content

What's hot

DevOps for Small Starter
DevOps for Small StarterDevOps for Small Starter
DevOps for Small Starter大要 伊藤
 
Sphinxの環境構築が再現できない問題をDockerで解決してみた
Sphinxの環境構築が再現できない問題をDockerで解決してみたSphinxの環境構築が再現できない問題をDockerで解決してみた
Sphinxの環境構築が再現できない問題をDockerで解決してみたStudy Group by SciencePark Corp.
 
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)Study Group by SciencePark Corp.
 
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことMultibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことaha_oretama
 
20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.020130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0NIFTY Cloud
 
第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座Hiroko Tamagawa
 
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...Masanori Fujisaki
 
Spring Bootキャンプ @関ジャバ #kanjava_sbc
Spring Bootキャンプ @関ジャバ #kanjava_sbcSpring Bootキャンプ @関ジャバ #kanjava_sbc
Spring Bootキャンプ @関ジャバ #kanjava_sbcToshiaki Maki
 
CloudFoundryをつかってみよう
CloudFoundryをつかってみようCloudFoundryをつかってみよう
CloudFoundryをつかってみようKazuto Kusama
 
2010.11.25 LT Doc fluxflex on Startup Dating
2010.11.25 LT Doc fluxflex on Startup Dating2010.11.25 LT Doc fluxflex on Startup Dating
2010.11.25 LT Doc fluxflex on Startup DatingHiro Fukami
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略Hiroshi Maekawa
 
Deploy Strategy with Azure Pipelines
Deploy Strategy with Azure PipelinesDeploy Strategy with Azure Pipelines
Deploy Strategy with Azure PipelinesKazushi Kamegawa
 
Challenge PWA!! WordCamp Tokyo 2018
Challenge PWA!!  WordCamp Tokyo 2018Challenge PWA!!  WordCamp Tokyo 2018
Challenge PWA!! WordCamp Tokyo 2018Ryu Shindo
 
Cloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container NetworkingCloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container NetworkingKazuto Kusama
 
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法Study Group by SciencePark Corp.
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』Hiroshi Maekawa
 
Techcrunch hackathon 2013
Techcrunch hackathon 2013Techcrunch hackathon 2013
Techcrunch hackathon 2013Nao Tokui
 
日本で DevOps を ロケットスタートする方法
日本で DevOps を  ロケットスタートする方法日本で DevOps を  ロケットスタートする方法
日本で DevOps を ロケットスタートする方法Puppet
 
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0NIFTY Cloud
 

What's hot (20)

DevOps for Small Starter
DevOps for Small StarterDevOps for Small Starter
DevOps for Small Starter
 
Sphinxの環境構築が再現できない問題をDockerで解決してみた
Sphinxの環境構築が再現できない問題をDockerで解決してみたSphinxの環境構築が再現できない問題をDockerで解決してみた
Sphinxの環境構築が再現できない問題をDockerで解決してみた
 
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
 
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことMultibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだこと
 
Lightfish触ってみた
Lightfish触ってみたLightfish触ってみた
Lightfish触ってみた
 
20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.020130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0
 
第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座
 
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
 
Spring Bootキャンプ @関ジャバ #kanjava_sbc
Spring Bootキャンプ @関ジャバ #kanjava_sbcSpring Bootキャンプ @関ジャバ #kanjava_sbc
Spring Bootキャンプ @関ジャバ #kanjava_sbc
 
CloudFoundryをつかってみよう
CloudFoundryをつかってみようCloudFoundryをつかってみよう
CloudFoundryをつかってみよう
 
2010.11.25 LT Doc fluxflex on Startup Dating
2010.11.25 LT Doc fluxflex on Startup Dating2010.11.25 LT Doc fluxflex on Startup Dating
2010.11.25 LT Doc fluxflex on Startup Dating
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
Deploy Strategy with Azure Pipelines
Deploy Strategy with Azure PipelinesDeploy Strategy with Azure Pipelines
Deploy Strategy with Azure Pipelines
 
Challenge PWA!! WordCamp Tokyo 2018
Challenge PWA!!  WordCamp Tokyo 2018Challenge PWA!!  WordCamp Tokyo 2018
Challenge PWA!! WordCamp Tokyo 2018
 
Cloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container NetworkingCloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container Networking
 
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』
 
Techcrunch hackathon 2013
Techcrunch hackathon 2013Techcrunch hackathon 2013
Techcrunch hackathon 2013
 
日本で DevOps を ロケットスタートする方法
日本で DevOps を  ロケットスタートする方法日本で DevOps を  ロケットスタートする方法
日本で DevOps を ロケットスタートする方法
 
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
 

Similar to Dockerを使ってローカルテストを良い感じに実装した話

Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみようRyo Adachi
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていくRyo Mitoma
 
AngularJSを通してDockerと触れ合った
AngularJSを通してDockerと触れ合ったAngularJSを通してDockerと触れ合った
AngularJSを通してDockerと触れ合ったpastelInc
 
2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめxyzplus_net
 
20120927 findjob4 dev_ops
20120927 findjob4 dev_ops20120927 findjob4 dev_ops
20120927 findjob4 dev_opsume3_
 
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Kazuyuki Mori
 
自作アプリをデプロイしてみた with Docker
自作アプリをデプロイしてみた with Docker自作アプリをデプロイしてみた with Docker
自作アプリをデプロイしてみた with DockeriPride Co., Ltd.
 
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事Cybozu, Inc.
 
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another ApproachDaisuke Miyakawa
 
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンドTakehara Ryo
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発日本マイクロソフト株式会社
 
『駅すぱあと』新しい開発基盤の研究
『駅すぱあと』新しい開発基盤の研究『駅すぱあと』新しい開発基盤の研究
『駅すぱあと』新しい開発基盤の研究asatou
 
Aizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous IntegrationAizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous IntegrationTomoaki Tamura
 
Webテクノロジー@2012
Webテクノロジー@2012Webテクノロジー@2012
Webテクノロジー@2012彰 村地
 
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みhaljik Seiji
 
Rails on Dockerとの戦い
Rails on Dockerとの戦いRails on Dockerとの戦い
Rails on Dockerとの戦いYasutomo Uemori
 
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発Naoki Umehara
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsEtsuji Nakai
 
ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発 ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発 schoowebcampus
 

Similar to Dockerを使ってローカルテストを良い感じに実装した話 (20)

Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみよう
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
AngularJSを通してDockerと触れ合った
AngularJSを通してDockerと触れ合ったAngularJSを通してDockerと触れ合った
AngularJSを通してDockerと触れ合った
 
2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ
 
Dockerとdev ops
Dockerとdev opsDockerとdev ops
Dockerとdev ops
 
20120927 findjob4 dev_ops
20120927 findjob4 dev_ops20120927 findjob4 dev_ops
20120927 findjob4 dev_ops
 
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要
 
自作アプリをデプロイしてみた with Docker
自作アプリをデプロイしてみた with Docker自作アプリをデプロイしてみた with Docker
自作アプリをデプロイしてみた with Docker
 
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事
 
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
 
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
『駅すぱあと』新しい開発基盤の研究
『駅すぱあと』新しい開発基盤の研究『駅すぱあと』新しい開発基盤の研究
『駅すぱあと』新しい開発基盤の研究
 
Aizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous IntegrationAizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous Integration
 
Webテクノロジー@2012
Webテクノロジー@2012Webテクノロジー@2012
Webテクノロジー@2012
 
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
 
Rails on Dockerとの戦い
Rails on Dockerとの戦いRails on Dockerとの戦い
Rails on Dockerとの戦い
 
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOps
 
ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発 ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発
 

Dockerを使ってローカルテストを良い感じに実装した話