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
SCAとDockerを触ってみよう!DecSecOps入門ワークショップ / SCA and ...
Search
ihcomega56
March 24, 2022
Technology
1
260
SCAとDockerを触ってみよう!DecSecOps入門ワークショップ / SCA and Docker workshop
GitHubリポジトリ:
https://github.com/ihcomega56/SCAandDockerHandsOn
ihcomega56
March 24, 2022
Tweet
Share
More Decks by ihcomega56
See All by ihcomega56
JEP 455: Primitive Types in Patterns, instanceof, and switch (Preview)
ihcomega56
1
84
シリコンバレーのチームで経験したふりかえり - 共通点とギャップ / retrospectives in silicon valley
ihcomega56
5
1.8k
「サプライチェーン攻撃」に立ち向かう!SBOMを使った脆弱性管理がもたらす品質とスピード向上
ihcomega56
2
2.4k
アプリケーション開発者目線で語る、明日から始めるDevSecOps
ihcomega56
0
170
パターンマッチングを学んで新しいJavaの世界へ!Java 18までの目玉機能をおさらいしよう / Java 18 pattern matching
ihcomega56
3
1.4k
JFrogのDevOps Platformづくりを支えるオブザーバビリティ / JFrog Observability
ihcomega56
0
470
SBOMでソフトウェアを守れ!10年後も自信を持ってリリースするために今始めるDevSecOps / DevSecOps with SBOM for yourself 10 years from now
ihcomega56
1
6.1k
Javaアプリケーションの アーティファクト管理と DevSecOps / Java artifacts management and DevSecOps
ihcomega56
0
2.5k
元現場エンジニアが思う「もっとこうしておけばよかった」から学ぶDevSecOps / DevSecOps Best Practices learned from my experiences
ihcomega56
1
510
Other Decks in Technology
See All in Technology
SnowflakeとDatabricks両方でRAGを構築してみた
kameitomohiro
1
440
新卒エンジニアがCICDをモダナイズしてみた話
akashi_sn
2
250
YOLOv10~v12
tenten0727
4
970
Dynamic Reteaming And Self Organization
miholovesq
3
600
白金鉱業Meetup_Vol.18_生成AIはデータサイエンティストを代替するのか?
brainpadpr
3
120
AIコーディングの最前線 〜活用のコツと課題〜
pharma_x_tech
3
2.1k
“パスワードレス認証への道" ユーザー認証の変遷とパスキーの関係
ritou
1
610
LangfuseでAIエージェントの 可観測性を高めよう!/Enhancing AI Agent Observability with Langfuse!
jnymyk
1
240
バックオフィス向け toB SaaS バクラクにおけるレコメンド技術活用 / recommender-systems-in-layerx-bakuraku
yuya4
6
560
watsonx.data上のベクトル・データベース Milvusを見てみよう/20250418-milvus-dojo
mayumihirano
0
120
C++26アップデート 2025-03
faithandbrave
0
870
Cursor AgentによるパーソナルAIアシスタント育成入門―業務のプロンプト化・MCPの活用
os1ma
14
4.9k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Building Applications with DynamoDB
mza
94
6.3k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.5k
A Modern Web Designer's Workflow
chriscoyier
693
190k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
The Language of Interfaces
destraynor
157
25k
We Have a Design System, Now What?
morganepeng
52
7.5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.6k
Embracing the Ebb and Flow
colly
85
4.6k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Code Review Best Practice
trishagee
67
18k
Transcript
1 ࣗݾհ Α͜ͳ "ZBOB:PLPUB • +'SPHͷ%FWFMPQFS"EWPDBUF • લ৬·ͰओʹόοΫΤϯυͷ։ൃ ʢ4*FS ࠂձࣾ
ূ݊ελʔτΞοϓʣ • ܹ௧ͱ໊ߴ͍ମʹߦͬͨ !"#$$%&' (#)*+,%-.
ࠓΔ͜ͱ • %PDLFSΠϝʔδΛϏϧυɾ࣮ߦ͢Δ • $*$%ΛͬͯΠϝʔδΛϦϙδτϦཧ͢Δʢ+'SPH "SUJGBDUPSZʣ • Πϝʔδʹର͠੬ऑੑεΩϟϯΛ࣮ߦ͢Δʢ+'SPH 9SBZʣ
εςοϓ %PDLFSΠϝʔδΛ࡞࣮ͯ͠ߦ͢Δ
%PDLFSGJMFͷॻ͖ํ FROM nginx:latest COPY ./index.html /usr/share/nginx/html/index.html ඞͣϑΝΠϧ໊%PDLFSGJMFͱ͢Δ %PDLFS͕Ϗϧυ༻ϑΝΠϧΛ໊લͰผ ͢ΔͨΊ
%PDLFSGJMFͰ͑Δ ίϚϯυ Ϗϧυͯ͠ΠϝʔδΛ࡞͢Δ docker build
• FROM ϕʔεͱͳΔΠϝʔδΛࢦఆ͢Δ • RUN Ϗϧυ࣌ʹίϯςφͰίϚϯυΛ࣮ߦ͢Δ • ENV ,FZ7BMVFܗࣜͰڥมΛࢦఆ͢Δ •
ADD, COPY ΠϝʔδϑΝΠϧΛίϐʔ͢Δ ˠ<ϦϯΫ>"%%ͱ$01:جຊ$01:Λ͏ • CMD, ENTRYPOINT ίϯςφىಈ࣌ʹ࣮ߦ͢ΔίϚϯυҾΛ ͋ ࢦఆ͢Δ ˠ<ϦϯΫ>$.%ͱ&/53:10*/5ͷΈ߹Θͤ جຊతͳ%PDLFSGJMFͷίϚϯυ
ΞϓϦέʔγϣϯͷίϯςφԽ • ݴޠϑϨʔϜϫʔΫʹΑͬͯΓํͦΕͧΕ͕ͩɺࢿྉ ͨ͘͞Μ͋ΔͷͰ ࠷ۙެࣜυΩϡϝϯτ๛ ࢀߟʹͯ͠ ࣮ݱͰ͖Δ • جຊతʹ࣍ͷ͍ͣΕ͔ͷํͰ%PDLFSGJMFΛॻ͍͍ͯ͘
• ιʔείʔυΛίϯςφʹίϐʔ͠ɺΠϝʔδͷϏϧυ࣌ʹΞϓϦ έʔγϣϯϏϧυ͢Δ • Ϗϧυͨ͠ΞϓϦέʔγϣϯͷ࣮ߦϑΝΠϧΛίϯςφʹίϐʔ͢Δ
αϯϓϧΞϓϦέʔγϣϯ ࣮ߦ ϑΝΠϧ ιʔε ίʔυ /012345 6789:2 :;32<= Ϗϧυ͢Δ
HSBEMFX CPPU+BS ࣮ߦ͢Δ KBWBKBSBQQIBOETPOKBS
αϯϓϧΞϓϦέʔγϣϯ ࣮ߦ ϑΝΠϧ ΞϓϦ༻ ίϯςφ ᶃίϐʔ ᶄίϯςφͰ࣮ߦ ࣮ߦ ϑΝΠϧ
ϋϯζΦϯλΠϜ • ιʔείʔυϦϙδτϦΛϑΥʔΫɺΫϩʔϯ͠Α͏ • IUUQTHJUIVCDPNJIDPNFHB4$"BOE%PDLFS)BOET0O • IBOETPOϒϥϯνΛ͍ͬͯ͘ • %PDLFSGJMFΛͤ͞Α͏
# TODO: アプリケーションの実⾏ファイルをコンテナ内にコピーする . COPY build/libs/*.jar work/app.jar . # TODO: アプリケーションを起動してコンテナを実⾏する . ENTRYPOINT ["java","-jar","/work/app.jar"] .
Α͘͏ίϯςφͷૢ࡞ ίϯςφΛҰཡදࣔ͢Δ docker ps ࣮ߦ த ఀࢭ த ίϯςφΛఀࢭ͢Δ
docker stop ίϯςφΛىಈ͢Δ docker start ࣮ߦதͷίϯςφͰίϚϯυΛ࣮ߦ͢Δ docker exec ίϯ ςφ ࣮ߦதͷίϯςφͷϩάΛग़ྗ͢Δ docker logs ίϯςφΛআ͢Δ docker rm ରఀࢭதͷίϯςφɻ ಈ͍͍ͯΔͷΛࢭΊΔ࣌ GΦϓγϣϯΛ͚ͭΔ ͪΐͬͱ͓ͨ͠ࢼ͠ ௐࠪʹ͏͜ͱ͕ଟ͍ ର࣮ߦதͷίϯςφɻ ࢭ·͍ͬͯΔͷݟΔ࣌ BΦϓγϣϯΛ͚ͭΔ
ҎԼͷ͍ͣΕ͔ͰΠϝʔδΛಛఆ͢Δ • *% • Πϝʔδ໊<λά໊> • Πϝʔδ໊<!μΠδΣετ> %PDLFSΠϝʔδͷಛఆɾ࣮ߦ ίϯςφΛ࡞ɾ࣮ߦ͢Δ
docker run σϑΥϧτϑΥΞάϥϯυ ࣮ߦɻόοΫάϥϯυʹ͢Δ ʹEΦϓγϣϯΛ͚ͭΔ ίϯςφΛ࡞͢Δ docker create ίϯςφΛ࣮ߦ͢Δ docker start
ϋϯζΦϯλΠϜ • ΞϓϦέʔγϣϯΛϏϧυ͠Α͏ ./gradlew bootJar • %PDLFSGJMFΛϏϧυ͠Α͏ docker build
-t ihcomegaws.jfrog.io/handson-docker/sample-app:latest . • ໊લͱλάΛ͚Δ <αʔόʔ><ϦϙδτϦ><໊લ><λά> • %PDLFSGJMFͷύεΛࢦఆʢ࣮࠷ޙʹυοτ͕͋Δͷʹʣ
ϋϯζΦϯλΠϜ • ίϯςφΛ࣮ߦ͠Α͏ docker run --name my-container ‒p 8888:8080
ihcomegaws.jfrog.io/handson-docker/sample-app:latest • ίϯςφʹNZDPOUBJOFSͱ໊લΛ͚ͭͯىಈʢࢦఆ͠ͳ͍߹ɺࣗಈ Ͱ໊લ͕ͭ͘ʣ • ίϯςφͷϙʔτΛͱͯ͠ϗετଆʹެ։ • IUUQMPDBMIPTUʹΞΫηε͠Α͏ • มߋΛ(JUʹϓογϡ͠Α͏
खݩͷཧ • ஈʑϩʔΧϧʹΠϝʔδ͕ͨ·͍ͬͯ͘ͷͰ࣌ʑ֬ೝ͠Α͏ • ͍Βͳ͍ͷআ͠Α͏ %PDLFSΠϝʔδҰཡΛදࣔ͢Δ docker images %PDLFSΠϝʔδΛআ͢Δ
docker rmi >391 ?@ABC:D EFGHIJ=
εςοϓ $*$%ͰΠϝʔδΛ ϦϙδτϦʹอ͢Δ
ϩʔΧϧϦϙδτϦʹอ • ࡞ͨ͠ΠϝʔδʮόΠφϦɾϦϙδτϦϚωʔδϟʔʯʹ อ͠ɺ͔ͦ͜ΒγΣΞ࠶ར༻Λ͢Δ • ಉ͡%PDLFSGJMFΛԿϏϧυ͢ΔͷΛආ͚ ࣌ؒΛઅͰ͖Δ • ࣭͕୲อ͞ΕͨΠϝʔδΛ͍ճͤΔ
औಘ͢Δ อ͢Δ
ϦϞʔτϦϙδτϦΛհͯ͠औಘ • औಘͨ͠ΠϝʔδʮόΠφϦɾϦϙδτϦ Ϛωʔδϟʔʯʹอ͓ͯ͘͠ • ΩϟογϡͷׂΛՌͨ͢ • ߴʹऔಘͰ͖Δ •
֎෦ϦϙδτϦʹΞΫηε Ͱ͖ͳͯ͘औಘͰ͖Δ औಘͭͭ͠ อ͢Δ
ϦϙδτϦͰΠϝʔδΛཧ %PDLFSΠϝʔδΛμϯϩʔυ͢Δ docker pull %PDLFSϨδετϦʹϩάΠϯ͢Δ docker login %PDLFSΠϝʔδΛݕࡧ͢Δ docker
search %PDLFSΠϝʔδΛΞοϓϩʔυ͢Δ docker push
όʔνϟϧϦϙδτϦ • ϩʔΧϧϦϙδτϦɾόʔνϟϧϦϙδτϦΛଋͶΔ • อऔಘόʔνϟϧϦϙδτϦʹରͯ͠ૢ࡞͢Εྑ͍ ϩʔΧϧ ϦϞʔτ όʔνϟϧ KGLM>BC
NOHPN1QR S5TUV7W
ϋϯζΦϯλΠϜ • ίϯςφΠϝʔδ༻ͷϦϙδτϦΛ࡞͠Α͏
(JU)VC"DUJPOT • HJUIVCXPSLGMPXTҎԼʹઃఆϑΝΠϧΛஔ͢Δͱ͑Δ • ·ͣτϦΨʔΛࢦఆ͢Δ • QVTI13ͳͲιʔείʔυϦϙδτϦʹର͢Δૢ࡞ • εέδϡʔϧ
• खಈ • XFCIPPL • ࣮ߦ͕࢝ΊΒΕΕɺ͋ͱΓ͍ͨ͜ͱΛܨ͍͛ͯ͘
ϫʔΫϑϩʔͷߏ
$*$%ͷجຊ • ΰʔϧͱաఔΛࢥ͍ඳ͍ͯ࡞ۀ͢Δ • ໋໊ίϝϯτͰ࣮ݱ͍ͨ͠ॲཧΛදݱ͢Δ • ઃఆϑΝΠϧ7$4Ͱཧ͢Δ • ύεϫʔυͷΑ͏ͳൿಗใઃఆϑΝΠϧʹॻ͔ͳ͍
• ႈੑͷ͋Δॲཧʹ͢Δ
ϋϯζΦϯλΠϜ • ΠϝʔδͷϏϧυɾϓογϡʹඞཁͳίϚϯυΛͤ͞Α͏ docker build -t ${{ secrets.JFROG_URL }}/handson-docker/sample-
app:latest . • ઌ΄Ͳͱಉ͕ͩ͡ɺ63-γʔΫϨοτมʹ͢Δ jfrog c add my-jfrog-server --url=https://${{ secrets.JFROG_URL }} --user=${{ secrets.JFROG_USER }} --password=${{ secrets.JFROG_API_KEY }} • ʢݟ͢͞ͷͨΊվߦ͍ͯ͠·͕࣮͢ࡍෆཁͰ͢ʣ • +'SPH$-*ͷઃఆͱͯ͠ɺ+'SPHͷαʔόʔͷొͱೝূઃఆΛߦ͏ • Ϣʔβʔ໊ͱ"1*ΩʔγʔΫϨοτมʹ͢Δ
ϋϯζΦϯλΠϜ jfrog rt dp ${{ secrets.JFROG_URL }}/handson-docker/sample-app:latest handson-docker --build-name=handson-build
--build-number=${{ env.JFROG_CLI_BUILD_NUMBER }} --server-id=my-jfrog-server • ʢݟ͢͞ͷͨΊվߦ͍ͯ͠·͕࣮͢ࡍෆཁͰ͢ʣ • ΠϝʔδΛࢦఆͯ͠EPDLFS QVTI͢Δ • ͜͜Ͱϓογϡઌͱͯ͠όʔνϟϧϦϙδτϦΛࢦఆ͢Δ • +'SPHͰϏϧυ୯ҐͰૢ࡞Λߦ͏ͨΊɺϏϧυΛಛఆ͢Δ໊લͱ൪߸ Λ༩͢Δ • ͜͜ͰϏϧυͷ൪߸ʹ$-*͕ఏڙͯ͘͠ΕΔΛ࠾༻͢Δ • αʔόʔ*%ઃఆͰՃͨ͠ͷΛࢦఆ͢Δ
ϋϯζΦϯλΠϜ jfrog rt bce handson-build ${{ env.JFROG_CLI_BUILD_NUMBER }} •
CVJMEJOGPʢϏϧυʹؚ·ΕΔͷґଘɺϏϧυΛߦͬͨڥͳͲ ͷ༷ʑͳใʣΛऩू͢Δ jfrog rt bp handson-build ${{ env.JFROG_CLI_BUILD_NUMBER }} • CVJME JOGPΛϦϙδτϦʹөͤ͞Δ
ϋϯζΦϯλΠϜ • 4FDSFUTΛઃఆ͠Α͏ • +'30(@63- • +'30(@64&3 • +'30(@"1*@,&:
• $*$%ͷτϦΨʔΛࢦఆ͠Α͏ • มߋͨ͠ઃఆϑΝΠϧΛϓογϡ͠Α͏
εςοϓ Πϝʔδͷ੬ऑੑεΩϟϯΛߦ͏
ϙϦγʔɺϧʔϧɺΥον ϙϦγʔ ϧʔϧ ϧʔϧ ϧʔϧ ϧʔϧ Υον
ϙϦγʔɺϧʔϧɺΥον • ϧʔϧݕ͢Δ੬ऑੑͷϨϕϧɺ੬ऑੑ͕ݟ͔ͭͬͨͱ͖ͷ ΞΫγϣϯʢ௨ํ๏$*$%ͷӨڹͳͲʣΛఆٛ͢Δ • ϙϦγʔϧʔϧΛଋͶͨͷ • ΥονϙϦγʔͱεΩϟϯରʢϦϙδτϦϏϧυʣΛ ඥ͚Δ
ϋϯζΦϯλΠϜ • ੬ऑੑεΩϟϯͷઃఆΛ͠Α͏ • 9SBZΛ༗ޮʹ͢Δ • ϏϧυΛΠϯσοΫε͢Δ • ϙϦγʔɺϧʔϧɺΥονΛ࡞͢Δ
• ΠϝʔδΛεΩϟϯ͠Α͏ jfrog rt bs handson-build ${{ env.JFROG_CLI_BUILD_NUMBER }} • εΩϟϯ݁ՌΛ֬ೝ͠Α͏
ϋϯζΦϯλΠϜ • ϥΠϒϥϦͷόʔδϣϯΛ্͛ͯ࠶ϏϧυΛ࣮ߦ͠ɺ݁ՌΛ ֬ೝ͠Α͏ • 4#0.ΛݟͯΈΑ͏ʢແྉͩͱ͑ͳ͍ͨΊΑ͜ͳ͕͓ݟͤ͠·͢ʣ