Submit Search
Upload
Dockerを使ってローカルテストを良い感じに実装した話
•
1 like
•
1,275 views
R
Ryo Yamaoka
Follow
Kubernetesのソースコードリーディング入門 APC勉強会#34 発表資料 https://8a1-apc.connpass.com/event/142874/
Read less
Read more
Internet
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 37
Download now
Download to read offline
Recommended
コンテナポータビリティの振り返りとハマった事例紹介
コンテナポータビリティの振り返りとハマった事例紹介
Ryo Yamaoka
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
Yuki Iwanari
Jenkinsユーザカンファレンス2015 前座資料
Jenkinsユーザカンファレンス2015 前座資料
ikikko
巨大不明ビルドの継続的統合を目的とするビルドパイプラインを主軸とした作戦要綱
巨大不明ビルドの継続的統合を目的とするビルドパイプラインを主軸とした作戦要綱
Kiyotaka Oku
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
kimulla
Ciじゃない方のJenkins
Ciじゃない方のJenkins
Katsuhiro Miura
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
Kazuto Kusama
PROCESS WARP
PROCESS WARP
祐司 伊藤
Recommended
コンテナポータビリティの振り返りとハマった事例紹介
コンテナポータビリティの振り返りとハマった事例紹介
Ryo Yamaoka
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
Yuki Iwanari
Jenkinsユーザカンファレンス2015 前座資料
Jenkinsユーザカンファレンス2015 前座資料
ikikko
巨大不明ビルドの継続的統合を目的とするビルドパイプラインを主軸とした作戦要綱
巨大不明ビルドの継続的統合を目的とするビルドパイプラインを主軸とした作戦要綱
Kiyotaka Oku
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
kimulla
Ciじゃない方のJenkins
Ciじゃない方のJenkins
Katsuhiro Miura
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
Kazuto Kusama
PROCESS WARP
PROCESS WARP
祐司 伊藤
DevOps for Small Starter
DevOps for Small Starter
大要 伊藤
Sphinxの環境構築が再現できない問題をDockerで解決してみた
Sphinxの環境構築が再現できない問題をDockerで解決してみた
Study Group by SciencePark Corp.
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
Study Group by SciencePark Corp.
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだこと
aha_oretama
Lightfish触ってみた
Lightfish触ってみた
Takafumi Yoshida
20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0
NIFTY Cloud
第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座
Hiroko Tamagawa
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
Masanori Fujisaki
Spring Bootキャンプ @関ジャバ #kanjava_sbc
Spring Bootキャンプ @関ジャバ #kanjava_sbc
Toshiaki Maki
CloudFoundryをつかってみよう
CloudFoundryをつかってみよう
Kazuto Kusama
2010.11.25 LT Doc fluxflex on Startup Dating
2010.11.25 LT Doc fluxflex on Startup Dating
Hiro Fukami
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
Hiroshi Maekawa
Deploy Strategy with Azure Pipelines
Deploy Strategy with Azure Pipelines
Kazushi Kamegawa
Challenge PWA!! WordCamp Tokyo 2018
Challenge PWA!! WordCamp Tokyo 2018
Ryu Shindo
Cloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container Networking
Kazuto Kusama
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Study Group by SciencePark Corp.
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』
Hiroshi Maekawa
Techcrunch hackathon 2013
Techcrunch hackathon 2013
Nao Tokui
日本で DevOps を ロケットスタートする方法
日本で DevOps を ロケットスタートする方法
Puppet
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
NIFTY Cloud
Dockerを使ってみよう
Dockerを使ってみよう
Ryo Adachi
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
Ryo Mitoma
More Related Content
What's hot
DevOps for Small Starter
DevOps for Small Starter
大要 伊藤
Sphinxの環境構築が再現できない問題をDockerで解決してみた
Sphinxの環境構築が再現できない問題をDockerで解決してみた
Study Group by SciencePark Corp.
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
Study Group by SciencePark Corp.
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだこと
aha_oretama
Lightfish触ってみた
Lightfish触ってみた
Takafumi Yoshida
20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0
NIFTY Cloud
第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座
Hiroko Tamagawa
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
Masanori Fujisaki
Spring Bootキャンプ @関ジャバ #kanjava_sbc
Spring Bootキャンプ @関ジャバ #kanjava_sbc
Toshiaki Maki
CloudFoundryをつかってみよう
CloudFoundryをつかってみよう
Kazuto Kusama
2010.11.25 LT Doc fluxflex on Startup Dating
2010.11.25 LT Doc fluxflex on Startup Dating
Hiro Fukami
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
Hiroshi Maekawa
Deploy Strategy with Azure Pipelines
Deploy Strategy with Azure Pipelines
Kazushi Kamegawa
Challenge PWA!! WordCamp Tokyo 2018
Challenge PWA!! WordCamp Tokyo 2018
Ryu Shindo
Cloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container Networking
Kazuto Kusama
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Study Group by SciencePark Corp.
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』
Hiroshi Maekawa
Techcrunch hackathon 2013
Techcrunch hackathon 2013
Nao Tokui
日本で DevOps を ロケットスタートする方法
日本で DevOps を ロケットスタートする方法
Puppet
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
NIFTY Cloud
What's hot
(20)
DevOps for Small Starter
DevOps for Small Starter
Sphinxの環境構築が再現できない問題をDockerで解決してみた
Sphinxの環境構築が再現できない問題をDockerで解決してみた
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだこと
Lightfish触ってみた
Lightfish触ってみた
20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0
第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
Spring Bootキャンプ @関ジャバ #kanjava_sbc
Spring Bootキャンプ @関ジャバ #kanjava_sbc
CloudFoundryをつかってみよう
CloudFoundryをつかってみよう
2010.11.25 LT Doc fluxflex on Startup Dating
2010.11.25 LT Doc fluxflex on Startup Dating
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
Deploy Strategy with Azure Pipelines
Deploy Strategy with Azure Pipelines
Challenge PWA!! WordCamp Tokyo 2018
Challenge PWA!! WordCamp Tokyo 2018
Cloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container Networking
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』
Techcrunch hackathon 2013
Techcrunch hackathon 2013
日本で DevOps を ロケットスタートする方法
日本で DevOps を ロケットスタートする方法
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
Similar to Dockerを使ってローカルテストを良い感じに実装した話
Dockerを使ってみよう
Dockerを使ってみよう
Ryo Adachi
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
Ryo Mitoma
AngularJSを通してDockerと触れ合った
AngularJSを通してDockerと触れ合った
pastelInc
2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ
xyzplus_net
Dockerとdev ops
Dockerとdev ops
Hiroshi Maekawa
20120927 findjob4 dev_ops
20120927 findjob4 dev_ops
ume3_
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要
Kazuyuki Mori
自作アプリをデプロイしてみた with Docker
自作アプリをデプロイしてみた with Docker
iPride Co., Ltd.
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事
Cybozu, Inc.
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
Daisuke Miyakawa
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
Takehara Ryo
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
『駅すぱあと』新しい開発基盤の研究
『駅すぱあと』新しい開発基盤の研究
asatou
Aizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous Integration
Tomoaki Tamura
Webテクノロジー@2012
Webテクノロジー@2012
彰 村地
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
haljik Seiji
Rails on Dockerとの戦い
Rails on Dockerとの戦い
Yasutomo Uemori
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Naoki Umehara
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOps
Etsuji Nakai
ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発
schoowebcampus
Similar to Dockerを使ってローカルテストを良い感じに実装した話
(20)
Dockerを使ってみよう
Dockerを使ってみよう
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
AngularJSを通してDockerと触れ合った
AngularJSを通してDockerと触れ合った
2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ
Dockerとdev ops
Dockerとdev ops
20120927 findjob4 dev_ops
20120927 findjob4 dev_ops
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要
自作アプリをデプロイしてみた with Docker
自作アプリをデプロイしてみた with Docker
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
『駅すぱあと』新しい開発基盤の研究
『駅すぱあと』新しい開発基盤の研究
Aizu.LT16 社会人1年目の失敗とContinuous Integration
Aizu.LT16 社会人1年目の失敗とContinuous Integration
Webテクノロジー@2012
Webテクノロジー@2012
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
Rails on Dockerとの戦い
Rails on Dockerとの戦い
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOps
ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発
Dockerを使ってローカルテストを良い感じに実装した話
1.
Dockerでローカルテストを 良い感じに実装した話 (株)エーピーコミュニケーションズ 山岡 亮
2.
自己紹介 • 日常の仕事 • NEEDLEWORK(自社製FWテストツール) のバックエンド •
Webアプリのバックエンド • 普段使い: Go, GCP, CircleCI, Docker • 趣味: 料理、ゲーム、コーディング、インフラいじり • 大学生(計算機科学)の片手間に会社員やってます Twitter: @mountainhill14 Blog: https://dokupe.hatenablog.com/ GitHub: https://github.com/ryo-yamaoka
3.
今日話すこと • 少しだけ自社アプライアンスの紹介 • 本題の前提知識として軽く(営業目的ではありません) •
Dockerを使って手元のテストを良い具合に実装した事例 • ↑の実装で困ったこととその解決方法
4.
NEEDLEWORKの紹介 https://www.ap-com.co.jp/ja/needlework/
5.
開発で考慮しなければならない特性 • アプライアンスであること • オフラインでの利用が前提 •
ファームウェアのアップデート等もユーザー自身で作業する
6.
開発における課題
7.
開発における課題 ファームウェアアップデーターのテストが辛い
8.
どう辛いか
9.
どう辛いか • アプライアンスのOS上でファイルやサービスの操作がある • ローカルで動作テストをすると開発環境に影響が出る •
オフライン&ユーザー作業が前提なのでファーム更新は可能な 限りトラブルを少なくしたい
10.
どう辛いか • アプライアンスのOS上でファイルやサービスの操作がある • ローカルで動作テストをすると開発環境に影響が出る •
オフライン&ユーザー作業が前提なのでファーム更新は可能な 限りトラブルを少なくしたい • 実機でしか動作確認できないのは不便 • 勿論最終的には実機確認もやらなければならないが、 開発環境でできないのはしんどい • VMとスナップショットでもできるがもっと手軽にやりたい
11.
解決方法
12.
解決方法 • Dockerを使い試験環境を使い捨てる
13.
解決方法 • Dockerを使い試験環境を使い捨てる • コンテナ内部で実際のファイル操作を行えるので限りなく 実環境に近いテストを行える •
各種OSの公式コンテナがある
14.
実際の動作
15.
実際の動作 • make test
で実行開始
16.
実際の動作 • make test
で実行開始 • 試験に必要な各種ファイルを生成する (ダミーのDaemonとかアップデートファイル等)
17.
実際の動作 • make test
で実行開始 • 試験に必要な各種ファイルを生成する (ダミーのDaemonとかアップデートファイル等) • テスト用のネットワークを作成しコンテナを起動、 生成したファイルを配置する • アプライアンスの仕様で 192.0.2.0/24 を使う必要がある
18.
実際の動作 • make test
で実行開始 • 試験に必要な各種ファイルを生成する (ダミーのDaemonとかアップデートファイル等) • テスト用のネットワークを作成しコンテナを起動、 生成したファイルを配置する • アプライアンスの仕様で 192.0.2.0/24 を使う必要がある • Goのテストで実際にAPIを操作してアップデートや ダウングレードを実行する
19.
良かったこと
20.
良かったこと • 手元で気軽に何度でもテストを流せるようになった • 安心感すごい
21.
良かったこと • 手元で気軽に何度でもテストを流せるようになった • 安心感すごい •
品質が向上した • コード変更の影響がすぐわかる • テスト実装中にいくつか未発見だったバグを潰せた
22.
良かったこと • 手元で気軽に何度でもテストを流せるようになった • 安心感すごい •
品質が向上した • コード変更の影響がすぐわかる • テスト実装中にいくつか未発見だったバグを潰せた • CIに乗せられるようになった(はず) • 試していないがDockerで動くのでCircleCIとかに持っていけるはず (現状はCIに乗せる要件はない(実質1人開発)のでやってない)
23.
ハマったところ
24.
ハマったところ • Dockerの本来の用途から外れているので色々辛い • systemdを使う前提になっていない •
コンテナ内部で複数プロセスを立てるのが面倒
25.
ハマったところ • Dockerの本来の用途から外れているので色々辛い • systemdを使う前提になっていない •
コンテナ内部で複数プロセスを立てるのが面倒 • Dockerfileのビルド時になぜかyumコマンドがコケる
26.
Docker(CentOS)でsystemdを使うには
27.
Docker(CentOS)でsystemdを使うには • 普通にsystemdを叩くと Failed
to get D-Bus connection: No connection to service manager. になる
28.
Docker(CentOS)でsystemdを使うには • 普通にsystemdを叩くと Failed
to get D-Bus connection: No connection to service manager. になる • DockerfileのCMDを/sbin/initにする
29.
Docker(CentOS)でsystemdを使うには • 普通にsystemdを叩くと Failed
to get D-Bus connection: No connection to service manager. になる • DockerfileのCMDを/sbin/initにする • コンテナ起動時に --privileged を付ける • サービスなら避けるべきだが今回は使い捨て環境なのでリスクは無い
30.
複数プロセス立て+オペレーションする
31.
複数プロセス立て+オペレーションする • Dockerfileのハックとかsystemdでどうにかする事は諦めて 愚直にコマンド羅列
32.
複数プロセス立て+オペレーションする • Dockerfileのハックとかsystemdでどうにかする事は諦めて 愚直にコマンド羅列 • テストシナリオに
docker exec (中略) systemctl start xxx みたいなのをたくさん書く
33.
Dockerfileのビルド時にyumがコケる
34.
Dockerfileのビルド時にyumがコケる • overlayfs絡みの問題で Rpmdb
checksum is invalid: dCDPT(pkg checksums) が出た
35.
Dockerfileのビルド時にyumがコケる • overlayfs絡みの問題で Rpmdb
checksum is invalid: dCDPT(pkg checksums) が出た • yum-plugin-ovl を入れて解決
36.
おわりに
37.
まとめ • コンテナをVMのように扱うのは一般にアンチパターンだが 特徴と制約を把握して上手く使えば結構便利 • 但しそれなりに面倒事は出てくる •
重要な部分のテストがあると変更時の安心感と品質が段違い • ローカルでやりづらいテストもDocker内ならへっちゃら ガンガンテストしよう
Download now