Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Docker in CI - Cacoo與Backlog導入Docker的經驗分享
Search
株式会社ヌーラボ
PRO
December 10, 2015
Technology
470
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Docker in CI - Cacoo與Backlog導入Docker的經驗分享
Presentation slides at
http://containersummit.ithome.com.tw/
株式会社ヌーラボ
PRO
December 10, 2015
More Decks by 株式会社ヌーラボ
See All by 株式会社ヌーラボ
配布資料_ヌーラボの情シスがおすすめする_問い合わせ対応を削減するBacklog活用術.pdf
nulabinc
PRO
0
63
Bits Agent Builder の⼊⾨と活⽤事例
nulabinc
PRO
0
2.2k
Getting Started with Bits Agent Builder: Real-World Use Cases
nulabinc
PRO
0
75
The_Evolution_of_Bits_AI_SRE.pdf
nulabinc
PRO
0
370
進化するBits AI SREと私と組織
nulabinc
PRO
4
1.1k
実践 Datadog MCP Server
nulabinc
PRO
4
920
全社横断PjM⽀援チーム “PEaS”の取り組みと プロジェクトマネジメント でのAI活⽤について
nulabinc
PRO
0
230
Datadog の RBAC のすべて
nulabinc
PRO
4
930
Datadog Live Tokyo 2025登壇資料
nulabinc
PRO
0
210
Other Decks in Technology
See All in Technology
KAEN Company Deck
kaen
PRO
0
310
Webとヘルスデータ
yukukotani
0
170
【試作】IoT x AIエージェント
happysamurai294
0
100
Bet AI Day 2026丨How We Bet AI: AIとともに働く場をつくる
layerx
PRO
1
2.2k
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
110
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
870
PfEingのアプローチで働こう
rindrics
0
170
DGX Sparkを2台使って いろいろ動かす話
sonoda_mj
1
130
データエンジニアリングワークショップ:Auto LoaderとSparkで学ぶデータパイプライン構築
databricksjapan
PRO
0
150
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
220
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
2
1.2k
Jetpack Compose で挑む新聞紙面UI ─ 複合ジェスチャー・ポリゴン記事領域・適応的ページ構成という3つの壁/droidkaigi2026
nikkei_engineer_recruiting
0
190
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.9k
A Tale of Four Properties
chriscoyier
163
24k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
260
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Navigating Weather and Climate Data
rabernat
0
510
Large-scale JavaScript Application Architecture
addyosmani
515
110k
My Coaching Mixtape
mlcsv
0
300
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
GitHub's CSS Performance
jonrohan
1033
470k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Rails Girls Zürich Keynote
gr2m
96
14k
Transcript
None
https://www.flickr.com/photos/dahlstroms/3144199355 %PDLFSJO$* $BDPPᢛ#BDLMPHಋೖ%PDLFSతៃᱛڗ
છాوࢤ 40.&%"5BLBTIJ (SPXUI)BDLFS!/VMBC*OD
$PMMBCPSBUJWF"QQ.BLFS IUUQTOVMBCJODDPN
֨ᒜ #BDLMPH 1SPKFDUNBOBHFNFOUUPPMPWFS DPNQBOJFTVTF IUUQCBDLMPHUPPMDPNUX
-PPLJOHGPS5BJXBOFTF&OHJOFFS IUUQTOVMBCJODDPNDBSFFSTPGUXBSFFOHJOFFSCBDLMPH
$BDPP .VTFSTBSPVOEUIFXPSME ,VTFSTJO5BJXBO ESBXEJBHSBNTPO$BDPP IUUQTDBDPPDPNMBOH[I@UX
5ZQFUBML $PMMBCPSBUJWFEJTDVTTJPOUPPM IUUQTXXXUZQFUBMLJO
2VFTUJPO
6TFDBTFPG%PDLFSJO$* • 6TJOH%PDLFSGPS+PC&YFDVUJPO • 6TJOH%PDLFSGPS$*$MVTUFS
'PDVTJOUIJTUBML • 6TJOH%PDLFSGPS+PC&YFDVUJPO • 6TJOH%PDLFSGPS$*$MVTUFS
"HFOEB /VMBC%FWFMPQNFOU0WFSWJFX 6TF$BTFJO$* 4VNNBSZ
/VMBC%FWFMPQNFOU0WFSWJFX
5FDIOPMPHZ.BUSJY
%FMJWFSZ0WFSWJFX
%FMJWFSZ0WFSWJFX
+FOLJOT+PCT • 3VOUFTU • #VJMEBSUJGBDU • 6QMPBEBSUJGBDUUP4 • 6QMPBETUBUJDpMFUP4 •
$SFBUF".* • %FQMPZBSUJGBDU
/VNCFSPG+PCT • $POpHVSFE+PCT • +PCTSVOOJOHFWFSZEBZ NBJOMZSVOOJOHJOEBZUJNF
l1VMM3FRVFTUz#BTFE%FWFMPQNFOU
#SBODIJOH.PEFMJO/VMBC
%FWFMPQNFOU'MPX • #SBODIDSFBUFEGPSCPUICVHpYBOE OFXGFBUVSF • $SFBUF1VMM3FRVFTU 13 BGUFSXPSL JTEPOF •
3FMFBTFlUBHHFEzSFWJTJPOJONBTUFS CSBODI
l5BHz5SJHHFSFE"SDIJWJOH
$IBU0QTGPS%FMJWFSZ
+FOLJOT5ZQFUBML1MVHJO IUUQTXJLJKFOLJOTDJPSHEJTQMBZ+&/,*/45ZQFUBML 1MVHJO
%FQMPZNFOU'MPX • "EEUBHUPTUPSFBQQMJDBUJPOUP4 • 4BZlEFQMPZDPNNBOEzJO5ZQFUBML • +FOLJOT5ZQFUBML1MVHJOEJSFDUMZLJDLT +FOLJOT+PCUPEFQMPZ
6TF$BTFJO$*
$*&OWJSPONFOU0WFSWJFX
+FOLJOT#BDLMPH1MVHJO IUUQTXJLJKFOLJOTDJPSHEJTQMBZ+&/,*/4#BDLMPH 1MVHJO
*TTVFTJO$* • 5PPNBOZCSBODIFTUPUFTU • 13SFRVJSFTUFTUQBTTFECFGPSFSFWJFX • .PSFEFWFMPQFST NPSFCSBODIFT • 7BSJPVTUFTUFOWJSPONFOUSFRVJSFE
• %J⒎FSFOUWFSTJPOTPGNJEEMFXBSFBOEUPPMT • 4IPVMECFJOEFQFOEFOUCBTJDBMMZ
*TTVFTJO$* • 4MPXUFTU • 5FTUIBTUPXBJUGPSSVOVOUJMUFTU FOWJSPONFOUPDDVQJFEXJUIPUIFSUFTU CFDPNFTBWBJMBCMF • )BSEUPNBOBHFTMBWFT •
.FTTZDPOpHVSBUJPOEJTBCMFTVTUP CPPUTUSBQOFXTMBWFRVJDLMZBOEHJWFVQ UFTUJOHGPSTPNFCSBODIFT
)FSF`T%PDLFS
)PX%PDLFSTPMWFTJTTVFT • 5PPNBOZCSBODIFTUPUFTU • 3VOOJOHUFTUGPSCSBODIJOJUTPXO%PDLFS DPOUBJOFSBMMPXTUPSVOUFTUTJOQBSBMMFM • 7BSJPVTUFTUFOWJSPONFOUSFRVJSFE • /FFEUPJOTUBMMPOMZ%PDLFSJOUPTMBWFT
XIFOZPVOFFENPSFSFTPVSDFTGPSUFTUJOH
,FZ1PJOUTUPVTF%PDLFSJO$* • 4FUVQTMBWF • 4JNQMJGZUFTU • "DDFMFSBUFUFTU • 3FUSJFWFCVJMESFTVMU •
6QMPBEBSDIJWF
,FZ1PJOUTUPVTF%PDLFSJO$* • 4FUVQTMBWF • 4JNQMJGZUFTU • "DDFMFSBUFUFTU • 3FUSJFWFCVJMESFTVMU •
6QMPBEBSDIJWF
4UFQTUP4UBSU4MBWF IUUQTXJLJKFOLJOTDJPSHEJTQMBZ+&/,*/4"NB[PO &$ 1MVHJO
#FOFpUPG4JNQMF4MBWF4FUVQ • #PPUTUSBQOFXTMBWFRVJDLMZ • &OBCMFUPSVOKPCTBOZXIFSF%PDLFS JTSVOOJOH
,FZ1PJOUTUPVTF%PDLFSJO$* • 4FUVQTMBWF • 4JNQMJGZUFTU • "DDFMFSBUFUFTU • 3FUSJFWFCVJMESFTVMU •
6QMPBEBSDIJWF
+PC$POpHVSBUJPO $ ./gradlew clean test –Penv=ci $ docker run <run
option> test-image ./gradlew clean test
3VO.VMUJ1SPDFTTFTJO4JOHMF$POUBJOFS # Dockerfile # install package required for test RUN
apt-get install –y redis-server # Test Configuration in Jenkins $ docker run test-image bach –c “service redis-server start ; ./ gradlew clean test” • 0OMZTJOHMF%PDLFSpMFSFRVJSFE • 3VOUFTUXJUITBNFTFUUJOHJOMPDBM
%PDLFS$PNQPTFWT4JOHMF%PDLFSpMF • +VTUGPSUFTUJOHQVSQPTF 4JOHMF %PDLFSpMFJTFOPVHIJONBOZDBTFT • *G%PDLFSpMFXJMMCFSFVTFEGPSPUIFS QVSQPTF %PDLFS$PNQPTFDPVMECF CFUUFS
,FZ1PJOUTUPVTF%PDLFSJO$* • 4FUVQTMBWF • 4JNQMJGZUFTU • "DDFMFSBUFUFTU • 3FUSJFWFCVJMESFTVMU •
6QMPBEBSDIJWF
*OIPVTF3FHJTUSZBT*NBHF$BDIF
%FQFOEFODZ$BDIFr)PTU%JSFDUPSZ
%FQFOEFODZ$BDIFr)PTU%JSFDUPSZ $ docker run –v ${HOME}/.gradle:/root/.gradle test-image <test command> •
)PTUEJSFDUPSZBTDBDIF • 1SPTTIBSFDBDIFXJUIPUIFSKPCT • $POTQFSNJTTJPOJTTVF
%FQFOEFODZ$BDIFr$BDIFJOBEWBODF
%FQFOEFODZ$BDIFr$BDIFJOBEWBODF # Dockerfile RUN mkdir -p /opt/local/app COPY requirements.txt /opt/local/app/
WORKDIR /opt/local/app RUN pip install -r requirements.txt COPY . /opt/local/app $ docker build –t test-image . $ docker run test-image <test command> %FQFOEFODZVQEBUF IBQQFOT/05TPPGUFO UIBOBQQMJDBUJPODPEF
%FQFOEFODZ$BDIFr$BDIFJOBEWBODF • *OTUBMMEFQFOEFODZJOBEWBODF • 1SPTOPQFSNJTTJPOJTTVF • $POTBMMDBDIFDMFBSFEJOEFQFOEFODZ DIBOHF
%FQFOEFODZ$BDIFr&YUFSOBM$BDIF
%FQFOEFODZ$BDIFr&YUFSOBM$BDIF # Dockerfile RUN mkdir /root/.gradle RUN cd /root/.gradle; curl
-skL https://s3-ap- northeast-1.amazonaws.com/<cache-bucket>/cache.20151201.tar.gz | tar zxf - • &YUFSOBMDBDIF • 1SPTGBTUFSJOJUJBMJOTUBMMBUJPO • $POTNBJOUBJOFYUFSOBMDBDIF
%FQFOEFODZ$BDIF4USBUFHZ )PXUPDBDIF 1SPT $POT 1SPKFDUXFVTF )PTU%JSFDUPSZ 8IFOSVOOJOH UFTU NPVOUIPTU EJSFDUPSZUP
DPOUBJOFSBOE TUPSFEFQFOEFOU MJCSBSJFTUIFSF 4IBSFMJCSBSJFT BNPOHQSPKFDUT BOETNBMM EFQFOEFODZ DIBOHFEPFTO`U JNQBDUTPNVDI 1FSNJTTJPOJTTVF DPVMEIBQQFOJG UFTUTIPVMECF SVOCZOPOSPPU VTFS +BWB 4DBMB .BWFO (SBEMF TCU $BDIFJO BEWBODF $SFBUFMPDBMJNBHF XJUIJOTUBMMJOH EFQFOEFOU MJCSBSJFTCFGPSF UFTUJOH /PQFSNJTTJPO JTTVF 8IFO EFQFOEFODZ DIBOHFE BMM DBDIFXJMMCF DMFBSFE 1FSM 1ZUIPO OPEFKT &YUFSOBM$BDIF $SFBUFDBDIF BSDIJWFBOETBWF JUUPFYUFSOBM TUPSBHFMJLF4 BOEEPXOMPBEJU XIFOSVOOJOHUFTU 'BTUFSJOJUJBM JOTUBMMBUJPO DPNQBSFEUP MFUUJOHCVJMEUPPM UPSFTPMWF EFQFOEFODJFT /FFEUPNBJOUBJO FYUFSOBMDBDIF QSPQFSMZUPLFFQ QFSGPSNBODF 4DBMB TCU
,FZ1PJOUTUPVTF%PDLFSJO$* • 4FUVQTMBWF • 4JNQMJGZUFTU • "DDFMFSBUFUFTU • 3FUSJFWFCVJMESFTVMU •
6QMPBEBSDIJWF
3FUSJFWF#VJME3FTVMU
3FUSJFWF#VJME3FTVMU # Dockerfile WORKDIR /opt/app $ docker run --rm –v
$(pwd):/opt/app test-image <test command> • .PVOUXPSLTQBDFUPDPOUBJOFS • 1SPTSFNPWFDPOUBJOFSTPPOBGUFSUFTU • $POTQFSNJTTJPOJTTVF
1FSNJTTJPO*TTVFPG)PTU%JSFDUPSZ • *OTPNFDBTF UFTUTIPVMECFSVOCZOPO SPPUVTFS • 0XOFSPGIPTUEJSFDUPSZJOTJEFDPOUBJOFS JTJOEFpOJUF • 8SJUJOHCVJMESFTVMUUPIPTUEJSFDUPSZCZ
OPOSPPUVTFSDBOGBJM
8PSLBSPVOE • 8SJUFSFTVMUUPBWBJMBCMFEJSFDUPSZGPS OPOSPPUVTFS • $PQZJUUPIPTUEJSFDUPSZCZSPPU # run.sh su test-user
–c “py.test tests –-junit-xml=/var/tmp/results.xml” cp –p /var/tmp/results.xml . $ docker run --rm –v $(pwd):/opt/app test-image ./run.sh
8PSLBSPVOE • $IBOHFPXOFSTIJQUPOPOSPPUVTFS EVSJOHCVJMEUJNF # run.sh chown test-user . su
test-user –c “py.test tests” chown $1 . $ docker run --rm –v $(pwd):/opt/app test-image ./run.sh $(id -u)
3FUSJFWF#VJME3FTVMU BMU # Dockerfile WORKDIR /opt/app COPY . /opt/app
$ UNIQUE_NAME=“TEST_${GIT_COMMIT}_$(date +%s)” $ docker run --name=${UNIQUE_NAME} test-image <test command> $ docker cp ${UNIQUE_NAME}:/opt/app/build/test-result/ test-result $ docker rm ${UNIQUE_NAME} • $PQZCVJMESFTVMUGSPNDPOUBJOFS • 1SPTOPQFSNJTTJPOJTTVF • $POTDPNQMJDBUFE
,FZ1PJOUTUPVTF%PDLFSJO$* • 4FUVQTMBWF • 4JNQMJGZUFTU • "DDFMFSBUFUFTU • 3FUSJFWFCVJMESFTVMU •
6QMPBEBSDIJWF
6QMPBE"SDIJWFUP4 • 6QMPBEBQQMJDBUJPOBSDIJWFUP4GPSGVUVSF EFQMPZ • "84TUBOEBSEUPPMJOTUBMMFEJO"NB[PO-JOVY CZEFGBVMU • 6QMPBETUBUJDSFTPVSDFT JNBHF
TDSJQU DTT XJUIJOBSDIJWFUP4GPS$%/EFMJWFSZ • *OIPVTFVQMPBEJOHUPPM
%PDLFSOJ[FJOIPVTFVQMPBEJOHUPPM $ /usr/local/bin/upload-static-s3 ROOT.war –b <cdn-bucket> # Dockerfile ENTRYPOINT [“/usr/local/bin/upload-static-s3”]
$ docker run --rm <in-house-registory>/upload-static-s3 ROOT.war – b <cdn-bucket>
#VJME5JNF5SFOE
8IPMF$*QSPDFTTQPSUBCMF
4VNNBSZ
-FTTPO-FBSOFE • $*NFFUTQSPCMFNTMJLF • 5PPNBOZCSBODIFTUPUFTU • $PNQMJDBUFEUFTUJOHFOWJSPONFOU • %PDLFSDBOTPMWFUIFNF⒏DJFOUMZ
,FZ1PJOUTUPVTF%PDLFSJO$* • 4FUVQTMBWF • 4JNQMJGZUFTU • "DDFMFSBUFUFTU • 3FUSJFWFCVJMESFTVMU •
6QMPBEBSDIJWF
1SPEVDUJPO6TF$BTFJO+BQBO
%PDLFSJO$* • (PPEQMBDFUPTUBSU%PDLFS • $*CFDPNFTDPNNPOQSBDUJDF • *OTUBMMJOH%PDLFSJO$*EPFTO`UDIBOHF NBOZUIJOHT • 8FDPVMEIBWFCFTUQSBDUJDFJOUIJTBSFB
IUUQTXXXEPDLFSDPNQSPEVDUTVTFDBTFT
None