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
2
470
Docker in CI - Cacoo與Backlog導入Docker的經驗分享
Presentation slides at
http://containersummit.ithome.com.tw/
株式会社ヌーラボ
PRO
December 10, 2015
Tweet
Share
More Decks by 株式会社ヌーラボ
See All by 株式会社ヌーラボ
ヌーラボが取り組む RevOpsのこれまでとこれから
nulabinc
PRO
1
65
【資料】30分でわかる!“とりあえず課題を作った”から抜け出すBacklog活用術
nulabinc
PRO
0
46
【展示会ご参加者様向け】Backlog概要編-配布資料
nulabinc
PRO
0
37
Why Platform Engineering? - マルチプロダクト・少人数 SRE の壁を越える挑戦 -
nulabinc
PRO
5
730
Datadog のトライアルを成功に導く技術 / Techniques for a successful Datadog trial
nulabinc
PRO
0
370
僕たちは何を守っているのか?ビジネスを守る、ヌーラボのセキュリティ実践
nulabinc
PRO
1
77
Snowflake九州ユーザー会
nulabinc
PRO
0
69
ヌーラボ‧ウェブサイト課の ⼀年間の取り組みをふり返る
nulabinc
PRO
1
1.1k
今からでも入れる re:Inventがあるんですか!?
nulabinc
PRO
0
450
Other Decks in Technology
See All in Technology
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
6.9k
OpenTelemetryセマンティック規約の恩恵とMackerel APMにおける活用例 / SRE NEXT 2025
mackerelio
3
2k
三視点LLMによる複数観点レビュー
mhlyc
0
230
スタックチャン家庭用アシスタントへの道
kanekoh
0
120
microCMSではじめるAIライティング
himaratsu
0
150
LIXIL基幹システム刷新に立ち向かう技術的アプローチについて
tsukuha
1
380
アクセスピークを制するオートスケール再設計: 障害を乗り越えKEDAで実現したリソース管理の最適化
myamashii
1
670
ロールが細分化された組織でSREは何をするか?
tgidgd
1
420
「現場で活躍するAIエージェント」を実現するチームと開発プロセス
tkikuchi1002
3
350
伴走から自律へ: 形式知へと導くSREイネーブリングによる プロダクトチームの信頼性オーナーシップ向上 / SRE NEXT 2025
visional_engineering_and_design
3
460
Microsoft Defender XDRで疲弊しないためのインシデント対応
sophiakunii
1
320
SREの次のキャリアの道しるべ 〜SREがマネジメントレイヤーに挑戦して、 気づいたこととTips〜
coconala_engineer
1
4.4k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Done Done
chrislema
184
16k
We Have a Design System, Now What?
morganepeng
53
7.7k
The World Runs on Bad Software
bkeepers
PRO
70
11k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Building Applications with DynamoDB
mza
95
6.5k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
340
The Pragmatic Product Professional
lauravandoore
35
6.7k
Music & Morning Musume
bryan
46
6.7k
Typedesign – Prime Four
hannesfritz
42
2.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
How to Think Like a Performance Engineer
csswizardry
25
1.7k
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