Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Remote Development with Podman

20451295e0cb4dce2b2805b2a61cd92d?s=47 Shion Tanaka
November 21, 2020

Remote Development with Podman

VS Code Conference Japan の登壇に使用したスライドです。
スライドの公開にあたり登壇時点より内容が更新されています。

[タイトル」Remote Development with Podman

[概要]
PodmanはDocker互換かつOSSのコンテナーエンジンです。RHEL8/CentOS8からはDockerがサポートされなくなりPodmanが標準のコンテナーエンジンとなりました。新しいコンテナーエンジンでありDockerに無い特徴も備えていることからPodmanの注目度が上がってきています。今後さらにPodmanを利用したコンテナーの実行、開発も増えていくと思われます。そこで本セッションではDockerではなくPodmanを使ったVS Code上の開発方法を解説します。VS CodeにおけるPodmanのサポートはまだ始まったばかりでまだ発展途上です。本セッションに参加することで「VS Code + Podmanを利用したコンテナー上の開発手法」「Remote Development + Podmanの最新動向」を知ることができます。なお、本セッションはVS Code Meetup #6でのLT内で少し紹介したPodmanとRemote-Containersを利用する方法をより具体的に紹介する内容となります。

Level / 難易度: Medium / 中級
想定する主な聴講者: RHEL8/CentOS8利用開発者、その他OSでのPodman利用開発者。Remote-Containersを使ってコンテナー上の開発を行いたい人。

[イベントページ]
VS Code Conference Japan - connpass
https://vscode.connpass.com/event/184441/

[動画アーカイブ]
https://youtu.be/GqC5wQV2bG8

20451295e0cb4dce2b2805b2a61cd92d?s=128

Shion Tanaka

November 21, 2020
Tweet

Transcript

  1. WTDPEFKQ 3FNPUF%FWFMPQNFOU XJUI1PENBO /PW W 74$PEF$POGFSFODF+BQBO 4IJPO5BOBLB !UOLPO 

  2. WTDPEFKQ ࣗݾ঺հ  • ాத࢘ԸʢλφΧ γΦϯʣ!UOLPO • ϨουϋοτגࣜձࣾɿιϦϡʔγϣϯΞʔΩςΫτ • 74$PEF.FFUVQ

    • -5ɿʮ3FNPUF$POUBJOFSTͷ઀ଓઌϗετʹ 'FEPSB$PSF04Λ࢖͏ʯ IUUQTWTDPEFDPOOQBTTDPNFWFOU ࠷ۙ͸*5ΤϯδχΞ͔Ͳ͏͔΋ո͘͠ͳ͖ͬͯͨʜ ˠԻͱςΫϊϩδʔ͕ॏͳΔྖҬ͕޷෺ͷσδλϧΫϦΤΠλʔ
  3. WTDPEFKQ ΞδΣϯμ • 3FNPUF%FWFMPQNFOUͱ 1PENBO • 3FNPUF$POUBJOFSTXJUI1PENBOͷ࣮ફ • ·ͱΊ •

    ΦϚέ 
  4. WTDPEFKQ ຊ೔ͷςʔϚ •3FNPUF%FWFMPQNFOUXJUI1PENBO o%PDLFSΛ࢖Θͣίϯςφͷ࣮ߦʹ1PENBOΛ࢖༻͢Δ o3FNPUF%FWFMPQNFOUͰ1PENBO্Ͱ࣮ߦͨ͠ίϯςφʔͷ தͰ։ൃΛߦ͏ 

  5. WTDPEFKQ ݁࿦ • 3FNPUF44)84-ͱ1PENBOΛซ༻͢Δͷ͸໰୊ແ͠ • 3FNPUF$POUBJOFST͸%PDLFSΛ࢖͏ͷ͕շద ݱ࣌఺Ͱ͸ 

  6. WTDPEFKQ 3FNPUF%FWFMPQNFOU ͱ 1PENBO 

  7. WTDPEFKQ 3FNPUF%FWFMPQNFOU • 3FNPUF44) • 3FNPUF84- • 3FNPUF$POUBJOFST 

  8. WTDPEFKQ 3FNPUF$POUBJOFSTͱ 1PENBO • 1PENBOͷαϙʔτ͸ ೥݄ɺ74$PEFW͔Β  https://code.visualstudio.com/updates/v1_45?ref=codebldr

  9. WTDPEFKQ 3FNPUF$POUBJOFSTͱ 1PENBO • %PDLFS1BUIʹ QPENBO ͱࢦఆ͢Δ͚ͩ  Developing inside

    a Container using Visual Studio Code Remote Development https://code.visu alstudio.com/doc s/remote/contain ers
  10. WTDPEFKQ 1PENBOͱ͸ • 1PENBO UIF10%."/BHFS • 044ͷ%PDLFSޓ׵ͷίϯςφʔπʔϧ • ಛ௃ o

    σʔϞϯϨε o ϧʔτϨε o 0$*४ڌ  https://podman.io/
  11. WTDPEFKQ 1PENBOࢀߟϦϯΫ • %PDLFSϢʔβʔͷͨΊͷ1PENBOͱ#VJMEBIͷ঺հ  ੺๧Τϯδ χΞϒϩά o IUUQTSIFCIBUFOBCMPHDPNFOUSZQPENBO@CVJEBI@GPS@EPDLFS@VTFST •

    ίϯςφʔͷߏஙɺ࣮ߦɺ͓Αͼ؅ཧ 3FE )BU &OUFSQSJTF -JOVYc3FE)BU$VTUPNFS1PSUBM o IUUQTBDDFTTSFEIBUDPNEPDVNFOUBUJPOKBKQSFE@IBU@FOUFSQSJTF@MJOVYIUNM TJOHMFCVJMEJOH@SVOOJOH@BOE@NBOBHJOH@DPOUBJOFSTJOEFY • τϥϒϧରԠ৘ใʢˣΦεεϝʣ o QPENBOUSPVCMFTIPPUJOHNEBUNBTUFSuDPOUBJOFSTQPENBO § IUUQTHJUIVCDPNDPOUBJOFSTQPENBOCMPCNBTUFSUSPVCMFTIPPUJOHNE 
  12. WTDPEFKQ %PDLFSαϙʔτ͞Εͳ͍໰୊ • 3)&-$FOU04͔Β%PDLFS͸αϙʔτର৅֎ o“RHEL 8 には Docker が含まれず、Red Hat

    のサポート対象外 になります” (引⽤:RHEL8ドキュメント) • ެ͔ࣜΒ%PDLFSͷύοέʔδ͸ఏڙ͞Εͳ͍ Ø“docker コマンドと Docker コンテナーエンジンも、Red Hat Enterprise Linux 8 から完全に削除しました。”(引⽤:RHEL8ド キュメント)  ίϯςφʔͷߏஙɺ࣮ߦɺ͓Αͼ؅ཧ 3FE )BU&OUFSQSJTF -JOVYc3FE)BU$VTUPNFS1PSUBM IUUQTBDDFTTSFEIBUDPNEPDVNFOUBUJPOKBKQSFE@IBU@FOUFSQSJTF@MJOVYIUNM TJOHMFCVJMEJOH@SVOOJOH@BOE@NBOBHJOH@DPOUBJOFSTJOEFY
  13. WTDPEFKQ 1PENBOͷରԠ04 • -JOVYσΟετϦϏϡʔγϣϯ o "NB[PO-JOVYɺ"SDI-JOVY.BOKBSP-JOVYɺ$FOU04ɺ%FCJBOɺ 'FEPSBɺ(FOUPPɺ0QFO&NCFEEFEɺPQFO464&ɺPQFO464&,VCJDɺ 3BTQCFSSZ1J04BSNIG FY3BTQCJBO ɺ3BTQCFSSZ1J04BSN

    CFUB ɺ3)&-ɺ6CVOUV • .BD oϦϞʔτΫϥΠΞϯτͷΈ • 8JOEPXT oϦϞʔτΫϥΠΞϯτͷΈ  QPENBOSFNPUFίϚϯυΛ࢖ͬ ͯɺ-JOVY্Ͱ1PENBOΛ࣮ߦ
  14. WTDPEFKQ 3FNPUF$POUBJOFSTXJUI 1PENBOͷ࣮ફ 

  15. WTDPEFKQ 1PENBOಈ࡞֬ೝࡁΈ؀ڥ • ʢࢀߟʣ3FNPUF44)ɺ3FNPUF84- oϦϞʔτ઀ଓઌͰ1PENBO͕ਖ਼ৗʹ࢖༻Ͱ͖Ε͹໰୊ແ͠ • 3FNPUF$POUBJOFST o-JOVYσεΫτοϓ্Ͱ74$PEFΛىಈ § 'FEPSB8PSL4UBJPOɿ0,ʂ

    o8JOEPXTσεΫτοϓ্Ͱ74$PEFΛىಈ § 8JOEPXT 84-ʢ6CVOUVʣɿ0,ʂ 
  16. WTDPEFKQ 1PENBOPO'FEPSB • ಈ࡞֬ೝ o ʮ"EE%FWFMPQNFOU$POUBJOFS$POGJHVSBUJPO'JMFTʯͰ ௥Ճͨ͠ૉͷEFWDPOUBJOFSKTPO § 0,ʂʢΤϥʔରԠඞཁʣ o

    (JUDMPOFͨ͠WTDPEFSFNPUFUSZQZUIPO § 0,ʂʢΤϥʔରԠඞཁʣ o 5SZBTBNQMF § /( • ϙΠϯτ o 74$PEFαϙʔτͷߏ੒ o 1PENBO͸ҰൠϢʔβʔͰ࣮ߦՄೳ o 4&-JOVYͷແޮԽෆཁ § ΤϥʔରԠͷιʔεमਖ਼͸ඞཁ  1PENBO 74$PEF 3FNPUF$POUBJOFST ίϯςφʔ ϩʔΧϧ୺຤
  17. WTDPEFKQ 1PENBOPO'FEPSB • ΤϥʔରԠ o EFWDPOUBJOFSKTPOΛमਖ਼  SVO"SHT<TFDVSJUZPQU MBCFMEJTBCMF> SFNPUF6TFS

  18. WTDPEFKQ 1PENBOPO'FEPSB  74$PEFͰ։͍ͨϩʔΧϧ؀ڥ্ͷ ιʔεϑΝΠϧ

  19. WTDPEFKQ 1PENBOPO'FEPSB  1PENBOͰί ϯςφ͕ىಈ ͞Ε͍ͯΔ %FW$POUBJOFS"MQJOF W ˠʮ"EE%FWFMPQNFOU$POUBJOFS $POGJHVSBUJPO'JMFTʯͰ௥Ճͨ͠ૉͷ

    EFWDPOUBJOFSKTPO
  20. WTDPEFKQ 1PENBOPO84- 6CVOUV • ಈ࡞֬ೝ o ʮ"EE%FWFMPQNFOU$POUBJOFS$POGJHVSBUJPO'JMFTʯͰ ௥Ճͨ͠ૉͷEFWDPOUBJOFSKTPO § 0,ʂ

    o (JUDMPOFͨ͠WTDPEFSFNPUFUSZQZUIPO § /( o 5SZBTBNQMF § /(ʢϝχϡʔ͕ग़ͯ͜ͳ͍ɻ84-ͷத͔ͩΒʁʣ • ϙΠϯτ o 3FNPUF84-Ͱ઀ଓͨ͠؀ڥͷ্Ͱɺ͞Βʹ3FNPUF $POUBJOFSTΛ࣮ߦ o ඇެࣜͳߏ੒ o 1PENBO͸ҰൠϢʔβʔͰ࣮ߦՄೳ  1PENBO 74$PEF 3FNPUF84- 3FNPUF$POUBJOFST ίϯςφʔ ϩʔΧϧ୺຤ 84- 6CVOUV
  21. WTDPEFKQ 1PENBOPO84- 6CVOUV • 1PENBOͷΠϯετʔϧ o 84-ىಈޙԼهΛ࣮ߦ o FUDDPOUBJOFSTDPOUBJOFSTDPOGΛमਖ਼ 

    FUDPTSFMFBTF TVEPTIDFDIPEFCIUUQEPXOMPBEPQFOTVTFPSHSFQPTJUPSJFTEFWFMLVCJDMJCDPOUBJOFSTTUBCMFY\/".&^@\7&34*0/@*%^ FUDBQUTPVSDFTMJTUEEFWFMLVCJDMJCDPOUBJOFSTTUBCMFMJTU XHFUOWIUUQTEPXOMPBEPQFOTVTFPSHSFQPTJUPSJFTEFWFMLVCJDMJCDPOUBJOFSTTUBCMFY\/".&^@\7&34*0/@*%^3FMFBTFLFZ03FMFBTFLFZ TVEPBQULFZBEE 3FMFBTFLFZ TVEPBQUHFUVQEBUFRR TVEPBQUHFURRZJOTUBMMQPENBO TVEPNLEJSQFUDDPOUBJOFST FDIPF<SFHJTUSJFTTFBSDI>aOSFHJTUSJFT<EPDLFSJP RVBZJP>cTVEPUFFFUDDPOUBJOFSTSFHJTUSJFTDPOG TVEPWJFUDDPOUBJOFSTDPOUBJOFSTDPOG DHSPVQ@NBOBHFSDHSPVQGT FWFOUT@MPHHFSGJMF How to run Podman on Windows with WSL2 | Enable Sysadmin https://www.redhat.com/sysadmin/podman-windows-wsl2
  22. WTDPEFKQ 1PENBOPO84- 6CVOUV  74$PEFͰ։͍ͨ84-؀ڥ্ͷι ʔεϑΝΠϧ 84-্Ͱ࣮ߦ͞Εͯ ͍Δ

  23. WTDPEFKQ 1PENBOPO84- 6CVOUV  1PENBOͰί ϯςφ͕ىಈ ͞Ε͍ͯΔ %FW$POUBJOFS"MQJOF W ˠʮ"EE%FWFMPQNFOU$POUBJOFS

    $POGJHVSBUJPO'JMFTʯͰ௥Ճͨ͠ૉͷ EFWDPOUBJOFSKTPO
  24. WTDPEFKQ .BD͸Ͳ͏͢Ε͹ʜ • .BDͰ͸84-΋ͳ͘ɺQPENBOSFNPUF͔͠࢖͑ͳ͍ o3FNPUF$POUBJOFSTͰ͸QPENBOSFNPUF͸ಈ࡞͠ͳ͍ • ͦ΋ͦ΋ɺ3FNPUF$POUBJOFSTͷཁ݅͸ %PDLFSΛ༻ҙ͢Δ͜ͱ ˠ1PENBOΛ࢖ͬͯ%PDLFSΛಈ͔ͤ͹Α͍ͷͰ͸ʁ 

  25. WTDPEFKQ %PDLFSJO%PDLFS • %PDLFSͷ্ͰʢதͰʁʣ%PDLFSΛಈ͔ٕ͢ज़ • %PDLFSΦϑΟγϟϧΠϝʔδ͋Γ  docker - Docker

    Hub https://hub.docker.com/_/docker
  26. WTDPEFKQ %PDLFSJO1PENBOͷ࣮ߦํ਑ • 5$1Ͱ௚઀ιέοτ઀ଓ o TFUUJOHTKTPOʢEPDLFSDPOUFYUͰઃఆ΋Մೳʣ • ϧʔτݖݶͰ࣮ߦ o ݱ࣌఺Ͱ͸ճආෆೳ

    • $HSPVQWʹมߋ • ࣮ߦίϚϯυ  EPDLFSIPTUUDQ\ϦϞʔτ઀ଓઌϗετͷ*1ΞυϨε^ EPDLFSUMT7FSJGZ TVEPEOGJOTUBMMHSVCCZ TVEPHSVCCZVQEBUFLFSOFM"--BSHTTZTUFNEVOJGJFE@DHSPVQ@IJFSBSDIZz TVEPSFCPPU 1PENBO ίϯςφʔ ϦϞʔτ઀ଓઌϗετ %PDLFS ίϯςφʔ TVEPQPENBOSVOMPHMFWFMEFCVHF%0$,&3@5-4@$&35%*3QSJWJMFHFEEJUOBNFEJOEQEPDLFSEJOE l10354z ͜ΕΛࢦఆ
  27. WTDPEFKQ %PDLFSJO1PENBOPO'FEPSB  74$PEF 3FNPUF$POUBJOFST %PDLFS$-* ʻϩʔΧϧ୺຤͔Βίϯςφ࣮ߦ͞Ε͍ͯΔ%PDLFSϗετ΁5$1௚઀઀ଓʼ ϩʔΧϧ୺຤ ϦϞʔτ઀ଓઌϗετ 1PENBO

    ίϯςφʔ %PDLFS ίϯςφʔ %PDLFS$-*ͷΈඞཁɻ %PDLFS&OHJOFͷ࣮ߦ ͸ෆཁɻ
  28. WTDPEFKQ %PDLFSJO1PENBOPO'FEPSB • ಈ࡞֬ೝ o ʮ"EE%FWFMPQNFOU$POUBJOFS$POGJHVSBUJPO'JMFTʯͰ௥Ճͨ͠ૉͷ EFWDPOUBJOFSKTPO § 0,ʂʢΤϥʔରԠඞཁʣ o

    (JUDMPOFͨ͠WTDPEFSFNPUFUSZQZUIPO § /( o 5SZBTBNQMF § /( o ىಈࡁΈͷίϯςφͷΞλον § 0,ʂ • ϙΠϯτ o ඇެࣜͳߏ੒ o 1PENBOͰ%PDLFSJO%PDLFSίϯςφͷ࣮ߦʹϧʔτݖݶ͕ඞཁ o ϩʔΧϧ୺຤ͷιʔεϑΝΠϧͱ%FW$POUBJOFS಺ͷϑΝΠϧ͸௚઀ಉظ͠ ͳ͍ʢ %FW$POUBJOFSͷϚ΢ϯτઌ͸%PDLFSϗετΛࢀর͢ΔͨΊʣ  1PENBO ίϯςφʔ ϦϞʔτ୺຤ %PDLFS ίϯςφʔ
  29. WTDPEFKQ %PDLFSJO1PENBOPO'FEPSB • ΤϥʔରԠ o EFWDPOUBJOFSKTPO಺ͷ8PSLTQBDFϚ΢ϯτॲཧΛमਖ਼͢Δʢ͍ͣΕ͔ͷํ๏Λࢦఆʣ § %PDLFS7PMVNFΛࢦఆ͢Δํ๏ʢ%PDLFS7PMVNF͸ࣄલʹ࡞੒͓ͯ͘͠ʣ § %PDLFSϗετʢ%PDLFSJO1PENBO্ͷʣͷύεΛࢦఆ͢Δ

     XPSLTQBDF.PVOUTPVSDF%PDLFS7PMVNF໊ UBSHFUXPSLTQBDF UZQFWPMVNF XPSLTQBDF'PMEFSXPSLTQBDFWTDPEFSFNPUFUSZQZUIPO XPSLTQBDF.PVOUTPVSDFIPNFVTFSWTDPEFSFNPUFUSZQZUIPO UBSHFUXPSLTQBDF UZQFWPMVNF XPSLTQBDF'PMEFSXPSLTQBDF ʢ஫ҙʣϩʔΧϧ؀ڥͱ௚઀ͷϑΝΠϧಉظ͸Ͱ͖ͳ͍ͷͰɺಉظ͸(JUͳͲΛ࢖͏ඞཁ͕͋Δ
  30. WTDPEFKQ %PDLFSJO1PENBOPO'FEPSB  74$PEFͰ։͍ͨϩʔΧϧ؀ڥ্ͷ ιʔεϑΝΠϧʢ%FW$POUBJOFSͱ ͸௚઀ಉظ͞Εͳ͍ʣ 8PSLTQBDFͷ Ϛ΢ϯτํ๏Λࢦఆ %PDLFSϗετͱ ௚઀઀ଓઃఆ

  31. WTDPEFKQ %PDLFSJO1PENBOPO'FEPSB  [user@localhost ~]$ ip a show ens161 |grep

    192 inet 192.168.1.164/24 brd 192.168.1.255 scope global dynamic noprefixroute ens161 [user@localhost ~]$ docker bash: docker: command not found... Packages providing this file are: 'podman-docker' 'moby-engine' [user@localhost ~]$ whereis docker docker: [user@localhost ~]$ sudo podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 74fb9586cec9 docker.io/library/docker:dind 2 days ago Up 23 hours ago 0.0.0.0:2375->2375/tcp dind [user@localhost ~]$ sudo podman exec -it dind ls -la /home/user/vscode-remote-try-python total 36 drwxr-xr-x 1 root root 222 Nov 23 16:49 . drwxr-xr-x 1 root root 58 Nov 23 16:46 .. drwxr-xr-x 1 root root 54 Nov 23 16:46 .devcontainer drwxr-xr-x 1 root root 158 Nov 23 17:18 .git -rw-r--r-- 1 root root 89 Nov 23 16:46 .gitattributes -rw-r--r-- 1 root root 5594 Nov 23 16:46 .gitignore drwxr-xr-x 1 root root 22 Nov 23 16:46 .vscode -rw-r--r-- 1 root root 1183 Nov 23 16:46 LICENSE -rw-r--r-- 1 root root 4736 Nov 23 16:46 README.md drwxr-xr-x 1 root root 36 Nov 23 16:48 __pycache__ -rw-r--r-- 1 root root 456 Nov 23 16:46 app.py -rw-r--r-- 1 root root 5 Nov 23 16:46 requirements.txt drwxr-xr-x 1 root root 20 Nov 23 16:46 static -rw-r--r-- 1 root root 32 Nov 23 16:49 test.txt %FW$POUBJOFS1ZUIPO ˠ(JUDMPOFͨ͠WTDPEFSFNPUFUSZQZUIPO %PDLFSϗετ %PDLFSJO1PENBOʣ্ͷಉ͡ϑΝΠϧ܈
  32. WTDPEFKQ ·ͱΊ • 3FNPUF44)84-ͱ 1PENBOΛซ༻͢Δͷ͸໰୊ແ͠ • 3FNPUF$POUBJOFST͸ %PDLFSΛ࢖͏ͷ͕շద ݱ࣌఺Ͱ͸ o'FEPSBͳͲཁ݅͑͞੔͑͹3FNPUF$POUBJOFST

    1PENBO͸ར༻Մೳ o1PENBOPO84-΋Մೳ o%PDLFSJO1PENBO΋ར༻Մೳʢ੍ݶ͋Γʣ • ·ͩ·੍ͩݶ͸ଟ͍͕ɺࠓޙͷΞοϓσʔτͰ%PDLFSͱͷબ୒͕༰ қʹͰ͖ΔΑ͏ʹͳΔ͜ͱΛظ଴͍ͨ͠ 
  33. WTDPEFKQ 5IBOLZPV 

  34. WTDPEFKQ ΦϚέɿ'FEPSB$PSF04ͷ঺հ • ܰྔͳ04ɿ ØίϯςφʔΛಈ͔͢໨తҎ֎ͷ༨ܭͳ΋ͷ͕ͳ͍ • Πϯετʔϧɺ04ઃఆ͕؆୯ɿ Ø*HOJUJPOͱ͍͏࢓૊ΈΛར༻ • %PDLFSʢNPCZFOHJOFʣɺ1PENBOඪ४౥ࡌɿ

    ØΠϯετʔϧͷखؒ΍ޓ׵ੑΛؾʹͤͣɺ͙͢ʹίϯς φʔΛ࣮ߦՄೳ  4PGUXBSF%FTJHO݄߸ͷ݄ץ'FEPSBδϟʔφϧʹʮ'FEPSB $PSF040,%ʯͷهࣄΛࣥච